商户系统和微信支付系统主要交互说明:
 
 
  • 步骤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端均存在对应的开发文档,而且没有什么坑:
 

微信APP支付整体流程记录备忘的更多相关文章

  1. .net 微信APP支付接口的开发流程以及坑

    流程 申请APP的微信支付 申请成功之后得到APPID 商户号 以及自己设置商户号的支付密码 这时就可以开发接口了 微信APP支付API:https://pay.weixin.qq.com/wiki/ ...

  2. 微信App支付接入步骤&支付中前后端交互流程

    最近对微信App支付(App端集成微信支付SDK)申请步骤,以及终端在进行微信支付时商户App.商户Server.微信App.微信支付Server的交互流程进行了简单了解.这篇文章应该算是学习笔记,分 ...

  3. 微信app支付,完整流程,完整代码 (转)

    微信app支付流程 需要的配置参数 private function wechat($body,$indent_id,$cou,$user_id,$total_fee,$ip,$domain,$non ...

  4. .Net后台实现微信APP支付

    上一节分享了微信小程序支付的后台,这一节来分享一下微信APP支付的后台.微信APP支付和微信小程序差别不大,微信APP支付后台不需要微信登录凭证.后台下单时交易类型(trade_type)不再是&qu ...

  5. 微信app支付android客户端以及.net服务端实现

    由于公司运营需要,需要在客户端(android/ios)增加微信以及支付宝支付,在调用微信app支付时遇到一些问题,也算是一些踩过的坑,记录下来 ,希望能对.net开发者服务端网站更快的集成微信app ...

  6. php开发微信APP支付接口

    之前在开发APP中用到了微信支付,因为是第一次用,所以中途也遇到了好多问题,通过查看文档和搜集资料,终于完成了该功能的实现.在这里简单分享一下后台php接口的开发实例. 原文地址:代码汇个人博客 ht ...

  7. H5使用codovar插件实现微信支付(微信APP支付模式,前端)

    H5打包的app实现微信支付及支付宝支付,本章主要详解微信支付,支付宝支付请查看另一篇“H5使用codovar插件实现支付宝支付(支付宝APP支付模式,前端)” ps:本文只试用H5开发的,微信 AP ...

  8. 微信APP支付 - C#

    最近挺忙的,没时间写东西.然后在弄微信APP支付,网上的搜索一趟,都比较凌乱,我也遇到一些坑,不过也算弄好了,记录分享一下. 1.准备各种调用接口需要的参数,配置app.config. <!-- ...

  9. 微信app支付 ci框架做的

    /**     * 组合微信app支付  获得prepayid     * @param int $order_num     */    private function _wxpay_reques ...

随机推荐

  1. 数据存储-- Core Data的使用(二)

    一.基础概念深入 1.NSManagedObjectContext 被管理数据上下文就像便笺簿 当从数据持久层获取数据时,相当于把这些临时的数据拷贝写在便笺簿上,然后就可以随心所欲的修改这些值. 通过 ...

  2. OpenVPN CreateProcess Failed 问题解决

    启动 OpenVPN GUI 时失败 显示如下信息 CreateProcess Failed, exe=’X:XXXXXOpenVPNbinopenvpn.exe’ cmdline=’openvpn ...

  3. 将VIM打造成强大的IDE

    转载自:所需即所获:像 IDE 一样使用 vim 如侵犯您的版权,请联系:2378264731@qq.com --------------------------------------------- ...

  4. flowable EngineConfiguration的作用和继承关系(1)

    EngineConfiguration 是flowable引擎的核心部件. 在 flowable 中,实现引擎配置的顶层类是 AbstractEngineConfiguration 这是一个抽象类. ...

  5. IPv4地址范围和一些小知识

    IP地址范围:         保留地址(私有IP地址): 10.0.0.0——10.255.255.255 172.16.0.0——172.31.255.255 192.168.0.0——192.1 ...

  6. python使用wget下载网络文件

    wget是一个从网络上自动下载文件的自由工具.它支持HTTP,HTTPS和FTP协议,可以使用HTTP代理. ubuntu 安装wget pip install wget 从网络或本地硬盘下载文件(并 ...

  7. Codeforces 28C Bath Queue 【计数类DP】*

    Codeforces 28C Bath Queue LINK 简要题意:有 n 个人等概率随机进入 m 个房间,一个房间可以有多个人,第 i 个房间有 ai 个水龙头,在一个房间的人要去排队装水,他们 ...

  8. 携程框架Apollo实现.NET Core微服务统一配置(测试环境-单机)

    Apollo实现.NET Core微服务统一配置(测试环境-单机) https://www.cnblogs.com/guolianyu/p/10065999.html 一.前言 注:此篇只是为测试环境 ...

  9. BestCoder Round #1 第二题 项目管理

    // 第二题 我记得很久很久很久以前看过这样的题目,忘记是哪的区域赛了 // 记得有人说和节点度数有关,我记不清了,反正当时完全不懂 // 然后我想了想,估计就是更新节点度数有关,YY出来可能只要更新 ...

  10. 关于java日期

    时间戳转为yyyy-MM-dd SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String formatDa ...