我正在尝试使用paypal经典API设置并行支付。然而,我得到了大量的错误。
我在沙箱中设置了2个测试帐户以及一个经典应用程序。
我使用PHP CURL来发起请求。我将CURL代码从doc更新为php CURL。
我的PHP代码如下:$headers = array(
"X-PAYPAL-SECURITY-USERID: XXXXXX" ,
"X-PAYPAL-SECURITY-PASSWORD: XXXXXX",
"X-PAYPAL-SECURITY-SIGNATURE: XXXXXX" ,
"X-PAYPAL-REQUEST-DATA-FORMAT: NV",
"X-PAYPAL-RESPONSE-DATA-FORMAT: NV",
"X-PAYPAL-APPLICATION-ID: APP-80W284485P519543T",
);
$post_array = array(
'actionType'=>'PAY',
'clientDetails.applicationId'=>'APP-80W284485P519543T',
'currencyCode'=>'USD',
'feesPayer'=>'SECONDARYRECEIVER',
'receiverList.receiver(0).amount'=>'5.00',
'receiverList.receiver(0).email'=>'primaryreceiver1@test.com',
'receiverList.receiver(0).primary'=>'true',
'receiverList.receiver(1).amount'=>'5.00',
'receiverList.receiver(1).email'=>'secondaryreceiver1@test.com ',
'receiverList.receiver(1).primary'=>'false',
'requestEnvelope.errorLanguage'=>'en_US',
'ipnNotificationUrl'=>'http://www.yourdomain.com/ipn_myreceiver',
'returnUrl'=>'http://www.yourdomain.com/success',
'cancelUrl'=>'http://www.yourdomain.com/cancel',
);
$url = 'https://svcs.sandbox.paypal.com/AdaptivePayments/Pay';
$curl_session = curl_init();
curl_setopt($curl_session, CURLOPT_URL,$url);
curl_setopt($curl_session, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl_session, CURLOPT_POST, 1);
curl_setopt($curl_session, CURLOPT_POSTFIELDS, http_build_query($post_array));
curl_setopt($curl_session, CURLOPT_CONNECTTIMEOUT,10);
curl_setopt($curl_session, CURLOPT_TIMEOUT, 10);
curl_setopt($curl_session, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_session, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl_session, CURLOPT_SSL_VERIFYPEER, 0);
$response = curl_exec($curl_session);
echo $response;
我得到以下错误响应:
responseEnvelope.timestamp = 2014 - 03 - 20 - t11 % 3 a35 % 3 a58.520-07 % 3 a00& responseEnvelope.ack = Failure& responseEnvelope.correlationId = db88a73f724a0& responseEnvelope.build = 10175386,错误(0).errorId = 580022,错误(0).domain = PLATFORM&错误(0).subdomain = Application&错误(0).severity =误差放大器;错误(0).category = Application&错误请求(0).message =无效+ +参数% 3 +电子邮件+ secondaryreceiver1 % 40 test.com + + + invalid&错误(0).parameter (0) = email&错误(0).parameter (1) =test.com aryreceiver1 % 40 +
怎么了?
在curl的CURLOPT_POSTFIELDS
上您正在对整个$parameter
进行url编码,这是错误的urlencode($post)
对于http POST, url编码是这样完成的:
$param = "key1=".urlencode($value1);
$param = $param . "&" . "key2=".urlencode($value2);
$param = $param . "&" . ".email=".urlencode('primaryreceiver1@test.com');
// and so on.
所以改变你的POST参数urlencoding
根据上面的一个,然后再试一次。
注意:如果你的key1, key2等有特殊字符,那么你也必须对它们做urlencode。例如,如果是xyz%32=value1
那么你必须使用urlencode('xyz%32').'=value1'
尝试对post字段使用http_build_query。我通常都能成功。
所以像
$post = array('actionType' => "PAY", 'value2 => "etc etc etc );
然后在curl选项
curl_setopt($curl_session, CURLOPT_POSTFIELDS, http_build_query($post));