繁体   English   中英

PHP中的PayPal交易验证IPN返回无效

[英]PayPal transaction verification IPN in php returns INVALID

我知道这个问题一遍又一遍地问过。 但是,没有一种解决方案适合我。

我正在尝试通过沙盒验证PayPal交易。 我已经研究并找到了不同的代码,但是没有一个响应我的代码,或者大多数都是PayPal返回无效的


这是我的代码

header("HTTP/1.1 200 OK");
  // parse the paypal URL


$req = 'cmd=' . urlencode('_notify-validate');

foreach ($_GET as $key => $value) {
if (!is_array($value)) {
    $value = urlencode(stripslashes($value));
    $req .= "&$key=$value";
}else if (is_array($value)) {
    $paymentArray = explode(' ', $value[0]);
    $paymentCurrency = urlencode(stripslashes($paymentArray[0]));
    $paymentGross = urlencode(stripslashes($paymentArray[1]));
    $req .= '&mc_currency=' . $paymentCurrency . '&mc_gross=' . $paymentGross;
}
}

由于某种原因,我无法通过_POST获得任何信息,因此我尝试了_GET。 有任何想法吗?

echo $req;

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://www.sandbox.paypal.com/cgi-bin/webscr');

curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__)."/api_cert_chain.crt");

curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Host: www.sandbox.paypal.com'));
$res = curl_exec($ch);
curl_close($ch);




if (strcmp ($res, "VERIFIED") == 0) {
echo "valid";
// check the payment_status is Completed
// check that txn_id has not been previously processed
// check that receiver_email is your Primary PayPal email
// check that payment_amount/payment_currency are correct
// process payment
}
else if (strcmp ($res, "INVALID") == 0) {
echo "invalid";
// log for manual investigation
}

毕竟,我要么变得无效,要么一无所有。
我还将证书放在服务器的根目录中。

您是否尝试过使用此功能:

$data = file_get_contents('php://input');

我的坏事..结果是PayPal确实会在后台发送信号。.我实际上是通过重定向尝试的(交易完成后,PayPal取回原始来源)..从PayPal无法获得太多信息。 因此,总的来说,代码可以正常工作,以防万一。 还需要删除“沙箱”以进行实际交易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM