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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

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

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

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

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

/*** 退款接口* @param request* @param response* @param merOrderId* @param refundAmount* @return* @throws UnsupportedEncodingException*/@RequestMapping(value = "/OrderRefund", method = RequestMethod.POST)public Map<String, Object> query(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"); //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:refund-------------------if (!"refund".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("") || datamap.get("refundAmount").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.put("refundAmount", datamap.get("refundAmount")); //退款金額Map<String, Object> refundmap = refundserviceimpl.Refund(map);logger.info("refundmap = " + refundmap);if(!"200".equals(refundmap.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", refundmap.get("errCode")); //平臺錯誤碼resultdatamap.put("status", refundmap.get("status")); //交易狀態resultdatamap.put("totalAmount", refundmap.get("totalAmount")); //退款金額resultdatamap.put("targetSys", refundmap.get("targetSys")); //目標平臺代碼(第三方代碼)resultdatamap.put("targetStatus", refundmap.get("targetStatus")); //目標平臺狀態resultdatamap.put("refundStatus", refundmap.get("refundStatus")); //支付時間resultdatamap.put("refundOrderId", refundmap.get("refundOrderId")); //平臺退款訂單號resultdatamap.put("refundTargetOrderId", refundmap.get("refundTargetOrderId")); //第三方退款訂單號resultdatamap.put("messageType", refundmap.get("msgType")); //消息類型resultmap.put("data", resultdatamap);resultmap.put("returnCode", refundmap.get("errCode")); //resultmap.put("returnInfo", refundmap.get("errMsg"));return resultmap; }

1.2.2 refundserviceimpl代碼

本部分代碼為銀聯商務公眾號退款接口服務實現類。

public Map<String, Object> Refund(Map<String, Object> map) throws UnsupportedEncodingException {// TODO Auto-generated method stublogger.info("------------------refund--------------------------");Map<String, Object> reqmap = new HashMap<String, Object>(); //請求mapMap<String, Object> resp = new HashMap<String, Object>(); //響應respreqmap.put("mid", map.get("mid").toString()); //商戶號,前端傳入reqmap.put("tid", map.get("tid").toString()); //終端號reqmap.put("instMid",map.get("instMid").toString()); //業務類型reqmap.put("msgSrc", map.get("msgSrc").toString()); //消息來源reqmap.put("msgId", "UnionPay_F003"); reqmap.put("msgType", "refund"); //消息類型//報文請求時間String aligetTime = PayUtil.aligetTime();logger.info("請求時間aligetTime = " + aligetTime);reqmap.put("requestTimestamp", aligetTime); reqmap.put("merOrderId", map.get("merOrderId").toString()); //原商戶交易訂單號,前端傳入reqmap.put("refundAmount", map.get("refundAmount").toString()); //退款金額,前端傳入//下單時未上送分賬標識,上傳分賬標識,需進一步討論退款金額reqmap.put("refundDesc", "訂單退款"); //退款說明//生成退款訂單號String refundorderid = GGitUtil.createOrderID();StringBuffer buff = new StringBuffer(); buff.append(this.msgSrcId); //來源編號3194buff.append(refundorderid);reqmap.put("refundOrderId", buff.toString());//生成待簽名字符串并進行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);logger.info("reqmap= " + reqmap);String jsonstring = GGitUtil.MapToJson2(reqmap); //請求map轉成json stringlogger.info("發送refund post請求消息:" + jsonstring);//接收銀聯商務返回退款mapresp = unionpayrequest.dopost(UnionPayConstants.queryURL, jsonstring);return resp;}

1.3測試結果
本文對所寫接口寫了測試網頁進行測試,如圖所示。封裝的銀聯商務響應接口中,返回商戶退款訂單號,第三方退款訂單號,消息類型、退款狀態等,其中退款狀態status為TRADE_SUCCESS,表示退款操作成功,此時查看微信支付記錄中,可以看到退款到賬信息。

總結

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

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

主站蜘蛛池模板: 久久亚洲精品中文字幕 | 亚洲一二三精品 | 吻胸摸激情床激烈视频 | 日本a在线播放 | 玖玖爱这里只有精品 | 色就色欧美 | 激情六月综合 | www.香蕉.com| 手机看片日韩日韩 | 欧美第十页 | 99热这里只有精品在线 | 日韩在线观看一区 | 相亲对象是问题学生在线观看 | 天天插日日插 | 超碰青青操 | 老熟女高潮一区二区三区 | 国产成人免费片在线观看 | 伊人3| 双乳被四个男人吃奶h文 | 欧美特黄| 麻豆av电影在线 | 在线精品亚洲欧美日韩国产 | 天天色棕合合合合合合合 | 国产大学生自拍视频 | 亚洲永久精品一区二区 | 国产欧美精品一区二区色综合朱莉 | 欧美色图另类 | 人人爱超碰 | 久久久久一区二区 | 国产精品久久综合青草亚洲AV | 波多野吉衣一区 | 性欧美又大又长又硬 | v片在线免费观看 | 欧洲综合视频 | 狠狠鲁影院 | 午夜两性 | 成人激情小视频 | 北条麻妃久久精品 | 亚洲精品综合精品自拍 | 亚洲天堂社区 | 亚洲xx视频| 国产精品伦一区二区三区免费看 | 一曲二曲三曲在线观看中文字幕动漫 | 蜜桃成人无码区免费视频网站 | 狠久久| 一区二三区 | 欧美www在线观看 | 一个人免费在线观看视频 | 国产高清成人 | 在线一二区 | 国产精品熟女一区二区不卡 | 中文字幕日韩一区二区三区 | 伊人影片 | 亚洲一区二区三区四区在线 | 91另类| 丝袜诱惑一区二区 | 亚洲综合网站 | 日本熟妇色xxxxx日本免费看 | 在线免费观看亚洲视频 | 免费在线欧美 | 91porn九色| 中文字幕777 | 欧美人妻一区二区 | 天天插夜夜爽 | 欧美性久久久 | 免费观看亚洲视频 | 一区二区欧美日韩 | 国产综合在线观看 | 国产精品污污 | 亚洲国产精品18久久久久久 | 天堂va蜜桃一区二区三区漫画版 | 亚洲一区二区三区四 | 免费av网址在线观看 | 天天干天天操天天碰 | 无码一区二区三区在线 | 91精品免费看 | 午夜理伦三级理论 | 久久综合久 | 欧洲高潮三级做爰 | 黄色片女人 | 免费网站成人 | 能看的av | 欧美嫩草 | 日韩精品五区 | 一区二区啪啪啪 | 天堂资源最新在线 | 色戒av| 91色交视频 | av日韩av | 福利片在线观看 | 国产成人综合亚洲 | 国产精品久久久久久久午夜 | 亚洲一区二区小说 | 变态另类一区 | 日本中文视频 | 欧美国产精品一二三 | 中国在线观看免费高清视频播放 | 超黄网站在线观看 | 日美一级片|