最近这段时间在做微信支付,把一些开发的流程及遇到的一些问题记录下来,以后遇到的话也能做个参考!毕竟刚接触这个支付的时候也是走了好多弯路。
首先第一步肯定是要去申请你的公众号,服务号各种的。。。
如果一切顺利的话,就可以拿到以下东西,也是开发时所需要的
①java的证书(在退款,企业转账时用的上)
②AppID:微信分配的公众账号ID
③AppSecret:获取token有用
④Mchid:微信支付分配的商户号
上面这些都准备好后,需要登录到商户平台去设置一些开发环境:就是设置应用debug签名(SHA1的值,注意是不需要冒号的,如果是正式发布的版本需要用正式签名的debug),和包名;
http://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_5
这一部做好了以后应该就能跑通官网下载的demo了,这部签名和包名一定要正确,不然demo跑不通,LZ就是因为这个弄了好久。
不出意外的话应该就能调出微信的支付界面了。
下面我提供了两个demo 一个是以前官网的,一个是现在在官网下载的。
前一个有一个自带的debug的签名的,只需要通过eclipse的windows --> preferences -- > android -->build 点击browse 找到那个DEMO中自带的debug签名,这样就不需要到后台去配置签名那一步了。 后面这种就需要到商户平台去配置下签名,如果是集成到自己的应用中,只需要改下签名和包名就可以了。支付完成,按照支付宝的流程,支付完成应该有个回调的,来通知我已经支付完成了。可是没有回调成功,去查了下资料。微信开放平台有个 不成文的规定(文档里没有说明),就是回调的Activity必须是:你的包名(微信demo里是:net.sourceforge.simcpux)+.wxapi.WXPayEntryActivity.java,走起。。。。。可是还是没去走回调。。。。又去百度下,发现在发起微信支付时,有一个notify_url 参数,这个参数是支付成功后微信调用的,(当时是在服务器端写了一个.jsp的页面,返回了一个success,(这个.jsp页面可以去处理查询订单是否支付成功等等的操作。)可是怎么测试了,微信那边这么能访问到我本地电脑上的服务器,又不能拿公司的服务器去做测试。看了网上说的,可以去下载一个ngrok(https://ngrok.com/ )的软件,将内网映射到外网去,在命令行下配置下就可以了。。。下面我也提供了,但那个验证码还是要去注册才能得到[http://blog.csdn.net/liuxiyangyang/article/details/22922265](不过好像被墙了),然后到公众平台中的微信支付中的 开发配置中配置下回调的页面,我在服务器写了一个test.jsp, 然后把刚才映射的地址加上test.jsp填上去就可以了。
至此微信支付的功能就差不多搞定了,接下就是安全性的,为了做安全性设计,把一些重要的东西放到服务器生生成,这样是为防止客户端被反编译。反编译之后,带来的就是别人拿到key 模拟支付过程,把某个订单号支付完成。那么,腾讯那边收到钱就会同时给客户端 和我们自己的服务器发送请求。那么,我们自己的服务器收到腾讯的通知之后,就会把这个订单的状态置为已经支付。
好了 ,后面我会继续补充 一些转账功能,授权的一些问题。
1、 微信开放平台:https://open.weixin.qq.com/
2、微信公众平台:https://mp.weixin.qq.com/
3、API文档:https://open.weixin.qq.com/zh_CN/htmledition/res/dev/document/sdk/android/index.html
4、商户平台开发文档:http://mch.weixin.qq.com/wiki/doc/api/app.php?chapter=11_1
微信Demo.zip