首先 專案是部署在Linux伺服器中 伺服器環境對於支付來說沒有區別 現在就說下對接
首先是文件,建行的文件一言難盡,雖然最後還是看文件接出來的
然後 遇到的各種問題在網站上也沒找到什麼答案 自己摸索了幾天才弄得七七八八
廢話不多說 直接上程式碼
public final String MERCHANTID="";//商戶程式碼 public final String POSID="";//商戶櫃檯程式碼 public final String BRANCHID="";//分行程式碼 public final String PUB32TR2="";//金鑰 /** * * @param id * @param type 0pc 1h5 * @return */ @RequestMapping("/juhepay") public ApiResult juhepay(String id,int type){ OrderInfo order = orderService.getOrderInfo(id, null); UserInfo u = userService.getUserById(order.getUser_id()); if(order.getOrder_status()>0){ return ApiResultHelper.error("訂單已支付"); } Object qurl = redisService.get(order.getOrder_no()); if(!StrUtil.isEmptyIfStr(qurl)){ return ApiResultHelper.success(qurl.toString()); } String bankURL="https://ibsbjstar.ccb.com.cn/CCBIS/ccbMain"; String ORDERID = order.getOrder_no();//訂單號 //String PAYMENT= order.getPrice().toString();//訂單金額 String PAYMENT= "0.01";//訂單金額 String REMARK1 = ""; String REMARK2 = ""; String TXCODE="530550";//交易碼 String CURCODE="01";//幣種
//狀態 0或空:返回二維碼頁面,只支援建行龍支付;1:返回JSON格式【二維碼資訊串】,只支援建行龍支付
//2:返回聚合掃碼二維碼頁面;3:返回聚合掃碼JSON格式【二維碼資訊串】 聚合掃碼只能上送2或3
String RETURNTYPE="3";
String TIMEOUT = ""; StringBuffer tmp = new StringBuffer(); //驗簽欄位 tmp.append("MERCHANTID=").append(MERCHANTID); tmp.append("&POSID=").append(POSID); tmp.append("&BRANCHID=").append(BRANCHID); tmp.append("&ORDERID=").append(ORDERID); tmp.append("&PAYMENT=").append(PAYMENT); tmp.append("&CURCODE=").append(CURCODE); tmp.append("&TXCODE=").append(TXCODE); tmp.append("&REMARK1=").append(REMARK1); tmp.append("&REMARK2=").append(REMARK2); tmp.append("&RETURNTYPE=").append(RETURNTYPE); tmp.append("&TIMEOUT=").append(TIMEOUT); tmp.append("&PUB=").append(PUB32TR2); Map<String,String> map = new HashMap<>(); map.put("CCB_IBSVersion","V6");//必輸項 map.put("MERCHANTID",MERCHANTID); map.put("BRANCHID",BRANCHID); map.put("POSID",POSID); map.put("ORDERID",ORDERID); map.put("PAYMENT",PAYMENT); map.put("CURCODE",CURCODE); map.put("TXCODE",TXCODE); map.put("REMARK1",REMARK1); map.put("REMARK2",REMARK2); map.put("RETURNTYPE",RETURNTYPE); map.put("TIMEOUT",TIMEOUT); map.put("MAC",Md5Util.md5Str(tmp.toString())); String ret = HttpClientUtil.httpPost(bankURL, map); //請求二維碼生成連結串 Gson gson = new Gson(); QrURLDemo payUrl = (QrURLDemo) gson.fromJson(ret, QrURLDemo.class); if(type==1){//H5支付直接返回這個路徑就好可以瀏覽器會自動跳轉支付 return ApiResultHelper.success(payUrl.getPAYURL()); } if(!StrUtil.isEmptyIfStr(payUrl) && "true".equals(payUrl.getSUCCESS())){ ret = HttpClientUtil.httpGet(payUrl.getPAYURL(), "UTF-8"); //獲取二維碼串 QrURLDemo qrurl = (QrURLDemo) gson.fromJson(ret, QrURLDemo.class); if("true".equals(qrurl.getSUCCESS())){ String url = ""; try {//pc的就需要返回下面這個 url = java.net.URLDecoder.decode(qrurl.getQRURL(), "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } redisService.setByTime(order.getOrder_no(), url, 10*60); return ApiResultHelper.success(url); }else{ return ApiResultHelper.error("二維碼生成失敗,請重新整理後重試"); } }else{ return ApiResultHelper.error("二維碼獲取失敗,請重新整理後重試"); } }
//回撥路徑需要在建行網站上設定
@RequestMapping("/pay_back")
public String pay_back(HttpServletRequest request,String POSID,String BRANCHID,String ORDERID,String PAYMENT,String CURCODE,
String REMARK1,String REMARK2,String SUCCESS,String SIGN) {
LogUtil.e("BRANCHID="+BRANCHID+",POSID="+POSID+",ORDERID="+ORDERID+",PAYMENT="+PAYMENT+",CURCODE="+CURCODE+",REMARK1="+REMARK1+",REMARK2="+REMARK2+",SUCCESS="+SUCCESS+",SIGN="+SIGN);
return "SUCCESS";
}
<div class="sq" id="qrcode"></div>
//這塊是pc生成二維碼的方式 用的是qrcode.js生成
$.ajax("/pay/juhepay", data, function(res) {
var qrcodetwo = new QRCode("qrcode", {
render: "table", //table方式
width: 186,
height: 186,
text: res.msg //返回的路徑
});
});
H5支付的目前不知道該如何跳轉到建行龍支付 不過對應的微信和支付寶跳轉是可以的
//微信 $.ajax("/pay/juhepay", data, function(res) { var ua = navigator.userAgent.toLowerCase(); if (ua.match(/MicroMessenger/i) != "micromessenger") { window.location.href = 'weixin://'+res.msg; }else{ $.qr.a(res.msg);//路徑 } }); //支付寶 $.ajax("/pay/juhepay", data, function(res) { var ua = navigator.userAgent.toLowerCase(); if(ua.match(/Alipay/i)=="alipay"){ $.qr.a(res.msg); }else{ window.location.href = 'alipays://platformapi/startapp?appId=20000067&url='+escape(res.msg); } });
退款的目前還在研究中 研究出來了繼續更新。。。
需要轉載請給我發訊息