您的位置:首页 > 移动开发 > 微信开发

微信支付

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: