Php Can';t连接到paykey的paypal自适应API-获取400错误请求
我已经研究并尝试了2天,用PayPal Adaptive API进行测试调用 我用php cURL手工编写了一个相当简单的测试代码Php Can';t连接到paykey的paypal自适应API-获取400错误请求,php,paypal,paypal-adaptive-payments,Php,Paypal,Paypal Adaptive Payments,我已经研究并尝试了2天,用PayPal Adaptive API进行测试调用 我用php cURL手工编写了一个相当简单的测试代码 protected function makePayment($a=''){ if($a==''){return 'OOPs';} $amount = "1.00"; $receiver = "RECEIVER TEST EMAIL"; $url =
protected function makePayment($a=''){
if($a==''){return 'OOPs';}
$amount = "1.00";
$receiver = "RECEIVER TEST EMAIL";
$url = 'https://api-3t.sandbox.paypal.com/nvp/Pay';
$paypalHeaders = array(
'X-PAYPAL-SECURITY-USERID : XXXXXXXX',
'X-PAYPAL-SECURITY-PASSWORD : XXXXXXX',
'X-PAYPAL-SECURITY-SIGNATURE : XXXXXXX',
'X-PAYPAL-SECURITY-VERSION: 1.8.6',
'X-PAYPAL-DEVICE-IPADDRESS: <MY SITE IP>',
'X-PAYPAL-REQUEST-DATA-FORMAT : NV',
'X-PAYPAL-RESPONSE-DATA-FORMAT : NV',
'X-PAYPAL-APPLICATION-ID : APP-80W284485P519543T',
'X-PAYPAL-SANDBOX-EMAIL-ADDRESS: MY-SANDBOX-APP-OWNER@email.com'
);
// Format the call payload.
$payload = array(
"actionType"=>"PAY",
"currencyCode"=>"USD",
"receiverList"=>array(
"receiver"=>array(
array("amount"=>$amount,"email"=>$receiver)
)
),
"returnUrl"=>"https://biddingblock.com/api/payment.php",
"cancelUrl"=>"https://biddingblock.com/index.htm",
"requestEnvelope"=>array(
"errorLanguage"=>"en_US",
"detailLevel"=>"ReturnAll"
)
);
// Make the call
$curl = curl_init();
curl_setopt($curl, CURLOPT_VERBOSE, 1);
curl_setopt($curl, CURLOPT_HEADER, TRUE);
curl_setopt($curl, CURLOPT_HTTPHEADER, $paypalHeaders);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $Request);
$Response = curl_exec($curl);
curl_close($curl);
return $Response;
受保护函数makePayment($a=''){
如果($a=''){返回'OOPs';}
$amount=“1.00”;
$receiver=“接收方测试电子邮件”;
$url='1https://api-3t.sandbox.paypal.com/nvp/Pay';
$paypalHeaders=数组(
“X-PAYPAL-SECURITY-USERID:XXXXXXXX”,
'X-PAYPAL-SECURITY-PASSWORD:XXXXXXX',
“X-PAYPAL-SECURITY-SIGNATURE:XXXXXXX”,
'X-PAYPAL-SECURITY-VERSION:1.8.6',
“X-PAYPAL-DEVICE-IPADDRESS:”,
“X-PAYPAL-REQUEST-DATA-FORMAT:NV”,
“X-PAYPAL-RESPONSE-DATA-FORMAT:NV”,
“X-PAYPAL-APPLICATION-ID:APP-80W284485P519543T”,
'X-PAYPAL-SANDBOX-EMAIL-ADDRESS:MY-SANDBOX-APP-OWNER@email.com'
);
//格式化呼叫负载。
$payload=阵列(
“actionType”=>“支付”,
“货币代码”=>“美元”,
“receiverList”=>数组(
“接收器”=>阵列(
数组(“金额”=>$amount,“电子邮件”=>$receiver)
)
),
“返回URL”=>“https://biddingblock.com/api/payment.php",
“取消URL”=>“https://biddingblock.com/index.htm",
“requestEnvelope”=>数组(
“errorLanguage”=>“en_US”,
“detailLevel”=>“ReturnAll”
)
);
//打电话
$curl=curl_init();
curl_setopt($curl,CURLOPT_VERBOSE,1);
curl_setopt($curl,CURLOPT_头,TRUE);
curl_setopt($curl,CURLOPT_HTTPHEADER,$paypalHeaders);
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($curl,CURLOPT_超时,30);
curl_setopt($curl,CURLOPT_URL,$URL);
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl,CURLOPT_POSTFIELDS,$Request);
$Response=curl\u exec($curl);
curl_close($curl);
返回$Response;
*我对这段代码所做的每一次修改仍然没有通过一垒,我收到了以下返回的错误*
HTTP/1.1400错误请求
服务器:AkamaiGHost
Mime版本:1.0
内容类型:text/html
内容长度:176
到期时间:2014年3月31日星期一12:31:45 GMT
日期:2014年3月31日星期一12:31:45 GMT
连接:关闭
处理您的请求时出错
参考#166.d80300cc.1396269105.de2dda4
我没有使用AdaptiveAPIPPHPSDK,这或多或少是完整的代码,没有真正的密钥和接收者电子邮件
我做错了什么?
有人能帮忙吗
PS:我也尝试过使用数据格式JSON和JSON编码有效负载数组。这对我有用:
$nvp = "&PAYMENTREQUEST_0_PAYMENTACTION=SALE";
$nvp.= "&PAYMENTREQUEST_0_AMT=19.95";
$nvp.= "&PAYMENTREQUEST_0_CURRENCYCODE=USD";
$nvp.= "&RETURNURL=http://www.dropial.com/success.html";
$nvp.= "&CANCELURL=http://www.dropial.com/cancel.html";
$response = wpp_hash('SetExpressCheckout', $nvp);
if ($response['ACK'] == 'Success') {
$this->Session->setFlash('Payment Successful');
} else {
$this->Session->setFlash('Payment Failed');
}
函数wpp_hash定义为:
public function wpp_hash($method = null, $nvp = null) {
$curl_handler = curl_init();
curl_setopt($curl_handler, CURLOPT_URL, 'https://api-3t.sandbox.paypal.com/nvp';
curl_setopt($curl_handler, CURLOPT_VERBOSE, 1);
curl_setopt($curl_handler, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl_handler, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl_handler, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handler, CURLOPT_POST, 1);
$required_nvp = 'METHOD='.$method;
$required_nvp .= '&VERSION='.urlencode(Configure::read('Paypal.version'));
$required_nvp .= '&USER='.urlencode(Configure::read('Paypal.username'));
$required_nvp .= '&PWD='.urlencode(Configure::read('Paypal.password'));
$required_nvp .= '&SIGNATURE='.urlencode(Configure::read('Paypal.signature'));
curl_setopt($curl_handler, CURLOPT_POSTFIELDS, $required_nvp.$nvp);
$http_responder = curl_exec($curl_handler);
curl_close($curl_handler);
pr($http_responder);
if (!$http_responder) {
throw new BadRequestException($method.'failed: '.curl_error($curl_handler).' ('.curl_errno($curl_handler).')');
}
$responder = explode('&', $http_responder);
$parsed_response = array();
foreach($responder as $response) {
$response_array = explode('=', $response);
if (count($response_array) >= 1){
$parsed_response[$response_array[0]] = urldecode($response_array[1]);
}
}
if ((count($parsed_response) < 1) || !array_key_exists('ACK', $parsed_response)){
throw new BadRequestException('Invalid HTTP Response for POST request ('.$required_nvp.$nvp.') to '.Configure::read('Paypal.endpoint'));
}
return $parsed_response;
}
公共函数wpp\u hash($method=null,$nvp=null){
$curl\u handler=curl\u init();
curl_setopt($curl_handler,CURLOPT_URL,'https://api-3t.sandbox.paypal.com/nvp';
curl_setopt($curl_handler,CURLOPT_VERBOSE,1);
curl_setopt($curl_handler,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($curl_handler,CURLOPT_SSL_VERIFYHOST,false);
curl_setopt($curl_handler,CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl_handler,CURLOPT_POST,1);
$required_nvp='METHOD='。$METHOD;
$required_nvp.='&VERSION='.urlencode(Configure::read('Paypal.VERSION'));
$required_nvp.='&USER='.urlencode(Configure::read('Paypal.username'));
$required_nvp.='&PWD='.urlencode(Configure::read('Paypal.password'));
$required_nvp.='&SIGNATURE='.urlencode(Configure::read('Paypal.SIGNATURE'));
curl_setopt($curl_handler,CURLOPT_POSTFIELDS,$required_nvp.$nvp);
$http\u responder=curl\u exec($curl\u handler);
curl\u close($curl\u handler);
pr(http_响应者);
如果(!$http\U响应程序){
抛出新的BadRequestException($method.'failed:'.curl_error($curl_handler)。'('.curl_errno($curl_handler)。');
}
$responder=explode('&',$http_responder);
$parsed_response=array();
foreach($responder作为$response){
$response_array=explode('=',$response);
if(计数($response\u array)>=1){
$parsed_response[$response_array[0]]=urldecode($response_array[1]);
}
}
如果((计数($parsed_response)<1)| |!数组_key_存在('ACK',$parsed_response)){
将新的BadRequestException('POST请求的无效HTTP响应('.$required\u nvp.$nvp')抛出到'.Configure::read('Paypal.endpoint');
}
返回$parsed_响应;
}
您可以将该方法更改为使用另一个PayPal交易。在我的情况下,我使用的是快速结帐。我已经超越了这一点,并使用了一种变通方法,即使用以下方法运行此方法 谢谢 这是我采用的解决方案
$payload = array(
"actionType"=>"PAY",
"currencyCode"=>"USD",
"receiverList"=>array(
"receiver"=>array(
array("amount"=>$amount,"email"=>$receiver)
)
),
"feesPayer"=>"PRIMARYRECEIVER",
"returnUrl"=>"MyRETURN_URL",
"cancelUrl"=>"MyCANCEL_URL",
"requestEnvelope"=>array(
"errorLanguage"=>"en_US",
"detailLevel"=>"ReturnAll"
)
);
$request = 'curl -s --insecure'.$TEST_url.' -d "'.addslashes(json_encode($payload)).'"';
$response = json_decode(exec($request));
使用正确的端点很重要:HTTPS://api-3t.sandbox.paypal.com/nvpI请注意您的代码,您似乎正在使用PHP Adaptive SDK?我没有使用原始POS中所示的SQK,可以不使用SDK连接到沙盒?我的问题似乎是因为我没有成功连接到PHP Adaptive SDK他根本不使用沙箱,但我可能弄错了。谢谢你的回复,我无法在我的服务器上运行此wot。很抱歉我的延迟。我没有使用PHP Adaptive SDK,只使用cURL。