Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Paypal REST API: How to retrieve payment ID after user has approved the payment.

Tags:

paypal

By following the guide on https://developer.paypal.com/webapps/developer/docs/integration/web/accept-paypal-payment/ , I have successfully created a payment and redirect the user to approve it.

The created payment is something look like bellow, and I save it in user's session for further reference.

{
  "id": "PAY-6RV70583SB702805EKEYSZ6Y",
  "create_time": "2013-03-01T22:34:35Z",
  "update_time": "2013-03-01T22:34:36Z",
  "state": "created",
  "intent": "sale",
  "payer": {
    "payment_method": "paypal"
  },
  "transactions": [
    {
      "amount": {
        "total": "7.47",
        "currency": "USD",
        "details": {
          "subtotal": "7.47"
        }
      },
      "description": "This is the payment transaction description."
    }
  ],
  "links": [
    {
      "href": "https://api.sandbox.paypal.com/v1/payments/payment/PAY-6RV70583SB702805EKEYSZ6Y",
      "rel": "self",
      "method": "GET"
    },
    {
      "href": "https://www.sandbox.paypal.com/webscr?cmd=_express-checkout&token=EC-60U79048BN7719609",
      "rel": "approval_url",
      "method": "REDIRECT"
    },
    {
      "href": "https://api.sandbox.paypal.com/v1/payments/payment/PAY-6RV70583SB702805EKEYSZ6Y/execute",
      "rel": "execute",
      "method": "POST"
    }
  ]
}

After user approved the payment, Paypal will redirect the user to the return_url. For example, http://<return_url>?token=EC-60U79048BN7719609&PayerID=7E7MGXCWTTKK2.

In order to execute the payment, a POST request has to made to https://api.sandbox.paypal.com/v1/payments/payment/{payment_id}/execute/.

Question

The only two pieces of information provided from Paypal in the URL is token and PayerID. How can I find the corresponding payment_id?

Possible Solution

The token is part of the approval_url, parse the URL and store the token -> payment relationship can solve the problem. But I'm looking for a better solution that doesn't require parsing.

like image 929
Greg Wang Avatar asked Aug 31 '13 02:08

Greg Wang


People also ask

How do I find my PayPal payer ID?

Click the Settings icon on the top right. Select “Account Settings” On the left column, under “Business Profile” click “Business Information” The PayPal Merchant ID should display.

What is a PayPal request ID?

To enforce idempotency on REST API POST calls, use the PayPal-Request-Id request header, which contains a unique user-generated ID that the server stores for a period of time.

What does the PayPal API allow developers to do?

You can accept an immediate payment or authorize a payment and capture it later. You can show details for completed payments, refunds, and authorizations. You can make full or partial refunds. You also can void or re-authorize authorizations.

How do I approve a payment on PayPal?

If your PayPal account is set up where you have to manually claim each payment, once notified of payment you'll need to head to PayPal to accept the payment: Log into PayPal. Go to Summary. Under 'Pending', next to the message showing the recipient 'hasn't accepted yet', click Approve.


2 Answers

I think the paypal documentation isn't clear about this. But you can do something simple to resolve your problem passing de PaymentID through a parameter in your return url.

Like this: return_url = 'http://www.yourdomain.com/paypal/success/?paymentID=PAY-1234567'

When the Paypal redirect to your site, then, it will return the paymentID together with the other parameters.


Em português:

Não acho que isso esteja claro na documentação do Paypal. A solução que eu usei foi simples, eu passo o PaymentID como parâmetro na minha URL de retorno que informo para o Paypal. Assim, quando o Paypal redirecionar para meu site de volta ele matem o parâmetro com o PaymentID que eu tinha passado.

like image 129
Luiz Fernando Avatar answered Sep 21 '22 14:09

Luiz Fernando


You would have to remember the Payment ID on your side (typically attached with your user session - shopping cart or order or as a session cookie) before redirecting the user to PayPal approval url. Once the is redirected back to your return Url along with the PayerID - you would need to extract the PaymentID from your user session and execute the Payment.

like image 29
Praveen Avatar answered Sep 18 '22 14:09

Praveen