目 录CONTENT

文章目录

闪送接口对接之获取AccessToken【JAVA】

芈亓
2022-03-14 / 0 评论 / 4 点赞 / 486 阅读 / 4,037 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-04-12,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

前期准备工作

1. 进行商户、开发者资质认证(此步骤省略)

特别说明:

此处下图中箭头所指方向为切换登录者状态的,之后开发中会用到此不同角色下的公共参数数据。
image-1647246608421

2.分别登录获取到公共参数值

商户端:

获取到应用信息中的相关信息,进行存储记录。

测试环境回调URL 配置好,之后会用到。正式回调URL视个人情况配置即可(开发完成之后)

下图中账户余额可以进行充值,在之后正式回调下单接口时候会进行账户扣除。
image-1647246625907
开发者端:

同上操作到应用中心,获取到相关公共参数的信息

测试环境回调URL配置好
image-1647246635952

AccessToken获取开发

1.读取文档授权部分,进行授权操作获取code

此处code的有效期为一分钟,过期失效。且有效期内只能使用一次。
image-1647246662227

2.根据官方文档中的请求连接传入正确的参数即可获取到AccessToken值

【特别说明:此处的AccessToken值有效期为7天,返回数据中的RefreshToken参数为刷新Token时用,请自行存储好。理论上,AccessToken永久有效,但是需要定期刷新Token的到期时间。】
image-1647246684019
代码如下:

/**
	 * 首次获取AccessToken值
	 * 
	 * @param request
	 * @param response
	 * @return
	 */
	@RequestMapping(value = "/getAccessToken", produces = MediaType.APPLICATION_JSON_VALUE + ";charset=UTF-8")
	@ResponseBody
	public String getAccessToken(HttpServletRequest request, HttpServletResponse response) {
		String clientId = appId;
		String code = request.getParameter("code");
		String c = "clientId=" + clientId + "&code=" + code;
		String result = HttpUtil.postData("http://open.s.bingex.com/openapi/oauth/token", c);
		System.out.println(result);
		JSONObject json = JSONObject.fromObject(result);
		String of = String.valueOf(json.get("status"));
		if (of.equals("200")) {
			Object object = json.get("data");
			JSONObject json1 = JSONObject.fromObject(object);
			String token = String.valueOf(json1.get("access_token"));
			String refreshToken = String.valueOf(json1.get("refresh_token"));
			AccessToken accessToken = new AccessToken();
			accessToken.setId(IdGen.uuid());
			accessToken.setAccessToken(token);
			accessToken.setTicket(refreshToken);
			accessToken.setLx("10"); // 设置成类型10 即为闪送接口存储值的地方
			accessTokenService.insert(accessToken);

		}
		return result;
	}

AccessToken刷新

image-1647246715787
此处也是按照正常情况下的操作编写出接口即可,值得注意的是:此处签名的规范是按照ASCLL码排序后才进行MD5加密(UFT-8编码格式,切记!!!)的。

如果请求此接口一直报签名错误的话大概率是排序或者MD5加密不正确,仔细排查即可解决此问题

附代码:

/**
	 * 刷新Token接口
	 * 
	 * @param request
	 * @param response
	 * @return
	 * @throws UnsupportedEncodingException
	 */
	@RequestMapping(value = "/refreshToken", produces = MediaType.APPLICATION_JSON_VALUE + ";charset=UTF-8")
	@ResponseBody
	public String refreshToken(HttpServletRequest request, HttpServletResponse response)
			throws UnsupportedEncodingException {
		Map<String, String> map = new HashMap<String, String>();
		Map<String, Object> mapA = new HashMap<String, Object>();
		String appSecrty = appSecret; //
		String clientId = appId;
		long timestamp = System.currentTimeMillis();
		String refreshToken = request.getParameter("refreshToken");
		mapA.put("refreshToken", refreshToken);
		String data = JsonMapper.getInstance().toJson(mapA);
		map.put("clientId", clientId);
		map.put("timestamp", String.valueOf(timestamp));
		map.put("data", data);
		String sign = getSignToken(map);
		String c = "clientId=" + clientId + "&sign=" + sign + "&timestamp=" + timestamp + "&data=" + data;
		String result = HttpUtil.postData("http://open.s.bingex.com/openapi/oauth/refresh_token", c);
		return result;
	}

取消授权,即AccessToken取消授权,失效处理


如上面刷新Token接口正常运行此接口也不会有压力,按照官方文档正常传入参数即可。
image-1647246751257
附代码:

/**
	 * 取消授权接口
	 * 
	 * @param request
	 * @param response
	 * @return
	 * @throws UnsupportedEncodingException
	 */
	@RequestMapping(value = "/cancel", produces = MediaType.APPLICATION_JSON_VALUE + ";charset=UTF-8")
	@ResponseBody
	public String cancel(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException {
		String appSecrty = appSecret;
		String clientId = appId;
		String sign = "";
		String data = request.getParameter("data");
		String a = "";
		long currentTimeMillis = System.currentTimeMillis();
		if (data == null) {
			a = appSecrty + "clientId" + clientId + "timestamp" + currentTimeMillis;
		} else {
			a = appSecrty + "clientId" + clientId + "data" + data + "timestamp" + currentTimeMillis;
		}
		System.out.println("拼接完成字符串:" + a);
		sign = encode(a);
		System.out.println("得到签名:" + sign);
		String c = "clientId=" + clientId + "&sign=" + sign + "&timestamp=" + currentTimeMillis + "&data=" + data;
		System.out.println(c);
		String result = HttpUtil.postData("http://open.s.bingex.com/openapi/oauth/cancel", c);
		System.out.println(result);
		return result;
	}

如需重新授权即按照上面的步骤再来一次即可

4

评论区