Я в основном пытаюсь использовать PAY-вызов Adaptive Payments для программной обработки и немедленно отправлять средства с моей учетной записи PayPal на другие учетные записи. Согласно документации , пока я укажу senderEmail (мой собственный адрес PayPal, используемый для настройки Adaptive Payments), это должно работать дословно.
Однако, когда я звоню, я всегда получаю результат «СОЗДАН» вместо «ЗАВЕРШЕН». Созданный означает, что система все еще хочет, чтобы я вручную заходил в PayPal и одобрял платежи. Мне действительно нужно, чтобы эти платежи происходили автоматически на месте. Любая помощь будет оценена по достоинству.
Вот моя строка запроса:
currencyCode=USD& returnUrl=http%3A%2F%2Fwww.website.com%2F& actionType=PAY& cancelUrl=http%3A%2F%2Fwww.website.com%2F& receiverList.receiver%280%29.email=receiver%40gmail.com& receiverList.receiver%280%29.amount=1.00& requestEnvelope.senderEmail=me%40gmail.com& clientDetails.deviceId=mydevice& clientDetails.ipAddress=127.0.0.1& clientDetails.applicationId=APP-ZZZZZZZZZZZZZ& requestEnvelope.errorLanguage=en_US& memo=memo& feesPayer=EACHRECEIVER& ipnNotificationUrl=http%3A%2F%2Fwww.website.com%2Fpay.php
И вот ответ от PayPal:
[responseEnvelope.timestamp] => 2012-03-01T19:09:57.290-08:00 [responseEnvelope.ack] => Success [responseEnvelope.correlationId] => 71efd416a2100 [responseEnvelope.build] => 2486531 [payKey] => AP-ZZZZZZZZZZZZZZZ [paymentExecStatus] => CREATED
Забудьте все, что я сказал ранее. Проблема заключается не в несогласованности между Sandbox и Live, а скорее неправильным параметром для 'senderEmail'.
Просто измените:
requestEnvelope.senderEmail=me@gmail.com&
Для того, чтобы:
senderEmail=me@gmail.com&
Например, следующее возвращает 'COMPLETED' неявный платеж.
<?php function AdaptiveCall($bodyparams, $method, $payKey) { try { $body_data = http_build_query($bodyparams, "", chr(38)); $url = trim("https://svcs.sandbox.paypal.com/AdaptivePayments/".$method.""); $params = array("http" => array( "method" => "POST", "content" => $body_data, "header" => "X-PAYPAL-SECURITY-USERID: xxxxxxxxx\r\n" . "X-PAYPAL-SECURITY-SIGNATURE: xxxxxxxxxxx\r\n" . "X-PAYPAL-SECURITY-PASSWORD: xxxxxxx\r\n" . "X-PAYPAL-APPLICATION-ID: APP-80W284485P519543T\r\n" . "X-PAYPAL-REQUEST-DATA-FORMAT: NV\r\n" . "X-PAYPAL-RESPONSE-DATA-FORMAT: NV\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"); } //close the stream fclose($fp); //parse the ap key from the response $keyArray = explode("&", $response); foreach ($keyArray as $rVal){ list($qKey, $qVal) = explode ("=", $rVal); $kArray[$qKey] = $qVal; } //print the response to screen for testing purposes If ( $kArray["responseEnvelope.ack"] == "Success") { echo "<strong>".$method ."</strong><br>"; foreach ($kArray as $key =>$value){ echo $key . ": " .$value . "<br/>"; } // Return payKey global $payKey; if(!empty($kArray['payKey'])) { $payKey = $kArray['payKey']; return($payKey); } } else { echo 'ERROR Code: ' . $kArray["error(0).errorId"] . " <br/>"; echo 'ERROR Message: ' . urldecode($kArray["error(0).message"]) . " <br/>"; } } catch(Exception $e) { echo "Message: ||" .$e->getMessage()."||"; } } //Create Pay body $bodyparams = array ( "requestEnvelope.errorLanguage" => "en_US", 'actionType' => 'PAY', 'currencyCode' => 'USD', 'receiverList.receiver(0).email' => 'another_account@domain.tld', 'receiverList.receiver(0).amount' => '1.00', 'senderEmail' => 'xxxxxxxxx', 'memo' => 'Test memo', 'ipnNotificationUrl' => 'http://xxxxxxxx', 'cancelUrl' => 'http://xxxxxxxxx', 'returnUrl' => 'http://xxxxxxxxxx' ); // Call Pay API AdaptiveCall($bodyparams, "Pay"); ?>
Ответ на платеж:
responseEnvelope.timestamp: 2012-03-03T09% 3A10% 3A22.900-08% 3A00
responseEnvelope.ack: Успех
responseEnvelope.correlationId: 4bc5cfc4a7514
responseEnvelope.build: 2486531
payKey: AP-1XJ7636763429720C
paymentExecStatus: ЗАВЕРШЕН