首先,您必须使用 http_build_query 方法而不是以数组的形式发布到 paypal 服务器,而是像查询一样发布 - 以我的示例为例:
$padata['L_BILLINGAGREEMENTDESCRIPTION0'] = 'product description';
$padata['L_PAYMENTREQUEST_0_DESC0'] = $padata['L_BILLINGAGREEMENTDESCRIPTION0'] . ' price - 0,01$';
$padata['PAYMENTREQUEST_0_NOTIFYURL'] = 'http://yourdomain.com/paypal/ipn';
$padata['PAYMENTREQUEST_0_DESC'] = 'product name'; //enter code here
$padata['CANCELURL'] = ''http://yourdomain.com/paypal/cancelurl';
$padata['RETURNURL'] = ''http://yourdomain.com/paypal/returnurl';
$padata['PAYMENTREQUEST_0_CURRENCYCODE'] = 'USD';
$padata['PAYMENTREQUEST_0_PAYMENTACTION'] = 'SALE';
$padata['PAYMENTREQUEST_0_ITEMAMT'] = $product->price;
$padata['PAYMENTREQUEST_0_AMT'] = $product->price;
$padata['L_BILLINGTYPE0'] = 'RecurringPayments';
$padata['L_PAYMENTREQUEST_0_NAME0'] = 'product name';
$padata['L_PAYMENTREQUEST_0_NUMBER0'] = 223; // 'product ID '
$padata['L_PAYMENTREQUEST_0_QTY0'] = '1';
$padata['L_PAYMENTREQUEST_0_AMT0'] = $product->price;
$paypal_data = http_build_query($padata);
$httpParsedResponseAr = $this->PPHttpPost('SetExpressCheckout', $paypal_data);
我使用单独的方法将数据发送到 paypal api:
私有函数 PPHttpPost( $methodName_, $nvpStr_ ) {
$api_username = 'yourapiemail@paypal.com';
$api_password = '111111';
$api_signature = 'ASDdsasdaASDasdaDASDFzMjEzStQBLyke6Pi4vQhAy3JWRsdOpQybmHjpzasdsad.fT';
$api_endpoint = "https://api-3t.paypal.com/nvp";
$版本 = '124.0';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $api_endpoint);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
$nvpreq = "方法=$methodName_&VERSION=$version&PWD=$api_password&USER=$api_username&SIGNATURE=$api_signature&$nvpStr_";
curl_setopt($ch, CURLOPT_POSTFIELDS, $nvpreq);
$httpResponse = curl_exec($ch);
如果(!$http响应){
exit("$methodName_ failed: ".curl_error($ch).'('.curl_errno($ch).')');
}
// 提取响应详细信息。
$httpResponseAr = explode("&", $httpResponse);
$httpParsedResponseAr = 数组();
foreach ($httpResponseAr as $i => $value) {
$tmpAr = explode("=", $value);
如果(大小($tmpAr)> 1){
$httpParsedResponseAr[$tmpAr[0]] = $tmpAr[1];
}
}
if((0 == sizeof($httpParsedResponseAr)) || !array_key_exists('ACK', $httpParsedResponseAr)) {
exit("对 $api_endpoint 的 POST 请求 ($nvpreq) 的 HTTP 响应无效。");
}
返回 $httpParsedResponseAr;
}