开发者社区
社区提问意见反馈
开发者钉组织
扫描二维码
加入支付宝开发者钉组织
文档中心
凯发app官方网站的技术支持 & 案例 faq 
接入准备
接入基础
密钥问题
签名验签
同步异步
基础报错
案例分析
开发工具
接入指南 > 接入准备 >  > 支付宝异步通知说明
收藏
我的文档
设置
不同接口接收异步通知设置方式不同,可查看 触发异步通知的产品列表
如何设置异步通知地址
目前异步设置方式主要有3种设置方式:
接口api设置notify_url:如app支付、电脑网站支付等。
应用网关设置异步地址:如商家扣款主动解约等。
from蚂蚁消息订阅消息api:如单笔转账到支付宝账户、商家分账等。
接口api设置notify_url、应用网关设置异步地址、from蚂蚁消息http接入都需要设置异步地址,支付宝将会以 post 请求的形式将支付结果作为参数通知到商家notify_url地址(这3种情况下述简称“post发送异步场景”)。
接口api设置notify_url
notify_url需设置在公共参数中,如使用sdk集成接口详见
alipay sdk(通用版sdk)
java
复制代码
//java版:
request.setnotifyurl("商户自己的notify_url地址");

//php版:
$request->setnotifyurl("商户自己的notify_url地址");

//.net版:
request.setnotifyurl("商户自己的notify_url地址");

//node.js版:
formdata.addfield('notifyurl', '商户自己的notify_url地址');

//python版:
request.notify_url = "商户自己的notify_url地址"
alipay easy sdk(easy版sdk)
目前 alipay easy sdk 只支持 java、php、.net 语言,因此只有该 3 种语言有设置 notify_url 方式。
应用网关设置异步
-应用详情里面开发设置-应用网关中配置,详见

from蚂蚁消息订阅
(1)在开发设置的 from 平台订阅订阅对应消息api。
(2)“接入方式”:根据选择项选择接入方式
http:需额外设置应用网关地址作为通知接收地址,若未设置通知发送失败,可参考上述“应用网关设置异步”。
websocket :可不设置应用网关,后续触达接收。
5.png

异步通知参数介绍
支付宝查看支付宝开放平台文档中各接口的异步通知参数的详细说明。
以 app 支付为例,返回的异步通知参数如下(以下示例报文仅供参考,实际返回的详细报文请以实际返回为准)。
异步通知接收方式
接收异步通知示例:
(针对接口api设置notify_url、应用网关设置异步地址、from蚂蚁消息http接入)。
from蚂蚁消息:(针对from蚂蚁消息websocket接入)。
异步通知验签
q:商家接收到异步通知后,需要验签吗?
a:需要。验签的作用是为了验证是否支付宝返回的通知,防止在传递过程中被篡改,是为了保证信息的安全性。
商家通过sdk做from蚂蚁消息websocket接入时,已做封装处理,处理消息无需关心验签,协议报文组装等业务逻辑,专注消息内容处理业务即可。
post发送异步场景需商家对异步通知做验签处理。

验签流程
为了帮助开发者调用开放接口,支付宝提供了 开放平台服务端 sdk 和 demo,封装了签名&验签、http 接口请求等基础功能。为了避免验签出错强烈建议先下载对应语言版本的 sdk 并引入您的开发工程进行快速接入,详见
验签步骤
1获取异步通知
2在通知返回参数列表中,除去 sign、sign_type 两个参数外,凡是通知返回回来的参数皆是待验签的参数。将剩下参数进行 url_decode,然后进行字典排序,组成字符串,得到待签名字符串; 生活号异步通知组成的待验签串里需要保留 sign_type 参数。
3将签名参数(sign)使用 base64 解码为字节码串;
4使用 rsa 的验签方法,通过签名字符串、签名参数(经过 base64 解码)及支付宝公钥验证签名。
5验证签名正确后,必须再严格按照如下描述校验通知数据的正确性。
在上述验证通过后,商家必须根据支付宝不同类型的业务通知,正确的进行不同的业务处理,并且过滤重复的通知结果数据。
异步响应
收到异步通知后,商家输出 success 表示消息获取成功,支付宝就会停止发送异步,如果输出 fail,表示消息获取失败,支付宝会重新发送消息到异步地址。
建议在接收异步进行验签,如果验签成功输出 success,验签失败返回 fail,重新接收异步进行处理。
响应值
描述
是否重试
fail
消息获取失败
重试
success
消息获取成功
不重试
返回 success 示例代码
以下仅展示 java、php、.net 语言的示例,其它开发语言也是直接输出 success 即可。
java
php
.net
直接访问你的异步页面应该是输出(如下图)中的 success 这 7 个字符。
注意:浏览器上点击查看页面源代码,看到的是这个 7 个字符,有空格或者其它字符都会导致重复收到通知(建议大家做一下简单的验证)。
特别注意:返回的是纯文本内容,不要包含 html 等标签。
6.png

异步通知的特性
post发送异步场景
必须保证服务器异步通知页面(notify_url/应用网关)上无任何字符,如空格、html 标签、开发系统自带抛出的异常提示信息等。
支付宝是用  post 方式发送通知信息,因此该页面中获取参数的方式,如:request.form(out_trade_no)、$_post[out_trade_no]。
支付宝主动发起通知,该方式才会被启用。
该方式的调试与运行必须在服务器上,即互联网上能访问。而且服务器间的交互不像页面跳转同步通知可以在页面上显示出来,这种交互方式是不可见的。
程序执行完后必须打印输出 success。如果商家反馈给支付宝的字符不是 success 这 7 个字符,支付宝服务器会不断重发通知,直到超过 24 小时 22 分钟。一般情况下,25 小时以内完成 8 次通知(通知的间隔频率一般是:4m,10m,10m,1h,2h,6h,15h) 。
程序执行完成后,该页面不能执行页面跳转。如果执行页面跳转,支付宝会收不到 success 字符,会被支付宝服务器判定为该页面程序运行出现异常,而重发处理结果通知。
cookies、session 等在此页面会失效,即无法获取这些数据。
该方式的作用主要防止订单丢失,即页面跳转同步通知没有处理订单更新,它则去处理。
当商家收到服务器异步通知并打印出 success 时,服务器异步通知参数 notify_id 才会失效。也就是说在支付宝发送同一条异步通知时(包含商家并未成功打印出 success 导致支付宝重发数次通知),服务器异步通知参数 notify_id 是不变的。
异步通知 header 是 content-type:application/x-www-form-urlencoded; text/html; charset=utf-8 ,不是按照 rfc2183 rfc1521 标准来的。
from蚂蚁消息websocket接入
需在接口请求前开启websocket接收。
无需开启 httpserver。
开发者不需要开发一个 http server 来接收 from 蚂蚁消息,也不需要购买 https 证书。
商家可以接收来自于蚂蚁的消息,后续还可以发送 to 蚂蚁消息,消息通讯协议统一,可以有效降低接入成本。
目前支持长连接通道的服务端 sdk 只有 java 语言版,并使用 3.6.0.all 及以上版本。若使用证书模式接入请使用 4.11.54.all 及以上版本 sdk。
常见问题

重复收到异步通知
内容没有解决您的问题?您还可以前往 或 寻求帮助
凯发k8官方网娱乐官方 copyright © 2022 支付宝(杭州)信息技术有限公司  | icp证浙b2-20160559
该文档对你是否有帮助?
当前页面目录
网站地图