Dwolla java编码之获取令牌

美国流行的第三方支付dwolla,支持所有美国的主流银行。

对接Dwolla的第一步就是要获取注册应用的访问令牌。之后的每个接口都需要该令牌

由于 dwolla-swagger-java 这个库三年前由于开发团队缺少维护,所以从Dwolla的支持库里删除了,这给用java对接的人员带来了不小的麻烦。比如今天要说的获取令牌这一步。

首先注册一个沙盒账号用于测试,

接下来按照官方提供的接口说明,需要这些参数

POST https://api-sandbox.dwolla.com/token
Content-Type: application/x-www-form-urlencoded
Authorization: Basic base64编码后的client_id:client_secret


client_id: 就是控制面板中看到的key
client_secret: 就是控制面板中看到的secret
grant_type:client_credentials

这个接口通过postman测试没有问题,但通过代码测试就一直报,明明参数和postman设置的一样

{"code":"InvalidCredentials","message":"Missing or invalid Authorization header."}

后来通过Dwolla社区这个问题找到了解决方法

https://discuss.dwolla.com/t/authorization-api-not-working/6234

总结起来就是grant_type:client_credentials传错了,要传grant_type=client_credentials

直接上代码

	public String getAccess() {
		RequestBuilder requestBuilder = RequestBuilder.post();
		// 设置body
		requestBuilder.setEntity(new StringEntity("grant_type=client_credentials", "UTF-8"));
		
		// 设置header
		setRequestHeader(TOKEN_URL, requestBuilder, "application/x-www-form-urlencoded", null);
		
		HttpUriRequest request = requestBuilder.build();
		CloseableHttpResponse response = null;
		CloseableHttpClient httpClient = HttpClients.createDefault();
		try {
			// 执行请求
			response = httpClient.execute(request);
		} catch (IOException e) {
			StringBuilder error = new StringBuilder();
			error.append("IOException when httpClient execute request![url=");
			error.append(TOKEN_URL);
			error.append("] - ");
			if (e != null)
				error.append(e.getMessage());
			System.out.println(error);
		}
		
		String resultStr = null;
		try {
			// 解析返回
			resultStr = EntityUtils.toString(response.getEntity(), "UTF-8");
			System.out.println(resultStr);
		} catch (ParseException e1) {
			e1.printStackTrace();
		} catch (IOException e1) {
			e1.printStackTrace();
		}
		return resultStr;
	}

	private void setRequestHeader(String url, RequestBuilder requestBuilder, String contentType, String authHeader) {
		requestBuilder.addHeader("Content-Type", contentType);
		requestBuilder.addHeader("Accept", "*/*");
		requestBuilder.setUri(url);
		
		if (authHeader == null) {
			String s = CLIENT_ID + ":" + CLIENT_SECRET;
			String base64String = null;
			try {
				base64String = Base64.getEncoder().encodeToString(s.getBytes("UTF-8"));
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			}
			requestBuilder.addHeader("Authorization", "Basic " + base64String);
		} else {
			requestBuilder.addHeader("Authorization", "Bearer " + authHeader);
		}
	}

推荐使用官方提供的Postman集合进行编码过程的参考。点击“Run in Postman”会有帮助的

 https://discuss.dwolla.com/t/using-postman-to-explore-and-debug-dwollas-v2-api/2758

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值