微信APP支付整体流程记录备忘

 
支付整体流程见文档: https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_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】
 
原来一直以为微信APP支付是跟公众号支付一样,使用同样的APPID以及商户ID(mch_id),经过尝试才发现并不是这样。对于微信APP支付,需要在微信开放平台中注册,并提交审核: https://open.weixin.qq.com/,在微信~开放平台中进入管理中心,创建移动应用,并提交审核申请微信支付权限(过程很漫长,而且需要¥300)。
 

微信APP支付整体流程记录备忘_第1张图片
 

 
 
根据上图中可以看出微信支付能力已经获得。
 
注意由于是属于APP支付,还需要提供iOS平台的BundleID,以及Android平台的包名和应用签名
 
注:APP支付相关信息如下:
 

开发信息

 

应用官网    http://www.xxxx.com
应用平台
iOS平台
          应用下载地址:未填写
          Bundle ID:com.xxxxApp
Android平台
          应用下载地址:未填写
          应用签名:78:C3:71:00:DA:B7:19:9B:26:5F:0F:F6:61:57:EE:18:D9:F8:0A:1F
 
          包名:com.xxxx
 
 
以后支付采用的APPID和AppSecret是在开放平台上已经注册的,与微信公众号无关,商户ID和初试密码会通过邮件的方式发送过来,还需要重新设置商户的APISecret(登录后设置)。
 
 


微信APP支付整体流程记录备忘_第2张图片
 
 
 
与微信公众平台稍微有所不同的就是统一下单接口是会有所不同。
 
商户后台在收到用户支付单之后,需要调用微信支付统一下单接口:
 
https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1
 
统一下单接口与公众平台微信支付比较类似,但是也有很多不同之处,返回正常的prepay_id之后,需要重新生成签名(公众号不需要),生成签名的算法为:
 
https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=4_3
 
参与签名的字段名为appId,partnerId,prepayId,nonceStr,timeStamp,package。注意:package的值格式为Sign=WXPay,partnerId使用mchid即可。
 
进行统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP。参与签名的字段名为appId,partnerId(微信商户id),prepayId(预付订单id),nonceStr,timeStamp,package。注意:package的值格式为Sign=WXPay
 
文档中的步骤3,简直是在骗人!在APP发起支付后,返回的总是错误数据,能够进入微信界面,但最后发现其中只有一个确定按钮,返回的错误码为-2,这就是签名造成的错误!
 
注意!参与签名的字段必须都为小写,不能存在大写字段!坑了我们好几天,经过google后才能找出对应的问题!
 
 
具体可以参考下面的文档内容:
 
http://www.jianshu.com/p/0dc20b89330d
 
此外,支付结果回调需要能够支持app的支付结果回调,回调的方法中如果确认成功,需要返回一段XML,才能让微信服务器确认已经接受到notify消息,否则微信服务器会多次retry调用我们的接口。
 

     
     
 
 
在xml中可以看到CDATA标签, CDATA 区段(CDATA section)中的文本会被解析器忽略,这样可以保证既能够让xml工具正常解析,又可以在其中放置一些特殊字符串,例如<等,在其中不需要再次转义。
 
好在iOS以及Android端均存在对应的开发文档,而且没有什么坑:
 
https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5#

转载于:https://www.cnblogs.com/mmaa/p/5789873.html

你可能感兴趣的:(微信APP支付整体流程记录备忘)