前期準備工作
1. 進行商戶、開發者資質認證(此步驟省略)
特别說明:
此處下圖中箭頭所指方向為切換登入者狀态的,之後開發中會用到此不同角色下的公共參數資料。
2.分别登入擷取到公共參數值
商戶端:
擷取到應用資訊中的相關資訊,進行存儲記錄。
測試環境回調URL 配置好,之後會用到。正式回調URL視個人情況配置即可(開發完成之後)
下圖中賬戶餘額可以進行充值,在之後正式回調下單接口時候會進行賬戶扣除。
開發者端:
同上操作到應用中心,擷取到相關公共參數的資訊
測試環境回調URL配置好
AccessToken擷取開發
1.讀取文檔授權部分,進行授權操作擷取code
此處code的有效期為一分鐘,過期失效。且有效期内隻能使用一次。
2.根據官方文檔中的請求連接配接傳入正确的參數即可擷取到AccessToken值
【特别說明:此處的AccessToken值有效期為7天,傳回資料中的RefreshToken參數為重新整理Token時用,請自行存儲好。理論上,AccessToken永久有效,但是需要定期重新整理Token的到期時間。】
代碼如下:
/**
* 首次擷取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加密不正确,仔細排查即可解決此問題
附代碼:
/**
* 重新整理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 + "×tamp=" + timestamp + "&data=" + data;
String result = HttpUtil.postData("http://open.s.bingex.com/openapi/oauth/refresh_token", c);
return result;
}
複制
取消授權,即AccessToken取消授權,失效處理
如上面重新整理Token接口正常運作此接口也不會有壓力,按照官方文檔正常傳入參數即可。
附代碼:
/**
* 取消授權接口
*
* @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 + "×tamp=" + 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;
}
複制
如需重新授權即按照上面的步驟再來一次即可