上周在项目中增加了支持微信支付的功能,遇到了不少问题,现将其mark如下
微信支付流程
获取access_token()
这步需要用到APP_ID
和APP_SECRET
,需要在微信开放平台注册应用获得生成预支付订单
调起微信支付
支付完成后
微信会回调 WXPayEntryActivity 的public void onResp(BaseResp resp)方法,所以后续操作,放在这个回调函数中操作就可以了。
resp.errCode== 0 :表示支付成功
resp.errCode== -1 :表示支付失败
resp.errCode== -2 :表示取消支付
具体步骤大家可以去微信开放平台下载demo文档查看,地址是:https://open.weixin.qq.com/paymch/readtemplate?t=open/resource/app_wx_pay_android_tmpl
官方建议,为安全起见,上面步骤一和步骤二建议放在服务端完成,客户端拿到这些参数直接掉起PayReq,设置完参数完成支付
几个问题
1、 每次运行点完支付都返回-1,即支付失败,并不能调出支付确认界面,原因可能是如下几个原因:
- 这个问题多半是签名错误,或者keystore,包名,签名不一致导致。
- 再有错误,就是你第二步生成Prepayid时的app_signature 生成错误,仔细看下demo和文档。
demo中有一个debug.store可以作为测试签名文件,可以直接掉出支付页面,eclipse(目前文档是基于eclipse的,用as的同学请见谅)步骤如下:
Window->Preferences->Android->Build->指定Custom debug keystore选项的路径为sdk demo工程目录中的debug.keystore文件
运行,程序,进入支付页面即可调出支付页面了,如下
2、可以弹出微信支付的界面,但是支付之后没有进入回调的Activity:WXPayEntryActivity ?
微信开放平台有个 不成文的规定(文档里没有说明),就是回调的Activity必须是:你的包名(微信demo里是:net.sourceforge.simcpux)+.wxapi.WXPayEntryActivity.java
其他的接口回调的Activity必须是:你的包名(微信demo里是:net.sourceforge.simcpux)+.wxapi.WXEntryActivity.java,
而且这两个回调的Activity必须要实现IWXAPIEventHandler的接口 。(抓瞎)
3、项目中用到了友盟社会化分享组件,jar包处理问题
如果你的项目中用到了友盟集成的关于微信的功能,友盟中有两个关于微信的jar包SocialSDK_WeiXin_1
、SocialSDK_WeiXin_2
,
其中SocialSDK_WeiXin_1就是微信功能的原生jar包(libammsdk.jar),所有关于微信的功能都在这个jar包里,大家只需替换这个jar包即可完成升级。SocialSDK_WeiXin_2继续保留
友盟只是对微信的包名做了修改(libammsdk.jar -> SocialSDK_WeiXin_1.jar)