关于建行龙支付的聚合支付微信,支付宝 对接PC和H5

时间:2021-06-16 17:44:58   收藏:0   阅读:0

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

        });

退款的目前还在研究中 研究出来了继续更新。。。

需要转载请给我发消息

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!