我正在尝试让Paypal在交易后重定向到我的网站并检索有关交易的信息。到目前为止,Paypal确实重定向到了正确的位置,但之后我回到Paypal的php curl操作检索了一个错误页面而不是我期待的SUCCESS / FAIL消息:
抱歉 - 您的上一个操作无法完成
[...]
我们无法做到 请在此时完成您的请求。请单击“重试”或重试 后来。对于给您带来的不便,我们深表歉意。
消息3004
我试过让我的代码在屏幕上打印'tx'参数,手动构建我的请求并将其直接放在浏览器中,即:
但是返回了上述相同的错误页面。
我已登录到我的沙盒paypal帐户,'at'参数包含与我的沙盒商家测试帐户关联的正确付款数据传输标识令牌。
我的请求遗漏了什么吗?我没有使用我的实际Paypal帐户进行测试,因为在我知道它有效之前我不想要任何真正的货币兑换。
答案 0 :(得分:2)
同样的错误 - 2个星期前注意到 - 已经与paypal联系,他告诉我检查我的代码 - 但即使复制和粘贴的代码样本仍会产生错误。当您登录测试卖家帐户时,您能看到交易吗?我可以,但再次单击详细信息视图会生成错误。
我能够在此帐户上通过PDT,但随后它突然开始失败而我的代码没有变化。
更新日期:31/07/2012: 尚未确认Paypal的解决方案 - 谈到商家的电话支持而不是技术团队,显然没有通过电话提供技术支持 - 商家建议告诉他们基本上要测试现场并避免沙箱。每次测试至少20便士,因为您必须退还测试交易。
我可以告诉你,这不是一个非常幸福的人。 :(
答案 1 :(得分:1)
$tx=$_REQUEST['tx'];
$paypal_url='https://www.paypal.com/cgi-bin/webscr?cmd=_notify-synch&tx='.$tx.'&at=token here';
$curl = curl_init($paypal_url);
$data = array(
"cmd" => "_notify-synch",
"tx" => $tx,
"at" => "token here"
);
$data_string = json_encode($data);
curl_setopt ($curl, CURLOPT_HEADER, 0);
curl_setopt ($curl, CURLOPT_POST, 1);
curl_setopt ($curl, CURLOPT_POSTFIELDS, $data_string);
curl_setopt ($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt ($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($curl, CURLOPT_SSL_VERIFYHOST, 1);
$headers = array (
'Content-Type: application/x-www-form-urlencoded',
'Host: www.paypal.com',
'Connection: close'
);
curl_setopt ($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt ($curl, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($curl);
$lines = explode("\n", $response);
$keyarray = array();
if (strcmp ($lines[0], "SUCCESS") == 0) {
for ($i=1; $i<count($lines);$i++){
list($key,$val) = explode("=", $lines[$i]);
$keyarray[urldecode($key)] = urldecode($val);
}
$first_name=$keyarray['first_name'];
$last_name=$keyarray['last_name'];
$payment_status=$keyarray['payment_status'];
$business=$keyarray['business'];
$payer_email=$keyarray['payer_email'];
$payment_gross=$keyarray['payment_gross'];
$mc_currency=$keyarray['mc_currency'];
}