微信支付:JSAPI或APP拉起支付,return_msg=簽名錯誤

1. 發送給微信的參數xml, 下圖中的商戶key就是微信後臺設置的appsecret

2. 複製到 微信支付接口簽名校驗工具,  本文適用如下圖是檢測通過的

如果跟我一樣, 檢測通過了, 但下單接口仍返回 "簽名錯誤", 唯一的問題就是:

簽名方法傳的key用的是appsecret, 而正確的應該用支付總賬戶的api密鑰,

// 從數據庫獲取微信支付配置(換成自己的配置來源即可)
        WxPayConfig wxPayConfig1 = wxPayConfigMapper.selectById(wxId);
// payKey就是支付總賬戶的api密鑰
        String payKey = wxPayConfig1.getApiKey();
        
        SortedMap<Object, Object> paramMap = new TreeMap<Object, Object>();
        paramMap.put("appid", wxPayConfig.getAppId());//公衆號ID
        paramMap.put("mch_id", wxPayConfig.getMchId());//商戶號
        paramMap.put("nonce_str", RandomUtil.createRandomString(32));//32位隨機字符串
        paramMap.put("body", body);//商品描述
        paramMap.put("out_trade_no", out_trade_no);//商戶訂單號
        paramMap.put("total_fee", StringUtils.substringBefore(String.valueOf(total_fee.multiply(new BigDecimal(100))), "."));//設置交易金額 金額爲分
        paramMap.put("spbill_create_ip", ipInfoUtil.getIpAddr(request));// 發起請求的客戶機IP
        paramMap.put("notify_url", notifyUrl);//通知地址
        paramMap.put("sign_type", "MD5");//通知地址
        paramMap.put("trade_type", "JSAPI");//支付方式 小程序支付
        paramMap.put("openid", openid);//微信用戶在商戶對應appid下的唯一標識,trade_type=JSAPI時(即JSAPI支付),此參數必傳
        paramMap.put("sign", SignUtil.createSign(paramMap, payKey));// 簽名

圖下的appsecret是校驗工具用來驗證簽名的,而apikey是下單接口簽名用的

apikey是對應微信支付平臺的,而微信支付平臺可以綁定小程序和app,小程序或app調用統一下單時,參數sign,創建簽名時傳入的apikey就是它,千萬不要傳appsecret,我就是因爲這個原因導致簽名錯誤。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章