日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java对接银联商务公众号+服务窗支付(5)

發布時間:2024/3/26 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java对接银联商务公众号+服务窗支付(5) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

java實現銀聯商務公眾號+服務窗對接----訂單撤銷

本文對接銀聯商務公眾號+服務窗支付,實現支付下單、訂單查詢、訂單退款、退款查詢和訂單關閉幾個功能,使用到銀聯商務的公眾+服務窗支付接口規范,請自行百度下載。
在上幾篇支付下單、下單查詢、訂單退款和退款查詢,已經實現公眾號下單支付、下單查詢、訂單退款、退款查詢功能的實現和接口的封裝,本篇將介紹訂單撤銷的對接實現,并將我使用到的銀聯商務的請求接口和響應接口進行封裝,使用測試網頁輸出測試信息。
一、接口及代碼實現
1.訂單撤銷接口
1.1接口規范
接口規范請查看下載的銀聯商務公眾號+服務窗接口規范訂單撤銷接口部分,這里不做展示。
1.2 代碼實現
1.2.1 CloseOrderController代碼

/*** 訂單關閉接口* @param request* @param response* @param merOrderId* @return* @throws UnsupportedEncodingException*/@RequestMapping(value = "/OrderClose", method = RequestMethod.POST) // public Map<String, Object> close(HttpServletRequest request, HttpServletResponse response, String merOrderId) throws UnsupportedEncodingException { // Map<String,Object> map = new HashMap<String,Object>(); //接收退款請求map // map.put("merOrderId", merOrderId); //商戶訂單號 // Map<String, Object> closeordermap = closeorderserviceimpl.CloseOrder(map); // logger.info("closeordermap = " + closeordermap); // return closeordermap; //返回refundmap // }public Map<String, Object> close(HttpServletRequest request, HttpServletResponse response, @RequestBody String jsonreq) throws UnsupportedEncodingException { Map<String,Object> map = new HashMap<String,Object>(); //接收退款查詢請求mapMap<String,Object> reqmap = new HashMap<String,Object>(); //客戶端原始請求mapMap<String,Object> datamap = new HashMap<String,Object>(); //客戶端原始請求Data數據Map<String,Object> resultmap = new HashMap<String,Object>(); //返回結果//接收客戶端請求數據并轉換成mapreqmap = JsonUtils.JsonToMapObj(jsonreq);logger.info("unifiedquery reqmap = " + reqmap);datamap = (Map<String, Object>) reqmap.get("tradeParam"); //請求體數據logger.info("unifiedquery datamap = " + datamap);//-----------------------step1 驗證簽名-----------------------------String sign = (String) reqmap.get("sign"); //獲取signString key = UnionPayConstants.GGMD5KEY; //國光MD5密鑰try {if (!PayUtil.verifySign(datamap,key,sign)) {resultmap.put("returnCode", "Bad_Sign");resultmap.put("returnInfo", "簽名錯誤");return resultmap;}//-----------------------step2 驗證消息類型 tradeType:close-------------if (!"close".equals(reqmap.get("tradeType"))) {resultmap.put("returnCode", "TradeType_Error");resultmap.put("returnInfo", "消息類型不符");return resultmap;}//------------------------step3驗證傳參完整性---------------------------//驗證公共參數完整性if(!PayUtil.verifyParameter(datamap)) {resultmap.put("returnCode", "Common_Value_Error");resultmap.put("returnInfo", "缺少必要公共參數");return resultmap;}//驗證接口參數完整性if(datamap.get("merOrderId").equals("")) {resultmap.put("returnCode", "Value_Error");resultmap.put("returnInfo", "缺少必要接口參數");return resultmap;}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();resultmap.put("returnCode", "System_Error");resultmap.put("returnInfo", "系統異常");return resultmap;}//------------------------step4 傳值并調用退款查詢接口----------------------map.put("mid", datamap.get("mid")); //商戶號map.put("tid", datamap.get("tid")); //終端號map.put("instMid", datamap.get("instMid")); //機構商戶號map.put("msgSrc", datamap.get("msgSrc")); //消息來源map.put("merOrderId", datamap.get("merOrderId")); //原商戶訂單號Map<String, Object> closeordermap = closeorderserviceimpl.CloseOrder(map);logger.info("closeordermap = " + closeordermap);if(!"200".equals(closeordermap.get("statuscode"))) {resultmap.put("returnCode", "Union_Connect_Error");resultmap.put("returnInfo", "銀聯網付連接失敗");return resultmap;}//------------------------step5接口返回數據------------------------------Map<String,Object> resultdatamap = new HashMap<String,Object>(); //resultmap中data數據resultdatamap.put("errCode", closeordermap.get("errCode")); //平臺錯誤碼resultdatamap.put("status", closeordermap.get("status")); //交易狀態resultdatamap.put("totalAmount", closeordermap.get("totalAmount")); //退款金額resultdatamap.put("targetSys", closeordermap.get("targetSys")); //目標平臺代碼(第三方代碼)resultdatamap.put("targetStatus", closeordermap.get("targetStatus")); //目標平臺狀態resultdatamap.put("messageType", closeordermap.get("msgType")); //消息類型resultmap.put("data", resultdatamap);resultmap.put("returnCode", closeordermap.get("errCode")); //resultmap.put("returnInfo", refundquerymap.get("errMsg"));return resultmap; //返回map}

