先看看支付时序图
一、时序图
打眼一看好像挺复杂的,仔细一看很明了,思路逻辑很清晰,很有条理,逻辑缜密。大体流程和支付宝差不多但是也有不同。
以下说明摘抄自微信开放平台官网
商户系统和微信支付系统主要交互说明:
步骤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】
二、流程详解
1-2 用户使用App将发起微信支付;
3、App调用自己服务端接口,要求生成支付订单;
4、服务端请求微信服务端请求生成预支付订单,微信服务端生成预支付订单;
5、微信服务端将生成后的预支付订单信息返回App服务端;
6、App服务端将微信服务端返回的预支付订单信息进行加密加签等操作;
7、将加签后的数据返回客户端App;
8、序列图上这一步是个二次确认,需不需要视项目需求而定;
9、App客户端拿到服务端给的签名字符串后调用App里面的微信支付SDK;
10、右App里的SDK向微信服务器发起支付请求,微信服务器会在这里做验证签名等;
11、验证通过,返回支付授权,这时候一般会弹出微信支付窗口;
12、用户输入密码;
13、输完密码后微信服务器收到支付请求,在这里微信服务器还会做安全方面的检测;
14、同步返回支付结果到App客户端;
15-16微信的服务器会将支付结果通知给我们App的服务端,这肯定是异步通知,所以比14慢;
17、所以App客户端收到14的同步返回结果后,需要再次向自己的服务端发起请求,这样后台如果没有收到15-16,就去微信的服务端查询支付结果
18、接着17,App服务端查询到支付结果后把支付结果返回给客户端;
19、这时候App客户端才能断定是支付成功还是支付失败,然后处理支付后的操作。