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

附上工商銀行回調的參數

