商户系统和微信支付系统主要交互说明:
 
 
  • 步骤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. chrome浏览器Uncaught TypeError: object is not a function问题解决

    今天测试多浏览器的时候,chrome浏览器出现Uncaught TypeError: object is not a function: 解决办法:(不知道为啥子)改一下js的方法名字就可以了

  2. L157

    UK Watchdog: Smugglers to Exploit Border if no Brexit DealSmugglers and other organized criminals ar ...

  3. C语言 运算符详细介绍及示例代码

    C 运算符 运算符是一种告诉编译器执行特定的数学或逻辑操作的符号.C 语言内置了丰富的运算符,并提供了以下类型的运算符: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 杂项运算符 本章将逐 ...

  4. Tornado 异步非阻塞

    1 装饰器 + Future 从而实现Tornado的异步非阻塞 class AsyncHandler(tornado.web.RequestHandler): @gen.coroutine def ...

  5. Java跨平台的原理--java跨平台是通过JVM实现的

    孙鑫视频---笔记(1-3) java跨平台是通过JVM(java 虚拟机)实现的. Java应用程序的开发周期: 编译.下载.解释.执行. 1.java源文件的编译过程 java编译程序将java源 ...

  6. 手游服务端框架之使用Guava构建缓存系统

    缓存的作用与应用场景 缓存,在项目中的应用非常之广泛.诸如这样的场景,某些对象计算或者获取的代码比较昂贵,并且在程序里你不止一次要用到这些对象,那么,你就应该使用缓存. 缓存跟java的Coucurr ...

  7. 【剑指offer】第一个只出现一次的字符

    原创博文,转载请注明出处!本题牛客网地址 博客文章索引地址 博客文章中代码的github地址 1.题目 2.思路 空间换时间.建立一个哈希表,第一次扫描字符串时,统计每个字符的出现次数.第二次扫描字符 ...

  8. 类的静态方法@staticmethod

    静态方法 @staticmethod 静态方法是定义在类内部的函数,此函数的作用域是类的内部 说明: 静态方法需要使用 @staticmethod装饰器定义 静态方法与普通函数定义相同,不需要传入se ...

  9. [Linux]Ubuntu中的System Setting

    问题 使用Ubuntu的过程中,安装搜狗输入法,卸载了系统自带的ibus.输入法搞定后,发现System Setting没有了... 原因 因为在卸载ibus等软件时,会删除一些依赖包,删除过程可能会 ...

  10. php pdo调用SQLServer存储过程无法获取返回结果

    确定存储过程写的没问题,php调用后,跟踪了语句,也是没问题,就是获取不到返回结果.折腾,搞定. 较之前明确了1. 调用存储过程传参的写法: 2. 获取返回结果集的方法 参考: http://blog ...