微信支付 支付驗證簽名失敗 prepay_id配置問題

jspai方式支付,頁面一直報【簽名驗證失敗】,簽名驗證過了沒有問題,有一點錯誤就報【缺乏參數 total_fee】,這是誤報,具體緣由有不少。javascript

緣由是由於我在前臺這樣寫的:java

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

 實際 【prepay_id=xxxx】應該寫在後臺二次簽名那裏:api

 

前臺代碼app

 

jsapi支付具體流程:jsp

1.統一下單、生成預支付訂單ui

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<String, String> 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官網寫的一致(注意大小寫):url

 

相關文章
相關標籤/搜索