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 

 附上工商銀行回調的參數

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM