2021年调用工商二维码生成接口及回调接口demo

 

2021年 要对接工商银行二维码生成接口 里面包含一个回调的接口  这里只是一个简单的demo

 

需求

对接工商银行二维码生成二维码支付 , 支付成功后工商银行调用回调接口 响应支付成功信息

特别说明

    回调接口要配置在生成二维码接口中

    回调接口要在服务里面写

 

整体操作流程

a.熟悉工商二维码生成接口文档和demo

 

b.编写二维码生成接口测试类 问项目上的人要一些固定的参数appid 私钥 公钥...   工商二维码生成接口需要配置  开启通知 和 回调的接口url (也可以不配置等回调接口写好配置进来)

工商二维码生成接口需要配置  开启通知 和 回调的接口url  代码如下

 

 

c.编写代码回调接口 在你的服务里面写代码

使用第三方工具映射url地址 就是内网穿透  局域网映射到公网

这里使用   https://natapp.cn/      注册 登录 开通隧道(购买0元)   配置映射端口号 

 

下载对应版本的客户端  这里使用的是window 64的客户端

将authtoken值复制到cmd窗口回车自动映射成功

 

 

http://gdjdmc.natappfree.cc   ---映射为->127.0.01:8082

测试使用的完整的请求路径是http://gdjdmc.natappfree.cc/qrGenerateController/callBlack

 开启回调接口所在的服务 局域网请求 和 外网请求都能访问回调接口

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.工行API在线文档地址地址 ---->https://open.icbc.com.cn/icbc/apip/api_list.html

 

工商二维码生成接口文档  搜素关键字如下 二维码生成

 

 这里使用的是第二个

 

 点击蓝色字体进入文档内容

 2.相应Demo开发包 地址---->https://open.icbc.com.cn/icbc/apip/docs_sdk&demo.html 根据自己要对接的接口找到对应的demo

 

但是你懂得demo的例子也不是很全 这里的二维码生成的回调接口就没有例子

 

 

3.编写二维码生成接口 文档的参数需要根据自己的项目实际配置

下面使用main方法调用二维码生成接口

需要使用工商的jar和大名鼎鼎的hutool            pom.xml引入

        <dependency>
            <groupId>com.jdd.icbc</groupId>
            <artifactId>icbc-server-service</artifactId>
            <version>2.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.icbc</groupId>
            <artifactId>icbc-api-sdk-cop</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.icbc</groupId>
            <artifactId>icbc-api-sdk-cop-io</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.icbc</groupId>
            <artifactId>hsm-software-share</artifactId>
            <version>1.0.3</version>
        </dependency>
        <dependency>
            <groupId>com.icbc</groupId>
            <artifactId>ocr-api</artifactId>
            <version>1.0.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>4.5.16</version>
        </dependency>    

 二维码生成接口测试类

在这里有个坑  请看 https://www.cnblogs.com/wf-zhang/p/14772864.html

public class QrGenerateTest {

