工行聚合支付二维码扫码付对接流程及代码实现 您所在的位置:网站首页 扫二维码失败4-24 工行聚合支付二维码扫码付对接流程及代码实现

工行聚合支付二维码扫码付对接流程及代码实现

2024-06-03 15:13| 来源: 网络整理| 查看: 265

本文对接工行聚合支付二维码扫码支付接口,实现二维码生成(用户扫二维码支付)、二维码被扫(商户扫用户付款码)、支付查询、退款、退款查询、冲正的代码实现,首先下载工行聚合支付API文档,见链接“工行聚合支付二维码扫码支付”。开发者可以通过下载对应SDK进行学习使用,如图所示: 在这里插入图片描述 1.各个API对应请求地址

二维码生成:https://gw.open.icbc.com.cn/api/qrcode/V2/generate 此接口返回的二维码串为工商银行总行标准生成,非银联标准,建议商户将接口返回的字符串转化为二维码图片时使用业界通用的QR标准格式。 二维码退款:https://gw.open.icbc.com.cn/api/qrcode/V2/reject 二维码退款:https://gw.open.icbc.com.cn/api/qrcode/V2/reverse 二维码退款查询:https://gw.open.icbc.com.cn/api/qrcode/reject/query/V3 二维码被扫:https://gw.open.icbc.com.cn/api/qrcode/pay/V4 二维码查询:https://gw.open.icbc.com.cn/api/qrcode/query/V5 本接口由支付结果查询扩展为订单状态查询,含退款、冲正等情况,详细内容见响应参数pay_status描述。

2.代码实现: 下面列出各个接口的实现类,按照API文档上传对应参数即可,其中通用参数由申请开放平台时由平台分配。 其中request为请求工行聚合支付的请求参数枚举类(通用请求参数+请求参数); bizContent为请求参数枚举类。

