paypal-express: Getting 'PayPal API Error: 'Version error''

When trying to register transaction I get:

Paypal::Exception::APIError - PayPal API Error: 'Version error'

Full message says that version is not supported. I tried setting Paypal.api_version to latest and different values and it doesn’t help.

This started happening suddenly yesterday. It was working fine few days ago.

full code of method

order = @order
    if(APP_CONFIG["paypal"]["sandbox"])
      Paypal.sandbox!
    end

    express_request = Paypal::Express::Request.new(
      :username   => APP_CONFIG["paypal"]["api_username"],
      :password   => APP_CONFIG["paypal"]["api_password"],
      :signature  => APP_CONFIG["paypal"]["api_signature"]
    )

    logger.info "==PPP Express::Request: #{express_request}"

    paypal_options = {
      no_shipping: true, # if you want to disable shipping information
      allow_note: false, # if you want to disable notes
      pay_on_paypal: true # if you don't plan on showing your own confirmation step
    }

    logger.info "==PPP paypal_options: #{paypal_options}"

    payment_request = Paypal::Payment::Request.new(
      :currency_code => "PLN",              # if nil, PayPal use USD as default
      :description   => order.pack.name,    # item description
      :quantity      => 1,                  # item quantity
      :amount        => order.total.round(2).to_f,
      :invoice_number => (order.id + 100000),
      :notify_url => APP_CONFIG["paypal"]["ipn_notify_url"]
    )

    response = express_request.setup(
      payment_request,
      "http://bookrage.org/paypal/success/#{order.return_token}",
      "http://bookrage.org/paypal/cancel/#{order.return_token}",
      paypal_options  # Optional
    )

    logger.info "==PPP response.redirect_uri: #{response.redirect_uri}"

    return response.redirect_uri

Still, example curl from paypal page works on sandbox event with my credentials

curl https://api-3t.sandbox.paypal.com/nvp \
>   -s \
>   --insecure \
>   -d USER=platfo_1255077030_biz_api1.gmail.com \
>   -d PWD=1255077037 \
>   -d SIGNATURE=Abg0gYcQyxQvnf2HDJkKtA-p6pqhA1k-KTYE0Gcy1diujFio4io5Vqjf \
>   -d METHOD=SetExpressCheckout \
>   -d VERSION=78 \
>   -d PAYMENTREQUEST_0_PAYMENTACTION=SALE \
>   -d PAYMENTREQUEST_0_AMT=19 \
>   -d PAYMENTREQUEST_0_CURRENCYCODE=USD \
>   -d cancelUrl=http://www.example.com/cancel.html \
>   -d returnUrl=http://www.example.com/success.html
TOKEN=EC%2d6VH883273N101092R&TIMESTAMP=2016%2d07%2d14T21%3a04%3a57Z&CORRELATIONID=c34496e55ed38&ACK=Success&VERSION=78&BUILD=000000%

About this issue

  • Original URL
  • State: open
  • Created 8 years ago
  • Reactions: 2
  • Comments: 24 (1 by maintainers)

Most upvoted comments

I’ve started using my own fork as I need the changes I’ve pulled in so far, which include changes from more than one other fork.

I am working on a project that depends on this library for the next year. I’m happy to become a maintainer for the next year or so if it helps others, focusing on bug fixes / minor improvements rather than new features. I’ve not maintained a project before but first time for everything. Unless there are any other takers? @nov?

Quick solution: using the fork from Ian Fleeton

gem 'paypal-express', github: 'ianfleeton/paypal-express'

I encountered this same problem and it turns out that the issue was that, although the paypal-express gem hadn’t changed, I had upgraded the rest-client gem from 1.8.2 to 2.0.0. The slight change between the versions is that they serialize querystring parameters slightly differently. Where 1.8.2 would emit: &SUBJECT=&VERSION=0.88 2.0.0 emits: &SUBJECT&VERSION=0.88 Although many servers understand this, seemingly Paypal’s doesn’t. (I’m guessing it sees one parameter named “SUBJECT&VERSION” with value “0.88” - and then complains that there’s no VERSION in the request). I have implemented a horrible workaround for now (evilly monkey-patching RestClient::Utils#encode_query_string). Although fixing to 1.8.2 of the rest-client gem works, too.

Hi! If you want not change of repository you can use monkey patching. This is the code:

File: config/initializers/paypal.rb

....

Paypal::NVP::Request.class_eval do
  def common_params
    {
      USER: self.username,
      PWD: self.password,
      SIGNATURE: self.signature,
      SUBJECT: self.subject,
      VERSION: self.version,
      version: self.version # This is necessary
    }
  end
end

A little bit late, but I hoppe help some one.

This solution was taking from ianfleeton/paypal-express repository, so thanks a lot ianfleeton

There already are pending PR with this change…Looks like this got abandoned

I’ve made a few commits and pulled in some others’ changes into https://github.com/ianfleeton/paypal-express by making pull requests from their forks and merging them.

Fixed:

  1. PayPal API version, including with refunds (thanks @meal @netjungle)
  2. Travis build with ActiveSupport 5.x (thanks @ursm)
  3. Phone number included (thanks @fny)

The next two items to look at:

  1. Gem releases
  2. Organization

Is it time to move the discussion over to ianfleeton/paypal-express?

Cheers!

Excellent, I’ll wait to see if anything happens by Sunday and if no news I’ll start reviewing the current open issues and pull requests with a view to moving things forward. Any and all help welcome 😃

awesome @ianfleeton do that! we need somebody to take over. A quick paypal integration gem is quite useful and we can’t let it die.

I tried to contact @nov multiple times on email, twitter and github, but no answer. Let’s move on!

I can create PR for this but I’m not sure if @nov still maintains this repository.

I think @meal or @ianfleeton seemed to fix it here: https://github.com/ianfleeton/paypal-express/commit/cebd62f02966f74a8aa3ece5d1793be9327048a0

Maybe we can merge that back into the canonical version? @nov are you still maintaining this or is there a new canonical fork?