天天看點

閃送接口對接之擷取AccessToken【JAVA】

前期準備工作

1. 進行商戶、開發者資質認證(此步驟省略)

特别說明:

此處下圖中箭頭所指方向為切換登入者狀态的,之後開發中會用到此不同角色下的公共參數資料。
閃送接口對接之擷取AccessToken【JAVA】

2.分别登入擷取到公共參數值

商戶端:

擷取到應用資訊中的相關資訊,進行存儲記錄。

測試環境回調URL 配置好,之後會用到。正式回調URL視個人情況配置即可(開發完成之後)

下圖中賬戶餘額可以進行充值,在之後正式回調下單接口時候會進行賬戶扣除。

閃送接口對接之擷取AccessToken【JAVA】

開發者端:

同上操作到應用中心,擷取到相關公共參數的資訊

測試環境回調URL配置好

閃送接口對接之擷取AccessToken【JAVA】

AccessToken擷取開發

1.讀取文檔授權部分,進行授權操作擷取code

此處code的有效期為一分鐘,過期失效。且有效期内隻能使用一次。

閃送接口對接之擷取AccessToken【JAVA】

2.根據官方文檔中的請求連接配接傳入正确的參數即可擷取到AccessToken值

【特别說明:此處的AccessToken值有效期為7天,傳回資料中的RefreshToken參數為重新整理Token時用,請自行存儲好。理論上,AccessToken永久有效,但是需要定期重新整理Token的到期時間。】

閃送接口對接之擷取AccessToken【JAVA】

代碼如下:

/**
	 * 首次擷取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重新整理

閃送接口對接之擷取AccessToken【JAVA】

此處也是按照正常情況下的操作編寫出接口即可,值得注意的是:此處簽名的規範是按照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接口正常運作此接口也不會有壓力,按照官方文檔正常傳入參數即可。

閃送接口對接之擷取AccessToken【JAVA】

附代碼:

/**
	 * 取消授權接口
	 * 
	 * @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;
	}           

複制

如需重新授權即按照上面的步驟再來一次即可