Heim > Backend-Entwicklung > PHP-Tutorial > 在集成paypal时不能收到IPN,该如何解决

在集成paypal时不能收到IPN,该如何解决

WBOY
Freigeben: 2016-06-13 13:17:27
Original
1398 Leute haben es durchsucht

在集成paypal时不能收到IPN
1. 采用标准集成的方式,按钮进行支付(已经成功)
2. return 能收到。
3. IPN不能收到。。。但是在卖家账号设置里可以看到ipn已经发出去了。
4. sandbox环境







 





//从 PayPal 出读取 POST 信息同时添加变量?cmd? 
$req = 'cmd=_notify-validate'; 
foreach ($_POST as $key => $value) { 
$value = urlencode(stripslashes($value)); 
$req .= "&$key=$value"; 

//建议在此将接受到的信息记录到日志文件中以确认是否收到 IPN 信息 
//将信息 POST 回给 PayPal 进行验证 
$header .= "POST /cgi-bin/webscr HTTP/1.0\r\n"; 
$header .= "Content-Type:application/x-www-form-urlencoded\r\n"; 
$header .= "Content-Length:" . strlen($req) ."\r\n\r\n"; 
//在 Sandbox 情况下,设置: 
$fp = fsockopen('www.sandbox.paypal.com',80,$errno,$errstr,30); 
//$fp = fsockopen ('www.paypal.com', 80, $errno, $errstr, 30); 
//将 POST 变量记录在本地变量中 
//该付款明细所有变量可参考: 
//https://www.paypal.com/IntegrationCenter/ic_ipn-pdt-variable-reference.htm
$item_name = $_POST['item_name']; 
$item_number = $_POST['item_number']; 
$payment_status = $_POST['payment_status']; 
$payment_amount = $_POST['mc_gross']; 
$payment_currency = $_POST['mc_currency']; 
$txn_id = $_POST['txn_id']; 
$receiver_email = $_POST['receiver_email']; 
$payer_email = $_POST['payer_email']; 
//… 
//判断回复 POST 是否创建成功 
if (!$fp) { 
//HTTP 错误 
}else { 
//将回复 POST 信息写入 SOCKET 端口 
fputs ($fp, $header .$req); 
//开始接受 PayPal 对回复 POST 信息的认证信息 
while (!feof($fp)) { 
$res = fgets ($fp, 1024); 
//已经通过认证 
if (strcmp ($res, "VERIFIED") == 0) { 

@$fp = fopen("aaa.txt","w");
  if(!$fp){
  echo "system error";
  exit();
  }else {
  fwrite($fp,"完成");
  fclose($fp);
  }

//检查付款状态 
//检查 txn_id 是否已经处理过 
//检查 receiver_email 是否是您的 PayPal 账户中的 EMAIL 地址 
//检查付款金额和货币单位是否正确 
//处理这次付款,包括写数据库 
}else if (strcmp ($res, "INVALID") == 0) { 
//未通过认证,有可能是编码错误或非法的 POST 
@$fp = fopen("bbb.txt","w");
  if(!$fp){
  echo "system error";
  exit();
  }else {
  fwrite($fp,"有错");
  fclose($fp);
  }




fclose ($fp); 

?>

------解决方案--------------------
PHP code

//session_start();

$req = 'cmd=_notify-validate';

foreach ($_POST as $key => $value) {
$value = urlencode(stripslashes($value));
$req .= "&$key=$value";
}
$url='https://www.paypal.com/cgi-bin/webscr';
    $curl_result=$curl_err='';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/x-www-form-urlencoded", "Content-Length: " . strlen($req)));
    curl_setopt($ch, CURLOPT_HEADER , 0);   
    curl_setopt($ch, CURLOPT_VERBOSE, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_TIMEOUT, 3000);

    $curl_result = @curl_exec($ch);
    $curl_err = curl_error($ch);
    curl_close($ch);


$mc_gross = $_POST['mc_gross']; <div class="clear">
                 
              
              
        
            </div>
Nach dem Login kopieren
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage