php paypal Server-side REST integration failure

(I’m not able to post code/errors etc because: ‘You need at least 10 reputation to post more than 2 links’; and everything contains a lot of links; just spent a couple of hours on a fully detailed post).

I’ve read similar posts here (and other places) but they have not helped.

I’m basically following:
https://developer.paypal.com/docs/integration/direct/express-checkout/integration-jsv4/server-side-REST-integration/#set-up-your-client

but PayPal’s documentation is somewhat chaotic, lacking in some crucial details and mysterious in places. Obviously written by a committee.

In a nutshell I have a PayPal payment id: “id”: “PAY-0J356327TH335450NK56Y2PQ”,

PayPal say return this from my create payment script. I’m not entirely sure how it should be returned: simply echo “PAY-0J356327TH335450NK56Y2PQ”; or return a json string. Tried both, did not solve anything.

Then there is (from the client side button):

onAuthorize: function(data) {
            return paypal.request.post(EXECUTE_PAYMENT_URL, {
                paymentID: data.paymentID,
                payerID:   data.payerID
            }).then(function() {

                // The payment is complete!
                // You can now show a confirmation message to the customer
            });

which I read as it calling my execute payment script with 2 variables (paymentID and payerID) which I need to use in my script.

I’ve tried the obvious:

$paymentID = $_POST["paymentID"];
$payerID = $_POST["payerID"];

the not so obvious (because I’m assuming it’s POSTing data although some docs seem somewhat confused on this point):

$paymentID = $_GET["paymentID"];
$payerID = $_GET["payerID"];

and my final attempt of:

$ret = file_get_contents("php://input");
$ar = json_decode($ret, TRUE);
$paymentID = $ar["paymentID"];
$payerID = $ar["payerID"];

None of which made any difference.

The errors I’m getting from PayPal are:

ppxo_no_token_passed_to_payment Object …
ppxo_unhandled_error Object …

Error: No value passed to payment
decorate …

I obviously have a valid access token otherwise I’d not get as far as getting a payment id.

Currently stumped; any ideas/pointers appreciated.

This really should be simple.

I had the same error message.

For me it occured when the javascript code receieved the response from my CREATE_PAYMENT_URL ajax request.

The response I was sending back from the server was not valid JSON so when it came time to execute onAuthorize data.paymentID and data.payerID were not available.

I suggests using console.log(data) just above the return statement in onAuthorize to make sure the data json object has a paymentId and payerId.

If not then it may be that your previoius CREATE_PAYMENT_URL is not returning the payment id.

The responses should be json. For example a valid create payment response:

{“id”:”PAY-5T1130394T551090NLGRLACY”}

Hope that helps.