Seguendo la guida su https://developer.paypal.com/webapps/developer/docs/integration/web/accept-paypal-payment/, ho creato correttamente un pagamento e reindirizzato l'utente per approvarlo.API REST di Paypal: come recuperare l'ID di pagamento dopo che l'utente ha approvato il pagamento.
Il pagamento creato è qualcosa di simile a un muggito e lo salvi nella sessione dell'utente per ulteriore riferimento.
{
"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"
}
]
}
dopo che l'utente ha approvato il pagamento, Paypal reindirizza l'utente al return_url
. Ad esempio, http://<return_url>?token=EC-60U79048BN7719609&PayerID=7E7MGXCWTTKK2
.
Per eseguire il pagamento, è necessario effettuare una richiesta POST a https://api.sandbox.paypal.com/v1/payments/payment/{payment_id}/execute/
.
Domanda
Gli unici due pezzi di informazioni fornite da Paypal nella URL è token
e PayerID
. Come posso trovare il corrispondente payment_id
?
Possibile soluzione
La token
fa parte della approval_url
, analizzare l'URL e conservare il rapporto token -> payment
può risolvere il problema. Ma sto cercando una soluzione migliore che non richieda analisi.
Penso che questo sia l'approccio migliore, non usando il paymentID ma un token casuale per connettere la chiamata async paypal. In questo modo puoi scollegare l'utente della sessione senza problemi. Con python python sto creando il pagamento inviando l'url di successo come http: // localhost: 6543/payment_ok/t-b37b41f1-5146-463a-b248-bad523a2fa79. –
Sì Antonio, hai ragione! La verità è che non hai l'ID di pagamento prima di inviare la richiesta. Quindi, inviando un token casuale è possibile identificare la sessione dell'utente. –
Questo non funzionerà. Il motivo è che l'ID di pagamento non è noto FINO A QUANDO l'URL di ritorno è già stato inviato a PayPal. La best practice attualmente raccomandata è quella di memorizzare l'ID di pagamento nella sessione dell'utente (assicurati solo che la sessione non scada prima che l'utente ritorni o che il record di pagamento di PayPal venga cancellato). Sarebbe stato meglio se PayPal avesse incluso l'ID di pagamento in aggiunta all'ID del pagatore e al token di transazione. Non sono sicuro del motivo per cui hanno deciso di ometterlo. Ciò che è ugualmente frustrante è che non l'hanno menzionato nella loro documentazione. – Aquarelle