开发者社区> 问答> 正文

#支付宝 收不到异步通知,怎么办?

交易状态变更后,未收到相关状态的异步通知。

展开
收起
保持可爱mmm 2020-05-05 17:09:50 1517 0
1 条回答
写回答
取消 提交回答
  • 无法收到通知原因

    1、异步通知发送地址错误

    2、notify_url参数位置设置错误

    3、异步地址设置错误

    4、异步地址必须外网可访问

    5、异步地址必须能post接收数据

    6、接口默认不触发相关的交易状态数据通知

    排查方案 1、异步通知发送地址错误

    不同的接口,异步通知设置位置不同;

    (1)当面付、手机网站支付、电脑网站支付、app支付等,通过接口中的notify_url进行设置异步接收地址;

    (2)口碑、生活号、现金红包、单笔转账等,通过appid对应的应用网关地址进行设置异步接收地址;

    具体可参考各产品文档的通知说明。

    2、notify_url参数位置设置错误

    接口中设置notify_url参数传参错误,该参数为公共请求参数,不是业务参数,不能传递到biz_content值上。

    接口调用sdk设置传参方式如下:

    //Java版: request.setNotifyUrl("商户自己的notify_url地址"); //PHP版: $request->setNotifyUrl("商户自己的notify_url地址"); //.net版: request.SetNotifyUrl("商户自己的notify_url地址");

    3、异步地址设置错误

    notify_url参数值设置要求如下:

    (1)确保异步通知面地址(请求参数notify_url)的路径前面加上http:// 或https://。

    例:https://您的域名/notify_url.php ,支持ip地址方式。(推荐使用域名)

    (2)异步通知面地址(请求参数notify_url)设置时不能加?id=123这类自定义参数。

    错误示例:https://您的域名/notify_url.php?id=123&test=abc

    (3)异步通知面地址(请求参数notify_url)的路径不能以“http://localhost”开头,必须外网域名可访问。

    4、异步地址必须post接收

    使用POST方式接收,请确保服务器路由已经开放POST通知。

    可点击云排查说明进行操作查询相关的异步通知数据,自行模拟post方式进行测试,看能否正常接收数据。

    如果异步http访问状态为http0,可参考【异步http0排查方案】。

    5、异步地址必须外网可访问

    异步地址必须外网可以正常访问,这个不难理解,在您的异步地址没有代码逻辑的情况下,post直接访问应该是一个空白页面并且http状态是200(不支持http200以外的状态)

    (1)http的header头为标准头;

    例如:application/x-www-form-urlencoded;text/html;charset=utf-8。

    (2)检查notify_url外网post访问状态(不支持除200以外的状态) ;

    选择和服务器不同域的一台电脑,在chrome浏览器右键「检查」->地址栏输入notify_url地址->查看Network中的Status是否是200。

    (3)选择和服务器不同域的一台电脑,ping服务器地址是否流畅;

    长时间后查看是否会有不稳定的情况(偶尔一次断开)。这也有可能会出现正好有半夜或什么时候有一次没有收到的情况。

    (4)如果您的地址是https,也就是有证书,需加一步是否是证书问题;

    只支持官方机构颁发的正版SSL证书,不支持自签名。

    建议使用相关证书校验工具,检查服务器到根证书链路通畅即可。

    6、接口默认不触发相关的交易状态数据通知

    接口默认不触发对应的通知,比如电脑网站支付接口默认是不会触发WAIT_BUYER_PAY(交易创建)通知,就不会收不到该状态的通知内容.

    各产品默认会触发哪些交易状态通知,请参考【交易状态说明】。

    2020-05-05 17:10:23
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载