java对接银联商务扫码支付(银联商务扫码支付文档)

java实现银联商务扫码支付----根据银联商务扫码支付文档

新增加GitHub源码下载地址(下载导入本地即可使用,由于隐私需要,屏蔽了相关密钥、密码之类):https://github.com/wshy0924/UnionPay_Scan/tree/master(老铁别忘记留个星星~感谢!)
一、本文对接银联商务扫码支付文档,文档链接:
https://download.csdn.net/download/weixin_40550118/12113039
本文根据扫码支付文档接口,之前博客中也写过一篇关于银联商务扫码支付的案例,对接的是银联商务的公众号+服务窗支付文档,获取的url支付链接是自己封装之后生成,也可以进行扫码支付。
这篇文档是对接银联商务扫码支付文档,只需做简单的做参数传值,就可以简单的获取支付二维码,与我之前的扫码支付有一点区别:
之前的方式需要选择支付方式,比如支付宝微信,然后生成相对应的支付二维码,而本篇的方式是一码,两个app都可以扫码,由扫码文档可知,是根据先扫码的那一方判断支付,下面是文档中的描述:
在这里插入图片描述
直接看代码如下:
1.1 Union_ScanPayContrloloer控制层代码

 /**
  * a获取一次性二维码
  * @param request
  * @param response
  * @param jsonreq
  * @return
  * @throws UnsupportedEncodingException 
  */
 @RequestMapping(value = "/onceQRCode.do", method = RequestMethod.GET)
 public Map<String, Object> getOnceQRCode(HttpServletRequest request, HttpServletResponse response,
   String totalAmount) throws UnsupportedEncodingException {
   Map<String,Object> resultmap = new HashMap<String,Object>();
   //Map<String,Object> reqmap = new HashMap<String,Object>();
   resultmap = scan_unionPay.Scan_UnifiedOrder(totalAmount);
    return resultmap;
 }

1.2 Scan_UnionPayimpl

@Service
public class Scan_UnionPayimpl implements Union_ScanPayinf{
 private final static Logger logger = LoggerFactory.getLogger(UnifiedOrderServiceimpl.class);
 @Value("${para.mid}")
 private String mid;
 @Value("${para.tid}")
 private String tid;
 
 @Value("${para.instMid}")
 private String instMid;
 
 @Value("${para.msgSrc}")
 private String msgSrc;
 
 @Value("${para.msgSrcId}")
 private String msgSrcId;
 @Autowired
 private UnionPayRequest unionpayrequest;
 /**
 * 获取支付二维码
 */
 @Override
 public Map<String, Object> Scan_UnifiedOrder(String totalAmount) throws UnsupportedEncodingException {
  // TODO Auto-generated method stub
  Map<String, Object> reqmap = new HashMap<String, Object>(); //请求银联商务map
  Map<String, Object> respmap = new HashMap<String, Object>(); //接收银联商务返回map
  reqmap.put("mid",this.mid);    //商户号
  reqmap.put("tid", this.tid);   //终端号
  reqmap.put("instMid", this.instMid);
  reqmap.put("msgSrc", this.msgSrc);   //消息来源
  //reqmap.put("msgId", "UnionPay_F001");  //自定义
  reqmap.put("msgType", "bills.getQRCode"); //支付类型,前端传入
//报文请求时间
  String aligetTime = PayUtil.aligetTime();
  logger.info("end_time = " + aligetTime);
  reqmap.put("requestTimestamp", aligetTime); 
  
  //商户订单号
  //reqmap.put("msgSrcId", this.msgSrcId); //来源编号
  String orderid = GGitUtil.createOrderID();
  StringBuffer buff = new StringBuffer(); 
  buff.append(this.msgSrcId);
  buff.append(orderid);
  reqmap.put("billNo", buff);
  
  reqmap.put("totalAmount",totalAmount); //订单金额
  reqmap.put("notifyUrl", "http://www.baidu.com"); //支付结果通知地址
  reqmap.put("returnUrl", "http://www.baidu.com"); //网页跳转地址

//获取二维码id
  String codeid = GGitUtil.createQrCodeId();
  StringBuffer codebuff = new StringBuffer();
  codebuff.append(this.msgSrcId);
  codebuff.append(codeid);
  reqmap.put("qrCodeId", codebuff);
//生成待签名字符串并进行MD5加密
  String builderSignStr = "";
  try {
     builderSignStr = PayUtil.builderSignStr(reqmap,UnionPayConstants.MD5KEY);
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  reqmap.put("sign", builderSignStr);
  logger.info("reqmap= " + reqmap);
  String jsonstring = GGitUtil.MapToJson2(reqmap);  //请求map转成json
  logger.info("发送query post请求消息:" + jsonstring);
//接收银联商务返回map
  respmap = unionpayrequest.dopost(UnionPayConstants.queryURL, jsonstring);
  return respmap;
 }

1.3测试结果
本次接口对接仅仅是对接接口中生成一次性支付二维码,其中还有固定二维码和半固定二维码生成,只是传递参数的不同,具体的封装见之后的总结,返回的map如下图示,其中billQRCode为二维码链接,前端接收这个链接转为二维码即可,用户扫描二维码进行支付测试。

{
 "qrCodeId": "3194202001190900110874327",
 "msgType": "bills.getQRCode",
 "msgSrc": "WWW.TEST.COM",
 "errMsg": "查询二维码成功",
 "mid": "898340149000005",
 "billDate": "2020-01-19",
 "tid": "88880001",
 "instMid": "QRPAYDEFAULT",
 "responseTimestamp": "2020-01-19 09:00:19",
 "errCode": "SUCCESS",
 "billNo": "319420200119090011443764",
 "billQRCode": "https://qr-test2.chinaums.com/bills/qrCode.do?id=3194202001190900110874327",
 "sign": "C8A598A6523A516FBA7E908050D279D8",
 "statuscode": "200"
}
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值