获取授权url地址 -->
根据授权url地址响应的code,去eBay获取token -->
根据token获取订单数据(token是会过期的,可以根据刷新令牌中的token去获取新的token)
大致流程就是上面这三步!!
/**
* 获取授权url地址
*
* @return
*/
@GetMapping("getAuthUrl")
public Mono<String> getAuthUrl() {
OAuth2Api oauth2Api = new OAuth2Api();
List<String> scopeList = new ArrayList<>();
scopeList.add("https://api.ebay.com/oauth/api_scope");
scopeList.add("https://api.ebay.com/oauth/api_scope/sell.finances");
scopeList.add("https://api.ebay.com/oauth/api_scope/sell.fulfillment");
scopeList.add("https://api.ebay.com/oauth/api_scope/sell.fulfillment.readonly");
String authorization_url = oauth2Api.generateUserAuthorizationUrl(EBayEnvironment.PRODUCTION, scopeList, Optional.empty());
return Mono.just(authorization_url);
}
scopeList
这个作用域需要根据你的业务需求,让用户给你的开发者账号授权什么权限,例如查单、查物流、查个人信息等等,每个作用域都不同,可以到文档上看看。
获取到授权地址后,然后在前端跳转打开,输入ebay店铺的账号密码后,可以获取到code,这个code很长。最后,就进入第二步。
/**
* 根据授权url地址响应的code,去eBay获取token
*
* @param code
* @return
* @throws IOException
*/
@GetMapping("getToken/{code}")
public Mono<OAuthResponse> getToken(@PathVariable("code") final String code) throws IOException {
OAuth2Api oauth2Api = new OAuth2Api();
OAuthResponse oauth2Response = oauth2Api.exchangeCodeForAccessToken(EBayEnvironment.PRODUCTION, code);
return Mono.just(oauth2Response);
}
这个接口可以获取到accessToken(token信息:token、token过期时间)和refreshToken(刷新token,用于获取新的token)。如果token过期了,需要让用户重新授权,这个时候刷新token就派上用场了,可以每天定时刷新token,让token一直有效。
拿到token就可以为所欲为了,接下来就进入第三步。
/**
* 根据token获取订单数据
*
* @param token
* @return
* @throws IOException
*/
@PostMapping(value = "getOrders", produces = {"application/json"})
public Mono<String> getOrders(@RequestBody final String token) throws IOException {
final OkHttpClient okHttpClient = new OkHttpClient();
final Request request = new Request.Builder()
.url("https://api.ebay.com/sell/fulfillment/v1/order")
.get()
.addHeader("Authorization", "Bearer " + JSONObject.parseObject(token).getString("token"))
.build();
final Response response = okHttpClient.newCall(request).execute();
return Mono.just(response.body().string());
}
这是获取订单信息的接口,大家可以根据自己的需求去对接其他接口。
/**
* 根据刷新令牌中的token去获取新的token
* @param token
* @return
* @throws IOException
*/
@PostMapping(value = "refreshToken", produces = {"application/json"})
public Mono<OAuthResponse> refreshToken(@RequestBody final String token) throws IOException {
OAuth2Api oauth2Api = new OAuth2Api();
List<String> scopeList = new ArrayList<>();
scopeList.add("https://api.ebay.com/oauth/api_scope");
scopeList.add("https://api.ebay.com/oauth/api_scope/sell.finances");
scopeList.add("https://api.ebay.com/oauth/api_scope/sell.fulfillment");
scopeList.add("https://api.ebay.com/oauth/api_scope/sell.fulfillment.readonly");
return Mono.just(oauth2Api.refreshToken(EBayEnvironment.PRODUCTION, scopeList, JSONObject.parseObject(token).getString("token")));
}
这是根据第三步的refreshToken来获取新的token信息,来保持用户的token一直有效。
public enum EBayEnvironment {
// 生产环境枚举
PRODUCTION("-xxxxxxxxxx-078d1c01", "-xxxxxxxxxx-078d1c01", "-xxxxxxxxxx-078d1c01", "-xxxxxxxxxx-078d1c01", "https://auth.ebay.com/oauth2/authorize", "https://api.ebay.com/identity/v1/oauth2/token"),
// 沙盒环境枚举
SANDBOX("-xxxxxxxxxx-078d1c01", "-xxxxxxxxxx-078d1c01", "-xxxxxxxxxx-078d1c01", "-xxxxxxxxxx-078d1c01", "https://auth.sandbox.ebay.com/oauth2/authorize", "https://api.sandbox.ebay.com/identity/v1/oauth2/token");
private final String appId;
private final String certId;
private final String devId;
private final String ruName;
private final String authorizeUrl;
private final String tokenUrl;
// ===========================省略部分代码=====================================
}
这个枚举有两个环境:生产和沙盒(测试)环境,appId、certId、devId、ruName这几个参数在上一篇文章可以获取到。
修改完这几个参数后,直接执行com.example.eBeydemo.EBeyDemoApplication就可以了,基本上严格按照我这几个步骤来,是没什么问题的。
每个环节的scope必须要一致!!!
每个环节的scope必须要一致!!!
每个环节的scope必须要一致!!!
每个环节的scope必须要一致!!!
每个环节的scope必须要一致!!!
有问题可以联系企鹅:805460597
有问题可以联系企鹅:805460597
有问题可以联系企鹅:805460597