支付宝支付、微信支付等都是第三方支付平台。是现在最受欢迎、使用最普遍的移动支付方式。
官方示例图
用户在商户App选择支付宝支付方式,在App拼接字符串(商品iD、商品价格、商品名称、商品描述等)发送到商家Server,返回签名后订单信息(signedOrderString)。拿到签名后订单信息(signedOrderString)在App调用集成在程序中支付宝SDK的支付接口,然后发送往支付宝Server支付请求,完成支付(6步)将结果返回到支付宝SDK(7步),支付宝SDK将支付结果返回给App,将支付结果展示给用户。这个是比较简单的。
为了更加安全,App拿到支付结果后,与商家Server 进行校验结果,然后将支付结果展示给用户。
特别注意:
1.构造交易数据并签名必须在商户服务端完成,商户的应用私钥绝对不能保存在商户APP客户端中,也不能从服务端下发。
2.同步返回的数据,只是一个简单的结果通知,商户确定该笔交易付款是否成功需要依赖服务端收到支付宝异步通知的结果进行判断。
- 商户系统接收到通知以后,必须通过验签(验证通知中的sign参数)来确保支付通知是由支付宝发送的。建议使用支付宝提供的SDK来完成,详细验签规则参考异步通知验签。
个人实际应用后的理解
1.APP组装请求字符串发往商家后台,返回签名字符串
2.App调用支付宝支付接口,服务端会返回支付信息
3.支付宝服务端调用异步通知接口,根据返回信息处理自己的业务逻辑,比如记入本地台账,修改订单状态等
微信支付流程
微信支付流程图
商户系统和微信支付系统主要交互说明:
步骤1:用户在商户APP中选择商品,提交订单,选择微信支付。
步骤2:商户后台收到用户支付单,调用微信支付统一下单接口。参见【统一下单API】。
步骤3:统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP。参与签名的字段名为appid,partnerid,prepayid,noncestr,timestamp,package。注意:package的值格式为Sign=WXPay
步骤4:商户APP调起微信支付。api参见本章节【app端开发步骤说明】
步骤5:商户后台接收支付通知。api参见【支付结果通知API】
步骤6:商户后台查询支付结果。,api参见【查询订单API】