标签:data match lower redis start 扫码 二维码生成 ram 遇到
首先 项目是部署在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); } });
退款的目前还在研究中 研究出来了继续更新。。。
需要转载请给我发消息
标签:data match lower redis start 扫码 二维码生成 ram 遇到
原文地址:https://www.cnblogs.com/zqdf/p/14887139.html