微信支付
2015-07-13 11:09
471 查看
但愿能节省下大家宝贵的时间,毕竟腾讯给的文档说的太不详细了。
时间:2015年7月账号准备
支付分两种,分别是微信公众平台账号、微信开放平台账号。l 微信公众平台账号
运行在微信内置浏览器中的商户网页,对应此种账户模式,该模式支持二维码支付。
l 微信开放平台账号
自己的APP应用需要支付功能,对应此种账户模式,通过微信支付的sdk,支付时切换到微信进行支付,支付完后再跳回自己的APP。(预订单中暂时没发现二维码支付字段)
(这两个账户搞错后,后期进入微信进行支付会产生-1的错误,官方文档并没有对-1进行详细的错误定位,现列出的几种原因并不包含这个,在此对腾讯的文档已无力吐槽。这里只对微信开放平台账户进行说明。)
账户申请完后,开通支付功能,再设置一个32位密钥(后期签名用),至此支付环境准备完毕。
支付流程
这里只讲述 【手机APP-----自家服务器-----微信服务器】 这种结构的支付流程。对于 【手机APP-----微信服务器】 这种结构的支付不做说明。
每一笔支付都需要向微信服务器拿一个预订单(即官方文档中的【统一下单】),顾客手机上的微信会根据此预订单进行支付,微信服务器会将支付结果回传两份,先给我们自家服务器传一份,再给顾客手机上的微信传一份。但是这两份数据是不一样的,手机微信上只会收到成功或失败,仅此而已。传给自家服务器的很详细。
预订单
通过微信的【统一下单】API获取预订单的文档描述还算清楚,但是有几点需要注意。1. 参与签名的字段有一项trade_type,文档中只列出JSAPI,NATIVE,APP,WAP四种,但是并没有说明各自对应何种情况,用错时会收到“没有支付权限”的错误信息,请按自身情况尝试。(我进行开发平台账户调试时使用的是APP)
2. sign字段不参与签名,而是将其他字段进行签名,将得到的签名付给sign字段。
3. 签名时,将待签名的字典按照key排序后,再合并成字符,然后将自己设置的那个32位密钥挂在字符串后,最后进行MD5得到签名字符串。
4. 参与签名的数据中含有中文时,注意编码问题。
5. 将要发送给微信服务器的数据组成xml时,数据最好用CDATA包一下。
6. 得到预订单后,appid、partnerid、prepayid、package、noncestr、timestamp组装这六个字段进行签名,再付给sign后,将这七个必需字段以自己喜欢的方式发给自家APP就OK。
微信中进行支付
自家APP收到自家服务器发来的七个必需字段后,进行签名的检验,检验通过后将这七个字段赋给微信sdk中的PayReq,然后通过sdk中的API跳转到微信里面进行支付。注意事项:
1. 自家APP支付之前,一定要通过sdk的注册API,将自家的APP在微信里注册下。
2. 在微信里进行支付可能会产生-1的返回值,只要保证这七个字段数据没有问题,即能通过微信的在线签名检验,那就是配置的问题了,代码是没有问题的。
支付完毕
支付完毕后,顾客手机里的微信会收到结果,再跳转回自家APP后,根据结果再通知自家服务器,自家服务器检索之前从微信服务器传来的N多支付数据,如果有匹配的数据就OK,没有的话就根据out_trade_no到微信服务器进行查询支付结果。莫要相信自家APP传上来的支付结果。cordova
如果进行的是WebApp开发,微信支付的插件暂时没找到,我只是将GitHub上xuli/cordova-plugin-wechat小改一下,连接:https://github.com/xu-li/cordova-plugin-wechat。相关文章推荐
- Android高仿微信微博多图展示
- 如何在本地用vs调试微信接口
- 学会使用微信公众平台
- 如何注册一个微信公众号?
- Android模仿微信语音聊天功能
- WSTMall 开源O2O商城,微信端、安卓端、触屏版共建O2O生态
- [FMG]两个简单的JSP+servlet小程序
- 您是微信“环”么
- WooCommerce 微信支付插件
- java微信js SDK页面签名
- 【理解】一个利用递归打印对象路径下所有文件的小程序
- 微信PC版为什么这么设计?
- 微信开发
- 微信开发
- atitit。浏览器缓存机制 and 微信浏览器防止缓存的设计 attilax 总结
- atitit。浏览器缓存机制 and 微信浏览器防止缓存的设计 attilax 总结
- Java ArrayList小程序理解
- 微信公众平台开发教程1
- 微信公众号通过链接实现关注(盗用广告主流量主)
- android 微信支付,body为中文字符,签名错误