1. 程式人生 > >微信小程式支付JAVA後臺邏輯

微信小程式支付JAVA後臺邏輯

① 小程式前端會通過呼叫wx.login介面獲取得到登陸憑據code。這個code獲取之後5分鐘內如果再次呼叫wx.login獲取code並傳遞給②就會報錯,code非法,這個需要注意下。

② 小程式將code登陸憑據和orderId訂單編號穿給後臺服務端,服務端呼叫https://api.weixin.qq.com/sns/jscode2session介面,獲取session_key和openId。

③ 服務端拿到openId以後,呼叫統一下單介面https://api.mch.weixin.qq.com/pay/unifiedorder,並將返回的xml轉化為map,得到其中的一些支付需要的引數進行二次簽名,並返回給小程式。

@Override
public JSONObject getSecondSign(Map<String, String> map) throws Exception {
String return_code = map.get("return_code");//返回狀態碼
        String return_msg = map.get("return_msg");//返回資訊
        logger.debug("return_code:"+return_code+"------return_msg:" + return_msg);
        JSONObject JsonObject=new JSONObject() ;
        // 業務結果
        if("SUCCESS".equals(return_code)){
            String prepay_id = map.get("prepay_id");//返回的預付單資訊
            String nonceStr = RandomUtil.get32RandomStr();
            JsonObject.put("nonceStr", nonceStr);
            JsonObject.put("package", "prepay_id="+prepay_id);
            Long timeStamp= System.currentTimeMillis()/1000;
            JsonObject.put("timeStamp", timeStamp+"");
            //再次簽名
            String appid = PayConstant.WX_APPID;
            String stringSignTemp = "appId=" + appid
            + "&nonceStr=" + nonceStr
            + "&package=prepay_id=" + prepay_id
            + "&signType=MD5&timeStamp=" + timeStamp;
            stringSignTemp = stringSignTemp + "&key=" + PayConstant.WX_MCHKEY;
            String paySign = DigestUtils.md5Hex(stringSignTemp).toUpperCase();
            JsonObject.put("paySign", paySign);
        }
return JsonObject;
}
  ④ 小程式拿到上述的支付引數後,呼叫wx.requestpayment就可以調起支付了,使用者完成付款後,小程式會回撥我們設定的notify_url方便我們進行更新訂單狀態等後續操作。

附上日誌列印:

以上為簡單整理的四步邏輯,具體介面的引數可以參考微信支付API文件。https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-pay.html