[Day 13] - 初探永丰银行线上收款API - 丰收款 - 取得Nonce

取得Nonce

根据规格书的说明,每次呼叫api前都要先取得Nonce

https://ithelp.ithome.com.tw/upload/images/20210927/20128973vAyE4ogwQO.png

要取得Nonce也满简单的,就是以POST方法传送你的ShopNo(当初报名取得api後有另外寄信提供)
https://ithelp.ithome.com.tw/upload/images/20210927/201289735tqODh9ocp.png

程序的部分我想要以OkHttp来进行连线

加dependcy

		<dependency>
    		<groupId>com.squareup.okhttp3</groupId>
    		<artifactId>okhttp</artifactId>
    		<version>4.9.0</version>
		</dependency>	

之前用的都是apache的Httpclient,这次来用用看OkHttp

建立一个HttpUtil的工具类别

import java.io.IOException;

import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public class HttpUtil {
    
    public static final MediaType JSON
    = MediaType.get("application/json; charset=utf-8");

	OkHttpClient client = new OkHttpClient();

	String post(String url, String json) throws IOException {
	  RequestBody body = RequestBody.create(json,JSON);
	  Request request = new Request.Builder()
		  .url(url)
		  .post(body)
		  .build();
	  try (Response response = client.newCall(request).execute()) {
		return response.body().string();
	  }
	}
}

先建一个post的方法,其他要用到什麽可以之後再补
参考来源okhttp的范例

接着在我的专案的Application.java

加入以下bean做个小测试

@Bean
CommandLineRunner runner(UserRepo userDao){
    return args -> {

        HttpUtil util = new HttpUtil();
        Map<String,String> map = new HashMap<String,String>();
        map.put("ShopNo", "BA0026_001");
        String json =new ObjectMapper().writeValueAsString(map);

        String res=util.post("https://sandbox.sinopac.com/QPay.WebAPI/api/Nonce", json);
        System.out.println(res);

    };
}

执行时遇到了
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target的错误,也是java开发者常常遇到的Exception

https://ithelp.ithome.com.tw/upload/images/20210929/20128973SFrtNJ3dtU.png

这是因为我们的jdk的凭证库没有汇入这个我们要连线的网址的凭证,导致连线失败
解决方法也很简单,用chrome连线,点锁头下载.der格式的凭证
https://ithelp.ithome.com.tw/upload/images/20210929/20128973Y7lmVvYQEX.png
只要把凭证汇入jdk中的凭证库就行了
在测试环境我会直接以root凭证汇入,一来时效较长、二来只要是由同个机构签发凭证的网站就也不用再重汇,比较方便

在你目前使用的jdk的bin会有个keytool,
以cmd下指令:

D:\java\jdk-11.0.11\bin>keytool -importcert -file C:\Users\user\Downloads\twca.cer -keystore D:\java\jdk-11.0.11\lib\security/cacerts -alias TWCA_ROOT

输入密码(预设是changeit)後按y确认

https://ithelp.ithome.com.tw/upload/images/20210929/20128973koTGe8yuOw.png
就完成了

再试一次就成功罗
https://ithelp.ithome.com.tw/upload/images/20210929/20128973oAWJPmwcAl.png

程序实作的部分我合并写在
[Day 15] - 初探永丰银行线上收款API - 丰收款 - HASH ID计算(2) +IV计算


<<:  [day-13] Python 内建的数值类函式

>>:  Leetcode: 1315. Sum of Nodes with Even-Valued Grandparent

D-01-总结 ? dotnetcore

最後一天 终於来到30天的最後一天,不过今天不跟大家分享关於dotnetcore的部分,今天就针对这...

Day 19 : 建立新的Jenkins任务并与Github连结

Jenkins任务 今天来建立一个新的Jenkins任务,Jenkins的标准任务流程如下,我们在本...

Explain详解(优化查询好帮手)-Part2(possible_keys、key、key_len、ref、rows、filtered、Extra、Json格式的执行计画)

此篇为前篇的延续唷! 方便阅读再贴一次基本的explain及测试表 mysql> explai...

第 55 天 - 帐号管理 - 新增,简单查看

今天进度 : 鸟哥的 Linux 私房菜 -- 第 10 堂课:使用者管理与 ACL 权限设定 尝试...

[Day 26] BDD - 组合技

组合技 Drone + godog + Mattermost 当有需求要在k8s上透过drone定期...