PayPal AdaptivePayments PaymentDetail PayKey

Я использую PayPal Pay API с Adaptive (Chained) Payments. Я пытаюсь перенаправить пользователя на paypal, а затем вернуться к предопределенному return_url.

Проблема в том, что мне нужно иметь PayKey в моем обратном URL-адресе. Причина для этого: мне нужно вызвать API PaymentDetail, чтобы просмотреть платеж в return_url. И я не хочу использовать IPN, так как мне нужна проверка с некоторым токеном прямо на моем возврате Url.

Проблема в том, что: PayKey генерируется со всеми параметрами, включая return-url (следовательно, после того, как я создаю фактический массив, из которого я получаю свой ответ от $. Я не могу поместить PayKey в return-Url так как он еще не создан на этом этапе.

//Create request payload with minimum required parameters $bodyparams = array ("requestEnvelope.errorLanguage" => "en_US", "actionType" => "PAY", "currencyCode" => "USD", "cancelUrl" => "http://www.paypal.com", "returnUrl" => $return_url . "&payKey=${payKey}", **// Does not work - PAYKEY NEEDED TO ADD???** "receiverList.receiver(0).email" => "account1@hotmail.com", //TODO "receiverList.receiver(0).amount" => $price, //TODO "receiverList.receiver(0).primary" => "true", //TODO "receiverList.receiver(1).email" => "account2@hotmail.com", //TODO "receiverList.receiver(1).amount" => $receiver_gets, //TODO "receiverList.receiver(1).primary" => "false" //TODO ); // convert payload array into url encoded query string $body_data = http_build_query($bodyparams, "", chr(38)); // Generates body data try { //create request and add headers $params = array("http" => array( "method" => "POST", "content" => $body_data, "header" => "X-PAYPAL-SECURITY-USERID: " . $API_UserName . "\r\n" . "X-PAYPAL-SECURITY-SIGNATURE: " . $API_Signature . "\r\n" . "X-PAYPAL-SECURITY-PASSWORD: " . $API_Password . "\r\n" . "X-PAYPAL-APPLICATION-ID: " . $API_AppID . "\r\n" . "X-PAYPAL-REQUEST-DATA-FORMAT: " . $API_RequestFormat . "\r\n" . "X-PAYPAL-RESPONSE-DATA-FORMAT: " . $API_ResponseFormat . "\r\n" )); //create stream context $ctx = stream_context_create($params); //open the stream and send request $fp = @fopen($url, "r", false, $ctx); //get response $response = stream_get_contents($fp); //check to see if stream is open if ($response === false) { throw new Exception("php error message = " . "$php_errormsg"); } fclose($fp); //parse the ap key from the response $keyArray = explode("&", $response); foreach ($keyArray as $rVal){ list($qKey, $qVal) = explode ("=", $rVal); $kArray[$qKey] = $qVal; } //set url to approve the transaction $payPalURL = "https://www.sandbox.paypal.com/webscr?cmd=_ap-payment&paykey=" . $kArray["payKey"]; **// Here it works fine, since the PayKey is generated at this point ...** //print the url to screen for testing purposes If ( $kArray["responseEnvelope.ack"] == "Success") { echo '<p><a href="' . $payPalURL . '" target="_blank">' . $payPalURL . '</a></p>'; } else { echo 'ERROR Code: ' . $kArray["error(0).errorId"] . " <br/>"; echo 'ERROR Message: ' . urldecode($kArray["error(0).message"]) . " <br/>"; } 

Может ли кто-нибудь помочь?

Solutions Collecting From Web of "PayPal AdaptivePayments PaymentDetail PayKey"

Я тоже был в этом веком. Я наконец-то понял. Документы Paypal трудно соблюдать. Я нашел ответ в адаптивном pdf-руководстве paypal, который я загрузил. Он указывает, чтобы добавить payKey=${payKey} в конец вашего return_url . Я просто попробовал это там, и paypal получит запрос к моему возврату url теперь содержит paykey.

Поэтому в рельсах, которые я использую return_url выглядит так. Написание PHP-переменной (я думаю) в URL-адрес, как указано руководством

 :return_url => "http://***********.com/paypal-return?payKey=${payKey}" 

Кажется, что вам не хватает шага в последовательности.

Первый шаг – отправить параметры транзакции на

https://svcs.paypal.com/AdaptivePayments/Pay&yourtransactionparameters=blah [песочница] https://svcs.sandbox.paypal.com/AdaptivePayments/Pay&yourtransactionparameters=blah

В этом ответе вы получите ключ paykey.

После того как вы успешно восстановили ключ Paykey, вы вызовете:

https://www.paypal.com/webscr&cmd=_ap-payment&paykey=xxxx [песочница] https://www.sandbox.paypal.com/webscr&cmd=_ap-payment&paykey=xxxx

Во втором вызове payKey представляет остальную часть вашей транзакции, поэтому вам не нужно строить другую гигантскую строку запроса.

Измените свой код для:

 //Create request payload with minimum required parameters $bodyparams = array ("requestEnvelope.errorLanguage" => "en_US", "actionType" => "PAY", "currencyCode" => "USD", "cancelUrl" => "http://www.paypal.com", "returnUrl" => $return_url . '&payKey=${payKey}', **// That's right** "receiverList.receiver(0).email" => "account1@hotmail.com", //TODO "receiverList.receiver(0).amount" => $price, //TODO "receiverList.receiver(0).primary" => "true", //TODO "receiverList.receiver(1).email" => "account2@hotmail.com", //TODO "receiverList.receiver(1).amount" => $receiver_gets, //TODO "receiverList.receiver(1).primary" => "false" //TODO ); 

PHP интерпретирует $ {payKey} как переменную между двойными кавычками. Изменение двойных кавычек (") для простых котировок (')

По-видимому, вы можете вставлять динамические переменные в URL-адрес возврата: https://www.x.com/thread/49785

К сожалению, {$ payKey} недействителен. поэтому он должен быть $ paykey или $ pay_key. Удачи!