zoukankan      html  css  js  c++  java
  • 微信APP支付整体流程记录备忘

     
     
    商户系统和微信支付系统主要交互说明:
     
     
    • 步骤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支付,还需要提供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(登录后设置)。
     
     



     
     
     
    与微信公众平台稍微有所不同的就是统一下单接口是会有所不同。
     
    商户后台在收到用户支付单之后,需要调用微信支付统一下单接口:
     
     
    统一下单接口与公众平台微信支付比较类似,但是也有很多不同之处,返回正常的prepay_id之后,需要重新生成签名(公众号不需要),生成签名的算法为:
     
     
    参与签名的字段名为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
     
    <!--?xml version="1.0" encoding="UTF-8" standalone="no"?-->
    文档中的步骤3,简直是在骗人!在APP发起支付后,返回的总是错误数据,能够进入微信界面,但最后发现其中只有一个确定按钮,返回的错误码为-2,这就是签名造成的错误!
     
    注意!参与签名的字段必须都为小写,不能存在大写字段!坑了我们好几天,经过google后才能找出对应的问题!
     
     
    具体可以参考下面的文档内容:
     
     
    <!--?xml version="1.0" encoding="UTF-8" standalone="no"?-->
    此外,支付结果回调需要能够支持app的支付结果回调,回调的方法中如果确认成功,需要返回一段XML,才能让微信服务器确认已经接受到notify消息,否则微信服务器会多次retry调用我们的接口。
     
    <xml>
         <return_code><![CDATA[SUCCESS]]></return_code>
         <return_msg><![CDATA[OK]]></return_msg>
    </xml>
     
     
    在xml中可以看到CDATA标签, CDATA 区段(CDATA section)中的文本会被解析器忽略,这样可以保证既能够让xml工具正常解析,又可以在其中放置一些特殊字符串,例如<等,在其中不需要再次转义。
     
    好在iOS以及Android端均存在对应的开发文档,而且没有什么坑:
     
  • 相关阅读:
    ffmpeg处理视频与声音
    吸引力
    bzoj 2752: [HAOI2012]高速公路(road)
    bzoj 3653 [湖南集训]谈笑风生
    bzoj 3143: [Hnoi2013]游走
    16,docker入门
    15.9,python操作redis集群
    15.8,redis-cluster配置
    15.7,哨兵集群
    15.6,redis主从同步
  • 原文地址:https://www.cnblogs.com/mmaa/p/5789873.html
Copyright © 2011-2022 走看看