關於建行龍支付的聚合支付微信,支付寶 對接PC和H5

資深CURD小白程式猿發表於2021-06-15

首先 專案是部署在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);
            }

        });

退款的目前還在研究中 研究出來了繼續更新。。。

需要轉載請給我發訊息

相關文章