文章目录
1、支付方式选择 2、交互流程 3、1. 对接准备 2.加密解密 + 签名验签 3.沙箱环境 4、内网穿透 5、二维码 6、下单 7、异步通知回调 8、查询支付结果 9、退款 10、通用版SDK
需求:系统A对接支付宝,实现支持用户扫码支付
1、支付方式选择
对接的API文档:
-
https://open.alipay.com/api
可选的支付方式有:
-
扫码付
:出示付款码或者用户扫码付款 -
APP支付
:在APP中唤起支付宝 -
手机网站支付
:在移动端网页中唤起支付宝 App 或支付宝网页 -
电脑网站支付
:在PC端唤起支付宝App或者网页登录支付宝账户 -
刷脸付
:需硬件支持 -
商家扣款
:类似每月会员扣款 -
预授权支付
:冻结对应额度,交易完成后给商家 -
JSAPI支付
:小程序
这里选择扫码付的方式,点击下单后,返回支付二维码,用户扫码支付。
2、交互流程
画个下单流程的时序图:
大致流程:
-
用户下单,系统A组装信息后(订单信息、回调地址、签名),调用支付宝预下单接口,返回二维码链接
-
系统A将二维码链接转二维码图片
-
用户扫码,唤醒本地支付宝,完成支付
-
支付宝返回支付成功信息给用户
-
支付宝异步通知系统A支付成功的消息(回调地址),如果用户支付成功,支付宝就调用回调地址的API,回调接口中自然是系统A收到用户支付成功消息后的动作
-
上一步如果通知失败,比如网络异常或支付宝调用异步通知接口时系统A正好挂了 ⇒ 可主动调支付宝提供的查询支付结果接口,或者加定时任务轮询来查询交易状态,如3s-5s
-
还可以考虑在第一步请求支付宝接口时加上二维码的有效时间,过期就重新发起
查询支付结果流程:
退款流程同上查询支付结果。PS:注意下单、退款过程中,相关订单的业务数据落库到系统A。
3、对接准备
1)加密解密 + 签名验签
支付信息不能在网络上明文传输,以防被篡改。系统A到支付宝的方向,采用:
-
支付宝公钥加密 + 系统A的私钥签名(系统A做的事)
-
支付宝私钥解密 + 系统A的公钥验签(收到信息后,支付宝做的事)
同理,支付宝返回支付结果时,就是在支付宝中用系统A的公钥加密+支付宝的私钥签名,传输到系统A后,则是先用支付宝的公钥验签,再用系统A的私钥解密支付结果
2)沙箱环境
调试过程中,可采用支付宝提供的沙箱环境,点击右上角控制台,登录后选择沙箱:
这里有一套可调试的APPID、系统A的公钥、密钥、支付宝的公钥、支付宝的网关地址,以及商家账户和用户账户(用于后续登录沙箱版本支付宝APP完成支付)