支付宝所有请求均使用api/gateway.do?
,根据service
参数路由到不同的处理逻辑
所有请求均需要进行签名,签名方式通过sign_type
参数指定,目前支持 DSA、RSA、MD5 三种签名方式,sign
参数存储签名字符串
所有支付宝回调请求,也都会进行签名
使用MD5方式签名说明
下单并非有财务后台服务直接发起,而是财务后台服务生成一个支付宝收银台页面url,由用户浏览器跳转至该url,完成下单
请求支付宝收银台页面后,支付宝会产生一笔即时到账交易,等待用户支付
如何跳转到支付宝支付页面
-
服务器生成支付宝支付url,设置各类订单参数、身份参数、签名参数,具体参数请参考demo
-
服务器返回重定向命令到支付宝支付url
-
客户浏览器跳转到支付宝支付页面
-
前置扫码页面 与 支付宝支付页面url 基本完全一致,仅通过
qr_pay_mode
参数区分 -
支付完成浏览器跳转页面url稍有不同,由于前置扫码页面通过iframe嵌入在总览支付页中,跳转后仍旧是在iframe页面中,通过js控制对外部页面url执行跳转(后续前端可执行AJax请求可对此进行优化)
通知分两种方式,说明如下
用户在支付宝支付页面完成支付后,跳转到支付成功页面,随后浏览器跳转至商户支付完成页面,携带交易id、交易状态等信息
返回页面信息已告知用户支付已经完成
交易状态变更后,支付宝异步通知商户,若失败,则在24小时内重试8次
返回值须设置为success
表示成功
不保证两类通知到达顺序
- 消息验证,以参数
notifyId
,调用支付宝接口验证此通知正确性
trade_status
状态,仅如下两个状态,支付宝会回调通知商户
用户在支付宝完成支付,交易状态变更为TRADE_SUCCESS
交易成功后,可对该笔交易执行退款操作,当交易完成后,则不允许执行退款
交易超时时间,默认为15天,交易成功后,且超过超时时间,则交易状态变为完成
发起退款,调用支付宝有密退款接口(批量接口)
有密意味着财务人员操作退款,需要输入支付宝支付密码
GET请求,浏览器跳转,财务后端完成url拼接
返回值须设置为success
表示成功
订单查询(该API接口权限需单独申请)
避免极端情况未能成功收到支付宝的状态通知,应对尚未过期且未完成支付的订单向支付宝查询交易状态,完成数据同步
可依据支付宝交易id或者商户订单id查询订单交易数据
GET请求 财务后台服务发起请求
返回数据 xml格式,详情见pdf文档
xml解析需注意对待,返回结果数据层次较深,应仅对结果数据绑定实体类
开始时间与结束时间的间隔不能大于一天
与订单明细查询类似,返回数据字段全,具体参数及返回值见pdf文档