微信支付的那些坑

来源:互联网 发布:淘宝网名昵称大全2017 编辑:程序博客网 时间:2024/05/16 19:13
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比较坑
0 0
原创粉丝点击