做过的微信支付分享一下:
1.首先你去微信开放平台把需要的一些东西都注册好,获取到,如商户账号,appid等,
2.导入微信的libs包libammsdk.jar
3.复制微信的这个包名和这两个类名,要一模一样,这是微信规定的
4.我不知道你们是在哪边要处理的,如果是在前端处理的话,这些字段都要前端自己写,顺便说一下,在前端处理,微信支付的单位是分,所以你要将元转换为分,后端那是后台的事了,你就不用管了:
final IWXAPI api = WXAPIFactory.createWXAPI(context, null);//注册微信 api.registerApp(WXconstant.APP_ID); if(!api.isWXAppSupportAPI())//是否支持当前微信版本支付功能 { Utils.showToastShort(context, "当前版本不支持支付功能!"); return; }---------------------------以下是调起微信的代码-----------------------
PayReq payReq = new PayReq(); // 应用id payReq.appId = WXconstant.APP_ID; // 商户号 payReq.partnerId = WXconstant.PARENT_ID; // 预支付交易会话id payReq.prepayId = map.get("prepay_id"); // 扩展字段 payReq.packageValue = "Sign=WXPay"; // 随机字符串 payReq.nonceStr =map.get("nonce_str"); // 时间戳 String nowTime = getNowTime(); payReq.timeStamp = nowTime; // 签名 payReq.sign = getSignTwo(nowTime); api.sendReq(payReq);
用到的方法如下:
private String getSignTwo(String time) { // 第一步:对参数按照key=value的格式,并按照参数名ASCII字典序排序如下: String stringA = "appid=" + WXconstant.APP_ID + "&noncestr=" + map.get("nonce_str") + "&package=" + "Sign=WXPay" + "&partnerid=" + WXconstant.PARENT_ID + "&prepayid=" + map.get("prepay_id") + "×tamp=" + time; // 第二步:拼接API密钥:prepay_id String stringSignTemp = stringA + "&key=" + WXconstant.WX_KEY; return MD5.getMessageDigest(stringSignTemp.getBytes()).toUpperCase(); } /** * 秒值 1970年 到 现在 * * @return */ private String getNowTime() { // TODO Auto-generated method stub int time = (int) (System.currentTimeMillis() / 1000); return String.valueOf(time); }有些字段是从后台返回的,最起码的 prepayid......
相对于来说这些都放在后台处理比较安全,所以我们项目中都是在后台处理的,后台返回了一长串的字段,前段基本不用费什么劲了,如:
{"appid":"xxxxxxx","noncestr":"1xxxxxxx","package":"Sign=WXPay","partnerid":"1990393314","prepayid":"sssssss","sign":"AD3832873241CAA86A3FAFA6CEE77C2C",
"timestamp":"1477045950"}
这样相对于前段来说简单了,基本没什么处理的了
然后就是回调了
支付的结果都在这个类WXPayEntryActivity中处理,然后你就跳转到你想要的界面就行
@Override public void onResp(BaseResp resp) { if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) { if (resp.errCode == 0) { T.show(WXPayEntryActivity.this, "支付成功!"); finish(); } else if (resp.errCode == -2) { T.show(WXPayEntryActivity.this, "您已取消支付!"); finish(); } else { T.show(WXPayEntryActivity.this, "支付失败!"); finish(); } }