2013-08-31 16 views
13

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.

risposta

11

Penso che la documentazione di PayPal non sia chiara su questo. Ma puoi fare qualcosa di semplice per risolvere il tuo problema passando il pagamento di PaymentID attraverso un parametro nel tuo url di ritorno.

Come questo: return_url = 'http://www.yourdomain.com/paypal/success/? IDPagamento = PAY-1234567 '

Quando il Paypal reindirizzare al tuo sito, allora, verrà restituito l'IDPagamento insieme agli altri parametri.


Em Português:

Não Acho que isso esteja claro na Documentação fare Paypal. Un 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 sito de volta ele matem o parmetro com o PaymentID que eu tinha passado.

+2

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. –

+3

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. –

+6

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

5

Dovresti ricordare l'ID di pagamento dalla tua parte (in genere allegato alla sessione utente - carrello della spesa o ordine o cookie di sessione) prima di reindirizzare l'utente all'URL di approvazione PayPal. Una volta reindirizzato all'URL di ritorno insieme al PayerID, sarà necessario estrarre il PaymentID dalla sessione utente ed eseguire il pagamento.

+1

non hanno trovato una soluzione migliore rispetto all'analisi e alla creazione di qualcosa come un arraystore che collega EC-TOKEN con PAY-TOKEN – colthreepv

-1
  1. paymentid:

Dopo aver creato il pagamento, in JSON ritorno, è possibile ottenere IDPagamento. in questo modo: "id": "PAY-01K00482KX842131HKORKVKY"

  1. payerid:

è possibile utilizzare API: GET/v1/pagamenti/pagamento/{IDPagamento} per ottenere contribuente id dopo approvato utente il pagamento, e troverete PayerID in jSON ritorno, come questo:

{ 
    "id":"PAY-01K00482KX842131HKORKVKY", 
    "create_time":"2014-06-19T09:17:31Z", 
    "update_time":"2014-06-19T09:17:31Z", 
    "state":"created", 
    "intent":"sale", 
    "payer":{ 
      "payment_method":"paypal", 
      "payer_info":{ 
        "email":"[email protected]", 
        "first_name":"buyer", 
        "last_name":"samsung", 
        "payer_id":"H2DKRTTYWW8HS", 
        "shipping_address":{            "line1":"Lushan Road Num.188",            "line2":"JianYe", 
               "city":"Tucson", 
                "state":"AZ", 
                "postal_code":"85715", 
                "country_code":"US", 
                "recipientName":"buyer samsung"}}}, 
    "transactions":[{ 
          "amount":{ 
             "total":"12.00", 
             "currency":"USD", 
             "details"{"subtotal":"12.00"}}, 
       "description":"creating a payment"}], 
    "links":[ 
        {"href":"xxxxxxx","rel":"self","method":"GET"}, 
       {"href":"xxxxxxx","rel":"approval_url","method":"REDIRECT"}, 
       {"href":"xxxxxxx","rel":"execute","method":"POST"}]} 
+0

Ho bisogno dello stesso numero in checkout.php (eseguito prima del pagamento) come in pay.php (eseguito dopo il pagamento) .. quello che mostri qui è solo la parte successiva ... –

0

ho trovato questo link per essere estremamente utile, nel caso qualcuno voglia di check it out: https://github.com/paypal/PayPal-NET-SDK/issues/79

+0

Questo post non è un tentativo reale di rispondere alla domanda. Si noti che [StackOverflow non funziona come un forum di discussione] (http://stackoverflow.com/tour), si tratta di un sito di domande e risposte in cui ogni post è una domanda o una risposta a una domanda. I post possono anche avere [commenti] (http://stackoverflow.com/help/privileges/comment) - frasi piccole come questa - che possono essere utilizzate per criticare o richiedere chiarimenti da un autore. Questo dovrebbe essere un commento o una [nuova domanda] (http://stackoverflow.com/questions/ask) –

1

L'Id Il pagamento può essere ottenuto in PHP utilizzando il metodo seguente dopo la prima richiesta API ha restituito una risposta positiva:

$payment->getId(); 

L'esempio di codice online (http://paypal.github.io/PayPal-PHP-SDK/sample/doc/payments/CreatePaymentUsingPayPal.html) mostra come per inviare la richiesta, tuttavia, non include il metodo getId().

Per scoprire questo ho dovuto cercare nei file SDK scaricato il file di esempio \ pagamenti \ CreatePayment.php che ha il seguente esempio di codice che mostra l'utilizzo di questo metodo:

ResultPrinter::printResult('Create Payment Using Credit Card', 'Payment', $payment->getId(), $request, $payment); 
Problemi correlati