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比较坑