Map<String, String> data = new HashMap<String, String>();
data.put("appid","wx9bc*****b8908"); //小程序ID
data.put("mch_id",config.getMchID()); //商户号
data.put("trade_type","JSAPI"); //支付场景 APP 微信app支付 JSAPI 公众号支付 NATIVE 扫码支付
data.put("notify_url",notifyUrl); //回调地址
data.put("spbill_create_ip",config.create_ip); //终端ip
data.put("total_fee",amount); //订单总金额
data.put("out_trade_no",ordernum); //交易号
data.put("body",gname);
data.put("openid",openid);
data.put("nonce_str",WXPayUtil.generateNonceStr());// 随机字符串小于32位
String s = WXPayUtil.generateSignature(data, config.getKey()); //签名
data.put("sign",s);
Map<String, String> respData = wxpay.unifiedOrder(data);;
if (respData.get("return_code").equals("SUCCESS")){
//返回给APP端的参数,APP端再调起支付接口
String resultCode = respData.get("result_code");
if("SUCCESS".equals(resultCode)){
Map<String, String> daa = new HashMap<>();
daa.put("appId", "wx9bc*****b8908");
daa.put("package", "prepay_id="+respData.get("prepay_id"));
daa.put("nonceStr", WXPayUtil.generateNonceStr());
daa.put("signType", "MD5");
daa.put("timeStamp", String.valueOf(System.currentTimeMillis() / 1000));//单位为秒
daa.put("paySign", WXPayUtil.generateSignature(daa, config.getKey()));
dataMap.put("data", daa); //传给前端
}else {
}
}
public WXPay(final WXPayConfig config, final String notifyUrl, final boolean autoReport, final boolean useSandbox) throws Exception {
this.config = config;
this.notifyUrl = notifyUrl;
this.autoReport = autoReport;
this.useSandbox = useSandbox;
if (useSandbox) {
this.signType = SignType.MD5; // 沙箱环境
}
else {
// this.signType = SignType.HMACSHA256;//微信文档
this.signType = SignType.MD5;//改成这个
}
this.wxPayRequest = new WXPayRequest(config);
}
这个坑,多少人掉进去过?
预支付接口和先程序发起的支付接口,这两个接口参数不一致,一个短划线连接,一个是驼峰形式。
appid和appId的区别。
你好,“二次签名的时候要求appId是大写”您的这句话表达有问题,二次签名只是参数appid要以驼峰的形式,您这样说很容易让人以为是appid要转大写,我就是被这个坑了一天,现在调通了,希望对其他人有帮助
您好,请参考:
1.统一下单的时候,接口要传的appid是小写,但是二次签名的时候要求appId是大写,请注意。
2.如下图:
我统一下单的接口appid是小写的,第二次appId是大写 传给前端 就是报支付验证签名失败
您好,图二有检查吗?
这个是前端接收的参数
{"appId":"wx9bc*****b8908","timeStamp":"1551950140","signType":"MD5","package":"prepay_id=wx07171540735825b25b5da0aa2950542503","nonceStr":"By6AeXwjD0ZTjPgmrvuGgelkLOFcwvYR","paySign":"DC696BF9A61E1AA52DDE2A7A4C1FF33F"}
{"errMsg":"requestPayment:fail:支付验证签名失败"} 老是报这个错误
您好,请按照上图的仔细排查。
您好,如果不可以,请加微信:WePayTS7