写在前面的话
第一次在简书发文章,上个星期公司项目因为业务需求,需要接入微信支付,本人之前并没有接入微信支付的经验,经过一个星期的噩梦,在此整理一下在app端接入微信支付的详细步骤,能让小白都能无脑接入成功的新手教程。
接入前的准备
别先急着去搞你的代码,接入先从微信开放平台open.weixin.qq.com/cgi-bin/index官网开始。
1.微信开放平台
已经搞定微信平台开发者账号,并且添加好了应用,开通了微信支付的同学跳过。
为什么第一步先看这个地方,因为有的公司开发团队职责分配不明确,有些这部分任务也是由开发人员来完成的,1来照顾小白,看一篇帖子就搞定这个垃圾功能,不用再去百度怎么创建平台账号等等琐事。2来让开发人员直接把这个图丢产品脸上,开发:“接个鸡儿微信开发,微信平台账号你创好了嘛?应用添加了嘛?支付功能申请了嘛?”。
推荐是由产品等划水职业来搞定这部分工作,反正不是开发来做。不是偷懒什么的,这里面有些步骤是需要公司工商证明等材料提交上去,然后审核的,我们小开发仔没有,再说产品连这个都搞不定,我要你产品干嘛?
2.微信开放平台-开发者
如果你的产品经理跟你说他弄好了,你打开开放平台,登录账号,根据步骤进入到这个界面,不是下面这个图的样子,二话不说直接锤他,往死里锤! ------ 尼古拉斯 子路
全部审核成功还会有一个商户号,还包括商户平台的账号密码等,商户平台我们不管,但是appID和商户号我们一定要知道,调起微信支付需要用到这两个参数,可以自己本地配置,推荐还是让服务器回给我们,我们从服务器取比较正规。 ------ 尼古拉斯 子路
如果是这个样子,那么恭喜,你的产品经理不是个废材、只会喊加油666。
上面这个界面怎么来的:“应用详情”界面,拉倒最底下,看到“开发信息”,点击它最右边那个原谅色的“修改”,界面跳转后就是这个界面。
下面告诉大家怎么找自己的应用签名和包名:
1.签名稍微复杂一点,先下载一个签名生成工具,安装到手机上。签名生成工具下载(这个下载链接如果失效了,自己直接去开放平台 资源中心--->资源下载--->Android资源下载) 再把页面拉到最下面,就能看到了。
2.运行那个签名生成工具,在那个框里输入应用包名点击获取签名就行了。
3.签名是根据你编译时候用的jks文件决定的,建议大家debug版build的时候也设置成release时候用到的jks文件(下图)。不用一会去开放平台提交debug版签名,等待开发调试完毕,又去开放平台换成release签名,我个人感觉是有点麻烦的,当然,自己选择。
Tips:开放平台绑定的签名和手机上用签名生成工具得到的签名一定要一致。当然包名你也别给我搞错了,不然你就等着各种BOOM。 绑定包名和签名的时候不用管ios他们填什么,我们只管我们android,他们填什么都跟我们不搭嘎,这里告诉大家这个顾虑是多余的。 ------尼古拉斯 子路
是不是很简单,开发平台配置完成后,可以细致的过下官方文档,有惊喜,下面正式开始代码部分的接入(文中说的是android studio集成方法,还在用eclipse的小伙伴我只能默哀,这东西就像一个是电脑端游,各种超清画质,无限地图,多人竞技等等,一个就是小时候玩过的插卡小霸王,二者不可以道里计)。
代码集成
1.添加依赖,下载demo(笔记本截图太难受了,屏幕太小,截不全)
2.打开官方支付demo
将PayActivity和WXPayEntryActivity(支付回调界面)复制到自己的项目中,修改下报错,除了Copy一下跟这两个类有关联的类,其他都不用管。其中WXPayEntryActivity的文件目录格式要跟下图一样,开放平台绑定的商户应用包名 + wxapi + WXPayEntryActivity。PayActivity则作为支付界面,来调起微信支付,如果有自己的支付界面,请替换。
Tips:Copy的类中所用到的appID替换成自己应用的appID,这点都忘了可以回家养猪了 ------尼古拉斯 子路
3.AndroidManifest.xml中注册
权限和activity注册代码在demo中就能找到
4.完善一下Copy的两个主要类
其中WXPayEntryActivity回调类中,onResp方法,可以参考修改成下图。
PayActivity支付类
这个类要跟你们讲一下支付的流程,先看demo。
1.demo中这个接口地址是直接返回参数的,可以用浏览器看到返回值,真实项目中地址由后台接口提供,并且我们还要传若干参数给服务器,让它调用微信的统一下单接口,再回给我们订单信息。
2.这七个参数是必须传给我们的,具体自己跟服务器端商量,看需求。需要注意的是sign这个参数回给我们的时候是要经过二次签名的。一次签名是在服务端调统一下单接口需要作为参数传给微信的api的,通过微信api返回的参数,进行二次签名(如下图)。这个app本不需要了解,但是就怕你的服务端队友没做过支付,然后又没仔细看过文档,或者在文档中迷失,那就等着无情-1教做人。
最后贴上我的支付类截图
如果微信支付难度如果是100,那么返回-1的就是其中的80,为什么这么说,看下图。
你们看见这个-1知道是什么原因造成的嘛?没人知道!最屌的就是这个叫“其他异常”的,所以说搞过微信支付的程序员为什么说这个东西垃圾,不是没原因的,把这些吃人饭不干人事的东西推出去毙了,我第一个赞成。吐槽的地方有很多,就不多说了。
微信支付返回-1的情况和提醒:
1.appID,一般不会搞错,搞错的都是一些非要手打的铁头娃。
2.正式打包发布的签名,前面说过开放平台绑定的签名和手机上用签名生成工具得到的签名一定要一致,概念要清楚,一般情况是你发布打包和debug运行的时候他不是一个jks文件,这个随时可以用签名生成工具apk查看,问题不大。
3.开放平台修改绑定签名都是即时生效,提交就生效,不用审核啊那些鬼东西。
4.服务器订单签名,虽然调了统一下单,但是没有拿微信api返回给他的参数做二次签名就回给我们,然后我们这边也没处理,这是一定报-1的,没做过的不一定知道这点,文章前面也说过。服务器和app端都可以二次签名,但是我们让服务端做,为什么?因为android开发鸡儿最大。
按照我的文章来,不会报错,当然了,少不了忘记写什么内容,,如果害的大家掉坑了,可以评论回复,也可以喷我,但是我先声明,我这人经不起批评! ------尼古拉斯 子路
最后
建议大家上面的代码和截图不要全部搞ctrl+C,ctrl+V那一套,能自己敲的尽量自己敲,加深印象,有助理解,理解掌握了才能做到无招胜有招的境界,上山的路有很多条,希望我们都能找到自己那条。
最后把业务流程图给大家,这个一定要看,而且要看明白,看懂,想做好程序员要知其然还要知其所以然。放在最后是因为我觉得接入成功之后再看能更好的理解,对着代码,对着流程,这么简单的东西,相信搞android开发的都能明白,加油,开发至上。
以上有关激进言论跟我没任何关系,网上复制来的,18以下的请在大人陪同下观看,本人原创,转载注明出处就行,谢谢大家。