我们之前的一个项目是用cordova做的,微信支付OK,现在我拿那个服务端对接payment时候跳转到微信的时候只有一个确定按钮,应该说参数出现了问题,但是检查了好多遍都没看出问题,有遇到这种情况的朋友嘛 求助
参数结果示例:
{"reqCode":{"sign":"3DB4B6C20895454047A0FAA27699A075","timestamp":"1441342474","noncestr":"fd2c5e4680d9a01dba3aada5ece22270","partnerid":"1255284101","prepayid":"wx201509041244342124f2db000815243835","package":"Sign=WXPay","appid":"wx6633a5c45669f132"}}
部分代码:
private ReturnResult buildWXpayResponse(OrderInfo orderInfo)
throws Exception {
ReturnResult returnResult = new ReturnResult();
// 订单名称
String orderName = AlipayConfig.orderName;
// 付款金额
int price = orderInfo.getRentalAll();
// 支付类型
// 必填,不能修改
// 把请求参数打包成数组
Map<String, String> sParaTemp = new HashMap<String, String>();
sParaTemp.put("appid", WXPayConfig.weixinappid);
sParaTemp.put("body", orderName);
sParaTemp.put("mch_id", WXPayConfig.partnerId);
String nonceStr = WXUtil.getNonceStr();
sParaTemp.put("nonce_str", nonceStr);
sParaTemp.put("device_info", "APP001");
sParaTemp.put("notify_url", WXPayConfig.notifyUrl);
sParaTemp.put("out_trade_no", orderInfo.getPayNumber());
sParaTemp.put("spbill_create_ip", "127.0.0.1");
sParaTemp.put("trade_type", "APP");
if (testModel) {
sParaTemp.put("total_fee", "1");// 测试价格
} else {
sParaTemp.put("total_fee", price * 10 + "");// 测试价格
}
//交易时间
String sign = WXUtil.signRequest(sParaTemp);
sParaTemp.put("sign", sign);
String xmlStr = WXUtil.buildXml(sParaTemp);
String result = HttpUtils.postJsonString(WXPayConfig.submitUrl, xmlStr);
if (StringUtils.isNotBlank(result)) {
WXResult wXResult = (WXResult) XMLUtil.getObjectFromXML(result,
WXResult.class);
if ("SUCCESS".equals(wXResult.getResult_code())
&& "SUCCESS".equals(wXResult.getReturn_code())) {
Map<String, String> clientMap = this.wxResultToClient(wXResult
.getPrepay_id());
Map<String, Object> resMap = new HashMap<String, Object>();
resMap.put("reqCode", clientMap);
returnResult.setReturnContent(resMap);
} else {
returnResult.setErrno(10025);
returnResult.setError("error.10025");
}
} else {
returnResult.setErrno(10025);
returnResult.setError("error.10025");
}
return returnResult;
}
private Map<String, String> wxResultToClient(String prepayId) {
// 组织参数签名
Map<String, String> resultMap = new HashMap<String, String>();
resultMap.put("appid", WXPayConfig.weixinappid);
resultMap.put("partnerid", WXPayConfig.partnerId);
resultMap.put("prepayid", prepayId);
String nonceStr = WXUtil.getNonceStr();
String timeStamp = WXUtil.getTimeStamp();
resultMap.put("noncestr", nonceStr);
resultMap.put("timestamp", timeStamp);
resultMap.put("package", WXPayConfig.wxpackage);
String sign = WXUtil.signRequest(resultMap);
// 输出支付请求参数
Map<String, String> outMap = new HashMap<String, String>();
outMap.put("sign", sign);
outMap.put("timestamp", timeStamp);
outMap.put("prepayid",prepayId);
outMap.put("partnerid",WXPayConfig.partnerId);
outMap.put("package", WXPayConfig.wxpackage);
outMap.put("noncestr", nonceStr);
outMap.put("appid", WXPayConfig.weixinappid);
outMap.put("retmsg", "OK");
outMap.put("retcode", "0");
return outMap;
}
public static String signRequest(Map<String, String> sPara){
sPara = paraFilter(sPara);
String prestr = createLinkString(sPara);
prestr = prestr + "&key=" + WXPayConfig.partner_key;
String mysign = "";
if(StringUtils.isNotBlank(prestr)){
mysign = MD5Util.MD5Encode(prestr, "utf-8").toUpperCase();
}
return mysign;
}