并非全部的BAT的API都是那么好用,微信支付就有很多的坑点,总结一下微信支付实现中出现的坑点html
坑点一:java
PayReq的参数 sign的生成android
PayReq对象有个参数为packageValueapi
而sign生成时要用到packageValue,可是对应的Key是package,这里的key容易弄错微信
List<NameValuePair> signParams = new LinkedList<NameValuePair>(); signParams.add(new BasicNameValuePair("appid", req.appId)); signParams.add(new BasicNameValuePair("noncestr", req.nonceStr)); signParams.add(new BasicNameValuePair("package", req.packageValue)); signParams.add(new BasicNameValuePair("partnerid", req.partnerId)); signParams.add(new BasicNameValuePair("prepayid", req.prepayId)); signParams.add(new BasicNameValuePair("timestamp", req.timeStamp));
坑点二:app
支付回调方法ide
微信使用反射找到对应的类并实现的回调函数
微信官方给出的说明以下:测试
参照微信SDK Sample,在net.sourceforge.simcpux.wxapi包路径中实现WXPayEntryActivity类(包名或类名不一致会形成没法回调),在WXPayEntryActivity类中实现onResp函数,支付完成后,微信APP会返回到商户APP并回调onResp函数,开发者须要在该函数中接收通知,判断返回错误码,若是支付成功则去后台查询支付结果再展现用户实际支付结果。微信支付
意思以下:
一、你要在建立个packageName+.wxapi的包,如:你的项目报名:com.android.qq,那你要在该包名下建立个wxapi的包
二、在该包下建立个名为 WXPayEntryActivity的Activity类,并实现 接口 IWXAPIEventHandler ,支付的回调就在该接口的 onResp(BaseResp resp)方法中进行
package com.android.qq.wxapi; public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {
@Override public void onResp(BaseResp resp) { //处理支付回调 }
}
三:
签名测试
这个算不上坑点洛,不少第三方都要这样才可测试
支付的测试必须对应签名的包,不然没法测试支付功能