商户系统和微信支付系统主要交互说明:
 
 
  • 步骤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. Linux下的网络设定

    一.IP相关介绍 1.IP是internet protocal的简称,也叫网络进程. 2.ipv4全称internet protocal version 4.它是由32个二进制组成:改为十进制的话,一 ...

  2. Unity 播放 带 alpha 通道的视频(Video Player组件)

    孙广东  2017.6.18 http://blog.csdn.NET/u010019717 通常是  .webm类型文件!!!!!  你可以下载这个文件到本地: Http://tsubakit1.s ...

  3. [置顶] Isolation Forest算法原理详解

    本文只介绍原论文中的 Isolation Forest 孤立点检测算法的原理,实际的代码实现详解请参照我的另一篇博客:Isolation Forest算法实现详解. 或者读者可以到我的GitHub上去 ...

  4. 开源一款ftp软件——filezilla

    filezilla是一款高性能ftp/sftp文件工具,关于它的具体的介绍可参见其官网:https://www.filezilla.cn/.其原作者是Tim Kosse (tim.kosse@file ...

  5. [Linux] nohup/setsid/& 让进程在后台可靠运行

    当用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程.因此,我们的解决办法就有两种途径:要么让进程忽略 HUP 信号,要么让进程运行在新的会话里从而成为 ...

  6. HDU 1452

    http://acm.hdu.edu.cn/showproblem.php?pid=1452 原来真心没见过这种题,不会做,非常帅 gcd(a,b)==1 && s(a,b)==s(a ...

  7. .NET Web开发技术简单整理 转

    .NET Web开发技术简单整理 原文:http://www.cnblogs.com/SanMaoSpace/p/3157293.html 在最初学习一些编程语言.一些编程技术的时候,做的更多的是如何 ...

  8. Mysql Innodb 引擎优化 参数(innodb_buffer_pool_size)

    在mysql的学习过程中,要是不把一些基本概率弄的很清楚,难免显得过于不专业. 作用: 这个参数主要作用是缓存innodb表的索引,数据,插入数据时的缓冲 默认值:128M 专用mysql服务器设置的 ...

  9. 类的静态方法@staticmethod

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

  10. 【java基础】java中String的注意点

    [java的内存模型] 一.Java内存模型 按照官方的说法:Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配. JVM主要管理两种类型内存:堆和非堆,堆内存(Hea ...