Android集成微信支付SDK

最近接了集成android微信支付SDK的需求,感觉跟其它的SDK的接入并无太大区别,只不过有一些坑可能需要踩,前人已经踩的差不多了,本人就少踩了一些,总结一下最新的微信支付SDK的集成过程与注意事项。


1. 去官网上申请微信支付所需要的各种APPID等,申请的时候可能需要你的包名,与签名信息等,获取签名信息时,可能会踩坑,(一定要保证生产环境可以支付,要不然等到发版时,发现生产环境不能用,重新提交申请,得等1,2个工作日,老板就得拿你说事儿了),可以参考我的另一篇文章:

http://blog.****.net/yukimineryuu/article/details/53041552 《微信授权登录错误记appid》,因为之前申请过微信授权登录时用的APPID,微信支付时,用的同一账号,因此,appid用以前申请的就可以了。


2. 下载微信官方android支付DEMO: https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=11_1

3. 仅参考它的demo代码(本人试着运行了下,提示“服务器请求错误”,就再没鼓捣它了)

4. 引入libs包。依据官方文档,已不再维护eclipse的jar包版本的sdk了,需要大家尽快切换到Android Studio来(AS太好用了),引入的方式是使用jcenter.

如下:

dependencies {
    compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
}
同步完成即可。


5. 由于微信SDK改成通过Gradle的方式发布到jcenter,包名做了相应修改,从原来的com.tencent.mm.sdk修改为com.tencent.mm.opensdk,需要开发者修改对应的import语句

6. 如果要是有混淆,要将之前的旧包名的混淆改成如下:

-keep class com.tencent.mm.opensdk.** {

   *;

}

-keep class com.tencent.wxop.** {

   *;

}

-keep class com.tencent.mm.sdk.** {

   *;

}

7. 注册微信:

我是在Application里注册一次,保证初始化的时候注册了就好(官网盗图):

Android集成微信支付SDK

8. 从你们的java后台,获取到数据(必须的是以下7条,其中appId可以自己在代码里写死),添到下面大红框里就可以了,最后一个字段extData是optional(非必选),根据业务自行选择。

Android集成微信支付SDK


9. 在你的包名下(即下图红框就是包名),

Android集成微信支付SDK

再建一层目录,必须叫:wxapi, 这个目录下的文件必须叫:WXPayEntryActivity

如何确认是否建立正确: 打开你的WXPayEntryActivity,看到代码里第一行的package是否正确,如下图所示:

Android集成微信支付SDK


10, 然后在AndroidManifest.xml里声明一下,有人说必须这样声明,但微信支付给的官网demo里是简化的,不知道简化的调起WXPayEntryActivity是否有效,我没有验证,反正用其他开发者提供的下面的声明没有问题:



<activity android:name=".wxapi.WXPayEntryActivity" android:exported="true" android:launchMode="singleTop"> <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <data android:scheme="your AppId"/> </intent-filter> </activity>

11 , 在WXPayEntryActivity里接收支付结果的返回状态:

Android集成微信支付SDK

因为WXPayEntryActivity还是一个activity,他是有界面的,所以当我得到返回码的时候把它finish()掉了,然后通过EventBus发送状态码给JAVA后台(当然, 这里是用的接口)

12 ,其它的配置,可以参考微信的DEMO代码,比如权限申请,activty在清单文件里的声明等。

本文只列举出了注意点。供大家参考,免得以后再踩坑。


13, 关于支付状态码 -1 :

有各种情况,首先保证包名与线上签名信息一致,再就是运行的时候,使用

gradle clean assembleRelease打出apk包,再签名运行。不要直接用鼠标点击IDE的RUN


以上就是我此次集成遇到的问题,关键点应该都有,如果有遗漏,请大家指正。