    public static void main(String[] args) {
        
        String appId = "APP的编号,应用在API开放平台注册时生成";
        String privateKey = "私钥";
        String icbcPulicKey = "公钥";
        
        DefaultIcbcClient client = new DefaultIcbcClient(appId,privateKey,icbcPulicKey);
        CardbusinessQrcodeQrgenerateRequestV1 request = new CardbusinessQrcodeQrgenerateRequestV1();

        //正式环境  这里的url地址使用8 请求示例中的
        request.setServiceUrl("https://gw.open.icbc.com.cn/api/qrcode/V2/generate");
        CardbusinessQrcodeQrgenerateRequestV1.CardbusinessQrcodeQrgenerateRequestV1Biz bizContent = new
                CardbusinessQrcodeQrgenerateRequestV1.CardbusinessQrcodeQrgenerateRequestV1Biz();
        request.setBizContent(bizContent);

        bizContent.setMerId("1********9");  // 商户线下档案编号(特约商户12位,特约部门15位)
        bizContent.setStoreCode("0*******7");  // e生活档案编号
        bizContent.setOutTradeNo("ZHL777O15002096"); // 商户系统订单号 ZHL777O15002039
        //bizContent.setOutTradeNo(UUID.randomUUID().toString().replace("-",""));
        bizContent.setOrderAmt("1");   // 订单总金额,单位:分
        bizContent.setTradeDate(DateUtil.format(DateUtil.date(), "yyyyMMdd"));  // 商户订单生成日期,格式:yyyyMMdd
        bizContent.setTradeTime(DateUtil.format(DateUtil.date(), "HHmmss"));  // 商户订单生成时间,格式:HHmmss
        bizContent.setTporderCreateIp("127.0.0.1");    // 商户订单生成的机器IP
        bizContent.setNotifyFlag("1");  // 商户是否开启通知接口,0-否;1-是;非1按0处理
        bizContent.setPayExpire("1200");   // 二维码有效期,单位:秒,必须小于24小时
        String myURL ="http://gdjdmc.natappfree.cc/qrGenerateController/callBlack";//映射后的公网地址
        bizContent.setNotifyUrl(myURL);//回调接口url
        bizContent.setSpFlag("0");
        bizContent.setAttach("abcdefg");

        CardbusinessQrcodeQrgenerateResponseV1 response;

        try {
            response = client.execute(request, System.currentTimeMillis() + "");//msgId消息通讯唯一编号,要求每次调用独立生成,APP级唯一
            if (response.getReturnCode() == 0) {
                // 6、业务成功处理,请根据接口文档用response.getxxx()获取同步返回的业务数据
                System.out.println("ReturnCode:" + response.getReturnCode());
                System.out.println("response:" + JSON.toJSONString(response));
                System.out.println("工行二维码链接为:"+response.getQrcode());
            } else {
                // 失败
                System.out.println("response:" + JSON.toJSONString(response));
                System.out.println("ReturnCode:" + response.getReturnCode());
                System.out.println("ReturnMsg:" + response.getReturnMsg());
            }
        } catch (IcbcApiException e) {
            e.printStackTrace();
        }
    }
}

在服务里编写回调接口

@RestController
@RequestMapping("/qrGenerateController")
public class QrGenerateCallBlackController {

   

    @PostMapping("/callBlack")
    public void callBlack(HttpServletRequest request, HttpServletResponse response){
       
        System.out.println("=========================>开始扫码支付回调");
        // 参数Map
        Map properties = request.getParameterMap();
        // 返回值Map
        Map returnMap = new HashMap();
        Iterator entries = properties.entrySet().iterator();
        Map.Entry entry;
        String name = "";
        String value = "";
        while (entries.hasNext()) {
            entry = (Map.Entry) entries.next();
            name = (String) entry.getKey();
            Object valueObj = entry.getValue();
            if (null == valueObj) {
                value = "";
            } else if (valueObj instanceof String[]) {
                String[] values = (String[]) valueObj;
                for (int i = 0; i < values.length; i++) {
                    value = values[i] + ",";
                }
                value = value.substring(0, value.length() - 1);
            } else {
                value = valueObj.toString();
            }
            System.out.println("扫码支付回调参数:" + name + ":" + value);
         
            returnMap.put(name, value);
       } System.out.println(
"=========================>扫码支付回调结束"); } }

 

 

测试流程

    特别说明

        回调接口服务一直开启,内网穿透已经映射

    11 调用二维码生成接口 这里是main方法运行 里面配置了回调的接口地址------>  映射后的公网地址

               111 扫码支付成功后,工商银行会调用回调接口

     1111 回调接口拿到工商响应的信息   进行业务处理  这里只是打印出来响应的参数

 

测试运行 二维码生成接口测试类

结果如下  如文档所说的ReturnCode 是0 就是调用成功

 

 

 生成二维码   将二维码串复制到工具里生成  我这里使用的FeHelper    还有草料二维码  https://cli.im/ 用法一样

 

 

 

手机扫码 微信扫码会显示微信支付  支付宝扫码会显示支付宝支付

 

 

 

支付成功后工商银行会调用回调接口

最后响应结果是 success 

 附上工商银行回调的参数

 

posted @ 2021-05-18 11:21  wf.zhang  阅读(2260)  评论(4编辑  收藏  举报