对hash签名失败_微信支付 支付验证签名失败 prepay_id配置问题

jspai方式支付,页面一直报【签名验证失败】,签名验证过了没有问题,有一点错误就报【缺少参数 total_fee】,这是误报,具体原因有很多。

原因是因为我在前台这样写的:

package: "prepay_id=" + data.obj.package

实际 【prepay_id=xxxx】应该写在后台二次签名那里:

26c5c8fffeab198ac4a62351e0393bbd.png

前台代码

7acde589f4f6958b2107c0c37a9277ad.png

jsapi支付具体流程:

1.统一下单、生成预支付订单

2.后台拿着预支付订单信息进行二次加密,具体:

String body = request.getParameter("body");

String out_trade_no = StringUtil.getUuid();

String total_fee = request.getParameter("price");

String spbill_create_ip = StringUtil.getIpAddr(request);

String notify_url = Config.UNIFIEDORDER_NOTIFY_URL_M2;

String trade_type = "JSAPI";

String openid = request.getParameter("openid");

Map map = new HashMap();

map.put("body", body);// 商品描述

map.put("out_trade_no", out_trade_no);// 商户订单号

map.put("total_fee", total_fee);// 总金额

map.put("spbill_create_ip", spbill_create_ip);// 发起人IP地址

map.put("notify_url", notify_url);//通知地址

map.put("trade_type", trade_type);// 交易类型

map.put("openid", openid);// 交易类型

Map data = PayUtil.unifiedOrder(map);//获取到预支付订单

Map res = PayUtil.responseCode(data);//解析错误码

if (res.get("return_code").equals("SUCCESS")) {

if (res.get("result_code").equals("SUCCESS")) {

System.out.println("JSAPI统一下单成功...");

System.out.println("JSAPI生成前台需要的参数...");

String page_time_stamp = String.valueOf(System.currentTimeMillis()).substring(0, 10);

String page_prepay_id = res.get("prepay_id").toString();

Map pagePrams = new HashMap<>();

pagePrams.put("appId", Config.APP_ID);

pagePrams.put("timeStamp", page_time_stamp);

pagePrams.put("nonceStr", StringUtil.getUuid());

pagePrams.put("package", "prepay_id="+page_prepay_id);

pagePrams.put("signType", Config.SIGN_TYPE);

pagePrams.put("paySign", PayUtil.generateSignature(pagePrams));

return new ResponseUtil(1, "统一下单成功", pagePrams);

} else {

return new ResponseUtil(0, res.get("err_code_des").toString());

}

} else {

return new ResponseUtil(0, "统一下单失败: " + data.get("return_msg"));

}

重点是红色部分,二次签名,参数名要和jssdk官网写的一致(注意大小写):

55dc5a1546725e6f95fd6f9d8036d803.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值