因为更换服务器ip导致支付宝接口收不到NOTIFY通知问题~·

2016-07-07 15:01 来源:www.chinab4c.com 作者:ecshop专家

因为更换服务器ia在Ecshop下该怎么操作啊、。。
淘宝官网是这么说的。。。

前提:notify_url有被设置,且能够收到支付宝发来的通知,即该页面正常运作。

若出现该问题,解决方法如下:
原先设置的notify_url的路径比如是http://www.xxx.com/alipay/notify_url.asp
那么对notify_url文件夹做重命名,对notify_url路径相应的也要变换
如http://www.xxx.com/alipay/notify_change_url.asp

完成以上操作,就能解决域名没有变,服务器IP地址变动后,通知notify的页面收不到通知的问题。p导致支付宝接口收不到NOTIFY通知问题~·

回答:
联系 phpsir
QQ733905

你问题描述的不是很明白~是你的程序接收不到支付宝的通知,还是你不能设置notify_url到支付宝?

1、
如果是接收不到支付宝的通知,请确定你的notify_url是否设置正确。
你提交给支付宝系统的notify_url是以什么形式的?ip还是域名?
如果是ip的话,那么确实没办法收到了,因为支付宝只会发送通知到该ip的。
如果是域名的话,就不会有问题,请检查notify_url.php页面程序的问题,可能是其他的代码影响了通知的处理,只要你不 echo 'success' 给支付宝,通知是会按规律重复通知你的(直到 echo 'success'才不通知)。

2、测试:
首先,请确保你的notify_url.php没有任何错误!!接受notify的通知,是要通过$_POST的。你可以将收到的通知记录下来分析下。

以下是个简单的 记录通知 到 文件的函数 ali_log_result(),供参考~

  1. // demo
  2. $word = "<pre>".print_r($_REQUEST, true)."</pre>";
  3. ali_log_result($_POST['trade_no'], $word);
  4. // demo end
  5. function ali_log_result($sn = 0, $word) {
  6. file_put_contents(ROOT_PATH ."temp/alipay_log/notify_".date("Ymd").".html", "<h1>$sn - ".date("Y-m-d H:i:s")."</h1>\r\n<pre style='background:#ccc; border:2px solid #999; padding:10px; '>".$word."</pre>",FILE_APPEND);

  7. }
复制代码

我用的支付宝接口是ecshop自带的
  1. $parameter = array(
  2. 'agent' => $agent,
  3. 'service' => $service,
  4. 'partner' => $payment['alipay_partner'],
  5. //'partner' => ALIPAY_ID,
  6. '_input_charset' => $charset,
  7. 'notify_url' => return_url(basename(__FILE__, '.php')),
  8. 'return_url' => return_url(basename(__FILE__, '.php')),
  9. /* 业务参数 */
  10. 'subject' => $order['order_sn'],
  11. 'out_trade_no' => $order['order_sn'] . $order['log_id'],
  12. 'price' => $order['order_amount'],
  13. 'quantity' => 1,
  14. 'payment_type' => 1,
  15. /* 物流参数 */
  16. 'logistics_type' => 'EXPRESS',
  17. 'logistics_fee' => 0,
  18. 'logistics_payment' => 'BUYER_PAY_AFTER_RECEIVE',
  19. /* 买卖双方信息 */
  20. 'seller_email' => $payment['alipay_account']
  21. );
复制代码

  1. // ECSHOP自带的支付宝接口在 文件 includes/modules/payment/alipay.php

  2. // 其中,设置和 notify_url的是这段代码

  3. 'notify_url' => return_url(basename(__FILE__, '.php')),

  4. // 通过return_url() 函数处理之后,相当于是设置notify_url为 http://www.yourdomain.com/respond.php?code=alipay
复制代码


首先看下这个函数:return_url(),它在文件 includes/lib_payment.php
  1. function return_url($code)
  2. {

  3. return $GLOBALS['ecs']->url() . 'respond.php?code=' . $code;

  4. }
  5. // end
复制代码


分析下:
如果你以ip的形式访问,那么 $GLOBALS['ecs']->url() 返回的也是ip形式(比如 http://123.157.104.182)
如果是通过域名的形式访问,那么 $GLOBALS['ecs']->url() 返回的就是域名形式的url(比如 http://www.yourdomain.com)

假设A用户通过IP访问了你的网店,B用户通过域名访问了你的网店,他们生成的notify_url其实是不同的

A的是:http://123.157.104.182/respond.php?code=alipay
B的是:http://www.yourdomain.com/respond.php?code=alipay

如果你原来的IP是 123.157.104.182 ,现在变为 123.157.104.190
可想而知,A用户支付宝notify的通知你就收不到了。而B用户支付宝notify的通知你可以收到(域名解析正确的话)。

所以,IP变更之前的一些交易(域名访问的用户)可能收得到通知,一些交易(IP访问的用户)就收不到通知了。

这是一种情况!因为你说服务器换了IP,我想可能是这个原因,不排除其他情况。

是的 我的服务器是换了ip
我的服务器更换了托管商
那该怎么整呢??




顶你!