@Service public class IcbcPayServiceImpl implements IcbcPayServiceInf { private final static Logger logger = LoggerFactory.getLogger(IcbcPayServiceImpl.class); /** * 工行聚合支付,获取二维码 */ @Override public Map generateQrcode(Map data) { // TODO Auto-generated method stub Map icbcpaymap = new HashMap(); Map strResult = new HashMap(); logger.info("IcbcPayServiceImpl generateQrcode = " + data); icbcpaymap = (Map) ICBCPayConstants.icbcConstantsmap.get(data.get("merchantId")); // DefaultIcbcClient client = new DefaultIcbcClient(IcbcPayConstants.AppId, // IcbcPayConstants.SIGN_TYPE_RSA2, // IcbcPayConstants.private_key, IcbcPayConstants.public_key); DefaultIcbcClient client = new DefaultIcbcClient((String) icbcpaymap.get("AppId"), (String) icbcpaymap.get("SIGN_TYPE_RSA2"), (String) icbcpaymap.get("private_key"), (String) icbcpaymap.get("public_key")); QrcodeGenerateRequestV2 request = new QrcodeGenerateRequestV2(); //工行聚合支付生成支付二维码请求(通用请求参数+请求参数)的枚举类 // request.setServiceUrl(IcbcPayConstants.generateQrcodeURL); request.setServiceUrl((String) icbcpaymap.get("generateQrcodeURL")); QrcodeGenerateRequestV2Biz bizContent = new QrcodeGenerateRequestV2Biz(); //工行聚合支付请求参数的枚举类 // bizContent.setMerId(IcbcPayConstants.Mer_ID);//商户线下档案编号(特约商户12位,特约部门15位) // bizContent.setStoreCode(IcbcPayConstants.Store_Code);//e生活档案编号 bizContent.setMerId((String) icbcpaymap.get("Mer_ID"));// 商户线下档案编号(特约商户12位,特约部门15位) bizContent.setStoreCode((String) icbcpaymap.get("Store_Code"));// e生活档案编号 bizContent.setOutTradeNo((String) data.get("fOrdertrace"));// 商户系统订单号 bizContent.setOrderAmt((String) data.get("settleAmt"));// 订单总金额,单位:分 bizContent.setTradeDate((String) data.get("fRegdate"));// 商户订单生成日期,格式:yyyyMMdd bizContent.setTradeTime((String) data.get("fRegtime"));// 商户订单生成时间,格式: HHmmss // bizContent.setAttach("");//该字段非必输项,商户附加数据,最多21个汉字字符,原样返回 bizContent.setPayExpire("280");// 二维码有效期,单位:秒,必须小于24小时,终端页面超时时间要比这个长,且没有返回按钮 // bizContent.setNotifyUrl("127.0.0.1");//该字段非必输项,商户接收支付成功通知消息URL,当notify_flag为1时必输 bizContent.setTporderCreateIp("127.0.0.1");// 商户订单生成的机器IP bizContent.setSpFlag("0");// 该字段非必输项,扫码后是否需要跳转分行,0:否,1:是;非1按0处理 bizContent.setNotifyFlag("0");// 商户是否开启通知接口 0-否;1-是;非1按0处理 request.setBizContent(bizContent); QrcodeGenerateResponseV2 response = new QrcodeGenerateResponseV2(); try { response = client.execute(request, "msgId"); if (response.isSuccess()) {// 成功 strResult.put("statuscode", response.getReturnCode() + ""); strResult.put("QrCodeData", response.getQrcode() + ""); logger.info("icbc generateQrcode isSuccess ReturnCode = "+response.getReturnCode()); logger.info("icbc generateQrcode isSuccess ReturnMsg = "+response.getReturnMsg()); } else {// 失败 strResult.put("statuscode", response.getReturnCode() + ""); logger.info("icbc generateQrcode notSuccess ReturnCode = "+response.getReturnCode()); logger.info("icbc generateQrcode notSuccess ReturnMsg = "+response.getReturnMsg()); } } catch (Exception e) { e.printStackTrace(); strResult.put("statuscode", "999"); } logger.info("generateQrcode resp = " + strResult); return strResult; } /** * 工行聚合支付,商户扫描用户二维码 */ @Override public Map scanPay(Map data) { // TODO Auto-generated method stub Map icbcpaymap = new HashMap(); Map strResult = new HashMap(); logger.info("IcbcPayServiceImpl scanPay = " + data); icbcpaymap = (Map) ICBCPayConstants.icbcConstantsmap.get(data.get("merchantId")); // DefaultIcbcClient client = new DefaultIcbcClient(IcbcPayConstants.AppId, // IcbcPayConstants.SIGN_TYPE_RSA2, // IcbcPayConstants.private_key, IcbcPayConstants.public_key); DefaultIcbcClient client = new DefaultIcbcClient((String) icbcpaymap.get("AppId"), (String) icbcpaymap.get("SIGN_TYPE_RSA2"), (String) icbcpaymap.get("private_key"), (String) icbcpaymap.get("public_key")); QrcodePayRequestV2 request = new QrcodePayRequestV2(); // request.setServiceUrl(IcbcPayConstants.scanPayURL); logger.info("scanPayURL = " + (String) icbcpaymap.get("scanPayURL")); request.setServiceUrl((String) icbcpaymap.get("scanPayURL")); QrcodePayRequestV2Biz bizContent = new QrcodePayRequestV2Biz(); bizContent.setQrCode((String) data.get("thirdAuthCode"));// 商户扫描上送,客户的付款码 // bizContent.setMerId(IcbcPayConstants.Mer_ID); bizContent.setMerId((String) icbcpaymap.get("Mer_ID"));// 商户线下档案编号(特约商户12位,特约部门15位) bizContent.setOutTradeNo((String) data.get("fOrdertrace"));// 商户系统订单号 bizContent.setOrderAmt((String) data.get("settleAmt")); bizContent.setTradeDate((String) data.get("fRegdate")); bizContent.setTradeTime((String) data.get("fRegtime")); request.setBizContent(bizContent); QrcodePayResponseV2 response; try { response = client.execute(request, "msgId"); if (response.isSuccess()) {// 成功 strResult.put("statuscode", response.getReturnCode() + ""); strResult.put("pay_status", response.getPayStatus() + "");// 交易结果标志,-1:下单失败,0:支付中,1:支付成功,2:支付失败 logger.info("icbc scanPay isSuccess ReturnCode = "+response.getReturnCode()); logger.info("icbc scanPay isSuccess pay_status = "+response.getPayStatus()); logger.info("icbc scanPay isSuccess ReturnMsg = "+response.getReturnMsg()); } else {// 失败 strResult.put("statuscode", response.getReturnCode() + ""); logger.info("icbc scanPay notSuccess ReturnCode = "+response.getReturnCode()); logger.info("icbc scanPay notSuccess pay_status = "+response.getPayStatus()); logger.info("icbc scanPay notSuccess ReturnMsg = "+response.getReturnMsg()); } } catch (Exception e) { e.printStackTrace(); strResult.put("statuscode", "999"); } logger.info("scanPay resp = " + strResult); return strResult; } /** * 工行聚合支付,查询支付结果 */ @Override public Map queryPayResult(Map data) { // TODO Auto-generated method stub Map icbcpaymap = new HashMap(); Map strResult = new HashMap(); logger.info("IcbcPayServiceImpl queryPayResult = " + data); icbcpaymap = (Map) ICBCPayConstants.icbcConstantsmap.get(data.get("merchantId")); // DefaultIcbcClient client = new DefaultIcbcClient(IcbcPayConstants.AppId, // IcbcPayConstants.SIGN_TYPE_RSA2, // IcbcPayConstants.private_key, IcbcPayConstants.public_key); DefaultIcbcClient client = new DefaultIcbcClient((String) icbcpaymap.get("AppId"), (String) icbcpaymap.get("SIGN_TYPE_RSA2"), (String) icbcpaymap.get("private_key"), (String) icbcpaymap.get("public_key")); QrcodeQueryRequestV2 request = new QrcodeQueryRequestV2(); // request.setServiceUrl(IcbcPayConstants.queryPayResultURL); request.setServiceUrl((String) icbcpaymap.get("queryPayResultURL")); QrcodeQueryRequestV2Biz bizContent = new QrcodeQueryRequestV2Biz(); // bizContent.setMerId(IcbcPayConstants.Mer_ID); bizContent.setMerId((String) icbcpaymap.get("Mer_ID"));// 商户线下档案编号(特约商户12位,特约部门15位) // bizContent.setCustId("1076dAbpBsrJXpI4J+/HXthaHj+mORib");//该字段非必输项 bizContent.setOutTradeNo((String) data.get("orderId"));// 该字段非必输项,out_trade_no和order_id选一项上送即可,商户系统订单号 // bizContent.setOrderId("020002040095201802202148775");//该字段非必输项,out_trade_no和order_id选一项上送即可,行内系统订单号 request.setBizContent(bizContent); QrcodeQueryResponseV2 response; try { response = client.execute(request, "msgId"); if (response.isSuccess()) {// 成功 strResult.put("statuscode", response.getReturnCode() + ""); strResult.put("PayStatus", response.getPayStatus() + "");// 交易结果标志,0:支付中,1:支付成功,2:支付失败 logger.info("icbc queryPayResult isSuccess ReturnCode = "+response.getReturnCode()); logger.info("icbc queryPayResult isSuccess ReturnMsg = "+response.getReturnMsg()); } else {// 失败 strResult.put("statuscode", response.getReturnCode() + ""); logger.info("icbc queryPayResult notSuccess ReturnCode = "+response.getReturnCode()); logger.info("icbc queryPayResult notSuccess ReturnMsg = "+response.getReturnMsg()); } } catch (Exception e) { e.printStackTrace(); strResult.put("statuscode", "999"); } logger.info("queryPayResult resp = " + strResult); return strResult; } /** * 二维码退款 */ @Override public Map payReject(Map data) { // TODO Auto-generated method stub Map icbcpaymap = new HashMap(); Map strResult = new HashMap(); logger.info("IcbcPayServiceImpl payReject = " + data); icbcpaymap = (Map) ICBCPayConstants.icbcConstantsmap.get(data.get("merchantId")); // DefaultIcbcClient client = new DefaultIcbcClient(IcbcPayConstants.AppId, // IcbcPayConstants.SIGN_TYPE_RSA2, // IcbcPayConstants.private_key, IcbcPayConstants.public_key); DefaultIcbcClient client = new DefaultIcbcClient((String) icbcpaymap.get("AppId"), (String) icbcpaymap.get("SIGN_TYPE_RSA2"), (String) icbcpaymap.get("private_key"), (String) icbcpaymap.get("public_key")); QrcodeRejectRequestV2 request = new QrcodeRejectRequestV2(); // request.setServiceUrl(IcbcPayConstants.payRejectURL); request.setServiceUrl((String) icbcpaymap.get("payRejectURL")); QrcodeRejectRequestV2Biz bizContent = new QrcodeRejectRequestV2Biz(); // bizContent.setMerId(IcbcPayConstants.Mer_ID); bizContent.setMerId((String) icbcpaymap.get("Mer_ID"));// 商户线下档案编号(特约商户12位,特约部门15位) // bizContent.setCustId("1076dAbpBsrJXpI4J+/HXthaHj+mORib");//该字段非必输项 bizContent.setOutTradeNo((String) data.get("orderId"));// 该字段非必输项,out_trade_no和order_id选一项上送即可 // bizContent.setOrderId("020001515151201701030000001");//该字段非必输项,out_trade_no和order_id选一项上送即可 bizContent.setRejectNo((String) data.get("fOrdertrace")); bizContent.setRejectAmt((String) data.get("refundAmt")); // bizContent.setOperId("X000000001");//该字段非必输项,操作人员ID request.setBizContent(bizContent); QrcodeRejectResponseV2 response; try { response = client.execute(request, "msgId"); if (response.isSuccess()) {// 成功 strResult.put("statuscode", response.getReturnCode() + ""); logger.info("icbc payReject isSuccess ReturnCode = "+response.getReturnCode()); logger.info("icbc payReject isSuccess ReturnMsg = "+response.getReturnMsg()); } else {// 失败 strResult.put("statuscode", response.getReturnCode() + ""); logger.info("icbc payReject notSuccess ReturnCode = "+response.getReturnCode()); logger.info("icbc payReject notSuccess ReturnMsg = "+response.getReturnMsg()); } } catch (Exception e) { e.printStackTrace(); strResult.put("statuscode", "999"); } logger.info("payReject resp = " + strResult); return strResult; } /** * 二维码冲正 */ @Override public Map payReverse(Map data) { // TODO Auto-generated method stub return null; } /** * 二维码退款查询 */ @Override public Map queryRejectResult(Map data) { // TODO Auto-generated method stub Map icbcpaymap = new HashMap(); Map strResult = new HashMap(); logger.info("queryRejectResult payReject = " + data); icbcpaymap = (Map) ICBCPayConstants.icbcConstantsmap.get(data.get("merchantId")); // DefaultIcbcClient client = new DefaultIcbcClient(IcbcPayConstants.AppId, // IcbcPayConstants.SIGN_TYPE_RSA2, // IcbcPayConstants.private_key, IcbcPayConstants.public_key); DefaultIcbcClient client = new DefaultIcbcClient((String) icbcpaymap.get("AppId"), (String) icbcpaymap.get("SIGN_TYPE_RSA2"), (String) icbcpaymap.get("private_key"), (String) icbcpaymap.get("public_key")); QrcodeRejectQueryRequestV3 request = new QrcodeRejectQueryRequestV3(); // request.setServiceUrl(IcbcPayConstants.queryRejectResultURL); request.setServiceUrl((String) icbcpaymap.get("queryRejectResultURL")); QrcodeRejectQueryRequestV3Biz bizContent = new QrcodeRejectQueryRequestV3Biz(); // bizContent.setMerId(IcbcPayConstants.Mer_ID); bizContent.setMerId((String) icbcpaymap.get("Mer_ID"));// 商户线下档案编号(特约商户12位,特约部门15位) // bizContent.setCustId("1076dAbpBsrJXpI4J+/HXthaHj+mORib");//该字段非必输项 bizContent.setOutTradeNo((String) data.get("orderId")); // bizContent.setOrderId("020001515151201701030000001"); bizContent.setRejectNo((String) data.get("refundorderId")); request.setBizContent(bizContent); QrcodeRejectQueryResponseV3 response; try { response = client.execute(request, "msgId"); if (response.isSuccess()) {// 成功 strResult.put("statuscode", response.getReturnCode() + ""); strResult.put("refund_json_list", response.getRefundJsonList()); logger.info("icbc queryRejectResult isSuccess ReturnCode = "+response.getReturnCode()); logger.info("icbc queryRejectResult isSuccess ReturnMsg = "+response.getReturnMsg()); } else {// 失败 strResult.put("statuscode", response.getReturnCode() + ""); logger.info("icbc queryRejectResult notSuccess ReturnCode = "+response.getReturnCode()); logger.info("icbc queryRejectResult notSuccess ReturnMsg = "+response.getReturnMsg()); } } catch (Exception e) { e.printStackTrace(); strResult.put("statuscode", "999"); } logger.info("queryRejectResult resp = " + strResult); return strResult; } } ```


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有