微信支付的那些坑

PayReq req = new PayReq();
req.appId = Constants.APP_ID;
req.partnerId = response.get("mch_id");
req.prepayId= response.get("prepay_id");
req.packageValue = "Sign=WXPay";
req.nonceStr= response.get("nonce_str");
req.timeStamp= String.valueOf(ReturnJson.genTimeStamp());
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));  
req.sign= ReturnJson.genAppSign(signParams);
Api.sendReq(req);
要注意的最重要的一点就是sign了  官网上说是可以直接用返回给你的值   事实上并不行  用它直接返回的值根本就调不起微信支付  所以还是参照官网的算法  自己用数据生成
代码如下
public static String genAppSign(List<NameValuePair> params) {  
StringBuilder sb = new StringBuilder();  
for (int i = 0; i < params.size(); i++) {  
sb.append(params.get(i).getName());  
sb.append('=');  
sb.append(params.get(i).getValue());  
sb.append('&');  
}  
sb.append("key=");  
sb.append(Constants.WECHAT_API_KEY);  
String appSign = MD5.getMessageDigest(sb.toString().getBytes()).toUpperCase();  
Log.e("orion", appSign);
return appSign;  
}
其他的注意的点估计就是返回的方法一定要放在你的包名.WXApi这个路径的包名下  不然是调不起支付的  比如我的主包名是com.one.two   那么返回的类必须放在 com.one.two.wxapi这个包名下才行
其他的倒是都没什么了  就是sing比较坑
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值