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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

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

java實(shí)現(xiàn)銀聯(lián)商務(wù)公眾號(hào)+服務(wù)窗對(duì)接----下單查詢(xún)

本文對(duì)接銀聯(lián)商務(wù)公眾號(hào)+服務(wù)窗支付,實(shí)現(xiàn)支付下單、訂單查詢(xún)、訂單退款、退款查詢(xún)和訂單關(guān)閉幾個(gè)功能,使用到銀聯(lián)商務(wù)的公眾+服務(wù)窗支付接口規(guī)范,請(qǐng)自行百度下載。
在上一篇支付下單中,已經(jīng)實(shí)現(xiàn)公眾號(hào)下單支付,本篇將介紹下單查詢(xún)接口的對(duì)接實(shí)現(xiàn),并將我使用到的銀聯(lián)商務(wù)的請(qǐng)求接口和響應(yīng)接口進(jìn)行封裝,使用測(cè)試網(wǎng)頁(yè)輸出測(cè)試信息。
一、接口及代碼實(shí)現(xiàn)
1.下單查詢(xún)接口
1.1接口規(guī)范
接口規(guī)范請(qǐng)查看下載的銀聯(lián)商務(wù)公眾號(hào)+服務(wù)窗接口規(guī)范下單查詢(xún)接口部分,這里不做展示。
1.2 代碼實(shí)現(xiàn)
1.2.1 UnifiedQueryInfoController代碼

