整个系统运作的流程大致是这样:
(1)APP向服务器发出需要付款的请求
(2)服务器请求微信服务端下单
(3)服务器将下单数据回复给APP
(4)APP向微信服务端发起请求并输入密码进行支付
关键字用加粗表示,APP指用户正在使用的APP,服务器指自己的业务服务器,微信服务端指微信端的服务器。
那整个流程具体怎么实现?请看下文,将会从申请接口开始讲述。
第一步
打开https://open.weixin.qq.com/,注册一个账号,并且审核开发者资质(个人或者是企业)。
创建一个APP移动应用,应用的开发信息需要填写完整,如下载页面地址、Bundle ID(IOS)和应用签名(Android)等。应用签名不要填错,怎么获取它可以网上搜索方法。
接下来为该应用申请微信支付,填写好相应的资料,等待审核成功。
第二步
申请成功后,邮箱会收到这么一封邮件。
用这封邮件上显示的账号密码,登录微信支付,地址是:https://pay.weixin.qq.com/index.php/core/home/login
把网页上提示需要设置的都设置好,需要的控件也都给它装上。最好使用IE浏览器登录微信支付,谷歌浏览器会出现问题,原因是它们的插件不是很兼容非IE浏览器。
API密钥可以先设置好,证书也可以先下载下来,后面会用到。
第三步
之前做支付宝接口的时候,这一步基本都是开始进行小额测试了,但是微信为了广大的开发者能够在真枪实弹之前先熟悉这一切,所以就增加了一个“验收”的过程(个人表示这一步略坑,文档写的不清楚,走了些弯路)。
验收的指引文档在这里:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=23_1
这个“验收”就是在实际支付交易之前,先进行一些虚拟的交易。交易过程同真实交易一样,也是先在APP上买东西,调用微信支付,然后付款,但是不用真正的付款,商户账号也不会收到钱。
千万别忘记,要先打开微信,关注“微信支付商户接入验收助手”,然后绑定自己的微信支付账号。
依次点击“验收case”->“app支付”->“APP支付验收用例”,就可看到完成“验收”过程需要哪些步骤了。
标注了“必选”的用例都要去做掉,“可选”的可以不用管它。
每个用例都规定了交易的金额,一定要按照这个金额来支付,否则不会成功。
第四步
“验收”其实就是把整个支付流程全部跑一遍,所以APP中要记得集成微信支付插件。
Hbuilder在云打包时会自动集成微信支付,只要在manifest.json的“SDK配置”中填写好相关信息就可以了。
原生APP需要自己去集成,具体方法就要自己看文档实现了。
服务端程序需要按照https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1文档中的API去实现,“验收”过程中,所有的URL地址都需要加上sandboxnew,而且API密钥不能用上文提到自己去填写的(这是验收结束后真枪实弹时用的),而是从https://api.mch.weixin.qq.com/sandboxnew/pay/getsignkey获取的,这些在验收指引文档中都有说明。
前方有坑:验收不需要实际用APP进行支付,后台请求流程完成就可以了。
第五步
每完成一个验收流程,都要去微信公众号的“我的验收”->“查询验收结果”->“查询用例接入结果”->“APP支付”中查看一下,确定是否成功。
等所有“必选”用例全部完成,那么恭喜你,验收完成。这时别再用验收时获取到的API密钥了,用自己填写的API密钥开始真枪实弹地小额测试一笔吧。
涉及到退款等资金回滚的API业务,微信支付要求使用证书(上文说要下载的)来验证安全,如果服务器用的PHP就在CURL中设置好证书地址,方法在微信支付文档中有。
微信支付相比支付宝支付有一点好处,就是退款后,微信支付会退回扣的千分之六手续费,而支付宝不会退。
前方有坑:服务器从微信服务端获取到下单数据,要给APP回复时,如果用Hbuilder,其实回复的是一串JSON数据,别把XML数据回复过去了(会提示支付失败-1)。格式如下:
{“appid”:”应用APPID”,”noncestr”:”随机数”,”package”:”Sign=WXPay”,”partnerid”:”微信支付商户号”,”prepayid”:”XXXXXXXXXXXX”,”timestamp”:时间戳,”sign”:”签名”}
将XML数据转成以上的JSON数据回给APP就可以了,记得签名要重新生成!