前期准备工作
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 "×tamp=" 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 "×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;
}
如需重新授权即按照上面的步骤再来一次即可