1.2.2 closeorderserviceimpl代碼

本部分代碼為銀聯商務公眾號訂單撤銷服務實現類。

@Overridepublic Map<String, Object> CloseOrder(Map<String, Object> map) throws UnsupportedEncodingException {// TODO Auto-generated method stublogger.info("------------------close order--------------------------");Map<String, Object> reqmap = new HashMap<String, Object>(); //請求mapMap<String, Object> resp = new HashMap<String, Object>(); //響應respreqmap.put("mid", map.get("mid").toString()); //1商戶號reqmap.put("tid", map.get("tid").toString()); //2終端號reqmap.put("instMid", map.get("instMid").toString()); //3業務類型reqmap.put("msgSrc", map.get("msgSrc").toString()); //4消息來源 reqmap.put("msgType", "close"); //5消息類型String aligetTime = PayUtil.aligetTime();logger.info("請求時間aligetTime = " + aligetTime);reqmap.put("requestTimestamp", aligetTime); //6報文請求時間 reqmap.put("merOrderId", map.get("merOrderId").toString()); //7原交易訂單號//生成待簽名字符串并進行MD5加密String builderSignStr = "";try {builderSignStr = PayUtil.builderSignStr(reqmap,UnionPayConstants.MD5KEY);//signString = PayUtil.generateSignature(reqmap, UnionPayConstants.MD5KEY);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}reqmap.put("sign", builderSignStr.toLowerCase()); //8簽名,轉小寫logger.info("reqmap= " + reqmap);String jsonstring = GGitUtil.MapToJson2(reqmap); //請求map轉成json stringlogger.info("發送CloseOrder post請求消息:" + jsonstring);//接收銀聯商務返回mapresp = unionpayrequest.dopost(UnionPayConstants.queryURL, jsonstring);return resp;}

1.3測試結果

本文對所寫接口寫了測試網頁進行測試,如圖所示。封裝的銀聯商務響應接口中,輸入的商戶訂單號為已支付訂單號,響應結果中顯示的是OPTION_NOT_ALLOWED,查看銀聯商務接口文檔,表示此訂單號已被支付,為關閉狀態。(實際測試中,由于參數為測試環境參數,訂單關閉接口測試會出現沒有配置API的錯誤,需要連接生產環境,生產環境參數暫時沒有下來。)

總結

以上是生活随笔為你收集整理的java对接银联商务公众号+服务窗支付(5)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。