/*** * 根據(jù)商戶(hù)訂單號(hào)查詢(xún)支付狀態(tài)* @param request* @param response* @param merOrderId 商戶(hù)訂單號(hào)* @return* @throws UnsupportedEncodingException*/@RequestMapping(value = "/OrderQuery", method = RequestMethod.POST)public Map<String, Object> query(HttpServletRequest request, HttpServletResponse response, @RequestBody String jsonreq) throws UnsupportedEncodingException { Map<String,Object> reqmap = new HashMap<String,Object>(); //客戶(hù)端原始請(qǐng)求mapMap<String,Object> map = new HashMap<String,Object>(); //請(qǐng)求銀聯(lián)商務(wù)mapMap<String,Object> datamap = new HashMap<String,Object>(); //客戶(hù)端原始請(qǐng)求Data數(shù)據(jù)Map<String,Object> resultmap = new HashMap<String,Object>(); //返回結(jié)果//接收客戶(hù)端請(qǐng)求數(shù)據(jù)并轉(zhuǎn)換成mapreqmap = JsonUtils.JsonToMapObj(jsonreq);logger.info("unifiedquery reqmap = " + reqmap);datamap = (Map<String, Object>) reqmap.get("tradeParam"); //tradeParam請(qǐng)求體數(shù)據(jù)logger.info("unifiedquery datamap = " + datamap);//---------------------step1 驗(yàn)證簽名-----------------------------String sign = (String) reqmap.get("sign"); //獲取signString key = UnionPayConstants.GGMD5KEY; //國(guó)光MD5密鑰try {if (!PayUtil.verifySign(datamap,key,sign)) {resultmap.put("returnCode", "Bad_Sign");resultmap.put("returnInfo", "簽名錯(cuò)誤");return resultmap;}//-----------------------step2 驗(yàn)證消息類(lèi)型 tradeType:query-------------------- if (!"query".equals(reqmap.get("tradeType"))) {resultmap.put("returnCode", "TradeType_Error");resultmap.put("returnInfo", "消息類(lèi)型不符");return resultmap;}//------------------------step3 驗(yàn)證傳參完整性----------------------------------//驗(yàn)證公共參數(shù)完整性if(!PayUtil.verifyParameter(datamap)) {resultmap.put("returnCode", "Common_Value_Error");resultmap.put("returnInfo", "缺少必要公共參數(shù)");return resultmap;}//驗(yàn)證接口參數(shù)完整性if(datamap.get("merOrderId").equals(" ")) {resultmap.put("returnCode", "Value_Error");resultmap.put("returnInfo", "缺少必要接口參數(shù)");return resultmap;}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();resultmap.put("returnCode", "System_Error");resultmap.put("returnInfo", "系統(tǒng)異常");return resultmap;}//------------------------step4 傳值并調(diào)用訂單查詢(xún)接口----------------------------------map.put("mid", datamap.get("mid")); //商戶(hù)號(hào)map.put("tid", datamap.get("tid")); //終端號(hào)map.put("instMid", datamap.get("instMid")); //機(jī)構(gòu)商戶(hù)號(hào)map.put("msgSrc", datamap.get("msgSrc")); //消息來(lái)源map.put("merOrderId", datamap.get("merOrderId")); //需查詢(xún)的商戶(hù)的訂單號(hào)//map.put("msgType", reqmap.get("tradeType")); //消息類(lèi)型 queryMap<String, Object> querymap = queryinfoserviceimpl.QueryInfo(map);logger.info("return querymap = " + querymap);//根據(jù)post返回碼,判斷是否接收銀聯(lián)網(wǎng)付響應(yīng)信息if(!"200".equals(querymap.get("statuscode"))) {resultmap.put("returnCode", "Union_Connect_Error");resultmap.put("returnInfo", "銀聯(lián)網(wǎng)付連接失敗");return resultmap;}//------------------------step5接口返回?cái)?shù)據(jù)----------------------------------if(querymap.get("errCode").equals("SUCCESS")) {Map<String,Object> resultdatamap = new HashMap<String,Object>(); //resultmap中data數(shù)據(jù)resultdatamap.put("errCode", querymap.get("errCode")); //平臺(tái)錯(cuò)誤碼resultdatamap.put("errMsg", querymap.get("errMsg")); //平臺(tái)錯(cuò)誤信息resultdatamap.put("status", querymap.get("status")); //交易狀態(tài)resultdatamap.put("totalAmount", querymap.get("totalAmount")); //支付總金額resultdatamap.put("targetOrderId", querymap.get("targetOrderId")); //第三方訂單號(hào)resultdatamap.put("targetSys", querymap.get("targetSys")); //目標(biāo)平臺(tái)代碼(第三方支付狀態(tài))resultdatamap.put("targetStatus", querymap.get("targetStatus")); //目標(biāo)平臺(tái)狀態(tài)resultdatamap.put("payTime", querymap.get("payTime")); //支付時(shí)間resultdatamap.put("messageType", querymap.get("msgType")); //消息類(lèi)型resultmap.put("data", resultdatamap);resultmap.put("returnCode", querymap.get("errCode")); //resultmap.put("returnInfo", querymap.get("errMsg"));return resultmap; }else{ //錯(cuò)誤返回信息resultmap.put("returnCode", querymap.get("errCode"));resultmap.put("returnInfo", querymap.get("errMsg"));return resultmap;} }}

1.2.2 queryinfoserviceimpl代碼

本部分代碼為銀聯(lián)商務(wù)支付下單查詢(xún)接口服務(wù)。

@Overridepublic Map<String, Object> QueryInfo(Map<String, Object> map) throws UnsupportedEncodingException {// TODO Auto-generated method stublogger.info("------------------unfiedquery--------------------------");Map<String, Object> reqmap = new HashMap<String, Object>(); //請(qǐng)求mapMap<String, Object> resp = new HashMap<String, Object>(); //響應(yīng)resp//reqmap.put("mid", this.mid); //內(nèi)部測(cè)試reqmap.put("mid", map.get("mid").toString()); //商戶(hù)號(hào)reqmap.put("tid", map.get("tid").toString()); //終端號(hào)reqmap.put("instMid", map.get("instMid").toString());reqmap.put("msgSrc", map.get("msgSrc").toString()); //消息來(lái)源reqmap.put("msgId", "UnionPay_F002"); //msgId,查詢(xún)接口reqmap.put("msgType", "query"); //消息類(lèi)型//報(bào)文請(qǐng)求時(shí)間String aligetTime = PayUtil.aligetTime();logger.info("請(qǐng)求時(shí)間aligetTime = " + aligetTime);reqmap.put("requestTimestamp", aligetTime); reqmap.put("merOrderId", map.get("merOrderId").toString()); //商戶(hù)訂單號(hào),前端傳入//生成待簽名字符串并進(jìn)行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); //請(qǐng)求map轉(zhuǎn)成jsonlogger.info("發(fā)送query post請(qǐng)求消息:" + jsonstring);//接收銀聯(lián)商務(wù)返回mapresp = unionpayrequest.dopost(UnionPayConstants.queryURL, jsonstring);return resp;}

其中,queryURL為請(qǐng)求銀聯(lián)商務(wù)地址:

https://qr-test2.chinaums.com/netpay-route-server/api/

1.3測(cè)試結(jié)果
本文對(duì)所寫(xiě)接口寫(xiě)了測(cè)試網(wǎng)頁(yè)進(jìn)行測(cè)試,如圖所示。

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。