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

2022-06-17 14:58:35 浏览数 (1)

前期准备工作

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

特别说明:

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

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

商户端:

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

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

下图中账户余额可以进行充值,在之后正式回调下单接口时候会进行账户扣除。

开发者端:

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

测试环境回调URL配置好

AccessToken获取开发

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

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

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

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

代码如下:

代码语言:javascript复制
/**
	 * 首次获取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刷新

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

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

附代码:

代码语言:javascript复制
/**
	 * 刷新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接口正常运行此接口也不会有压力,按照官方文档正常传入参数即可。

附代码:

代码语言:javascript复制
/**
	 * 取消授权接口
	 * 
	 * @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;
	}

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

0 人点赞