user1526261
user1526261

Reputation: 21

Authentication Error with Paypal Sandbox and Google App Engine

I'm having trouble getting the Paypal Adaptive Payments API to work with GAE - I'm specifically going to be using Implicit Payments.

The error returned is that my api credentials are incorrect, but from what i've read I should be suspicious of the header format as well.

Here's the snippet of code - I'm using the urlfetch module in GAE:

headers = {
        "X-PAYPAL-USERID"               : "xxxx_123456789_biz_api1.xxxx.com",
        "X-PAYPAL-SECURITY-PASSWORD"    : "1234567890",
        "X-PAYPAL-SECURITY-SIGNATURE"   : "Ahg-XXXXXXXXXXXXXXXXXXXXXX",
        "X-PAYPAL-REQUEST-DATA-FORMAT"  : "JSON",
        "X-PAYPAL-RESPONSE-DATA-FORMAT" : "JSON",
        "X-PAYPAL-APPLICATION-ID"       : "APP-80W284485P519543T"
    }

request_body = {
        "actionType"                        : "PAY",
        "senderEmail"                       : "[email protected]",
        "receiverList.receiver(0).email"    : "[email protected]",
        "receiverList.receiver(0).amount"   : 100.00,
        "currencyCode"                      : "USD",
        "cancelUrl"                         : "some_url.com",
        "returnUrl"                         : "some_url.com",
        "requestEnvelope.errorLanguage"     : "en_US"

    }

url = "https://svcs.sandbox.paypal.com/AdaptivePayments/Pay"

result = urlfetch.fetch(url=url,payload=request_body,headers=headers)

I've Xed out some values, but everything I'm using is coming from the sandbox "API Credentials" section.

Is there a problem with the header format? Am I using the wrong set of credentials? Can I even use the sandbox to test Implicit Payments?

Any help is much appreciated. Thanks!

For any of those having similar problems, follow the excellent tutorial located here: Awesome Paypal Adaptive Payments Tutorial The headers do tend to cause authentication errors if not formed correctly. I was pretty far off :)

Upvotes: 2

Views: 421

Answers (2)

stillwater
stillwater

Reputation: 47

go to your headers, and make a change like this

the key

'X-PAYPAL-USERID'

should become

'X-PAYPAL-SECURITY-USERID'.

Upvotes: 1

systempuntoout
systempuntoout

Reputation: 74104

You forgot to set the POST method inside the urlfetch.fetch call; without it, the payload data is ignored.

result = urlfetch.fetch(url=url, 
                        payload=request_body, 
                        method=urlfetch.POST, 
                        headers=headers)

The urllib2.Request used in the Tutorial instead switches automatically from GET to POST when the request data is set.

req = urllib2.Request(self.request_url,paypal_request_data,header_data)

Upvotes: 0

Related Questions