手把手教你如何正确使用ebay-demo(奶爸级别教程)

空枫涟
2023-12-01
流程:
  1. 获取授权url地址 -->

  2. 根据授权url地址响应的code,去eBay获取token -->

  3. 根据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一直有效。

demo使用方法:
EBayEnvironment
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这几个参数在上一篇文章可以获取到。

点击链接:对接eBay流程

修改完这几个参数后,直接执行com.example.eBeydemo.EBeyDemoApplication就可以了,基本上严格按照我这几个步骤来,是没什么问题的。

注意事项!!!

每个环节的scope必须要一致!!!

每个环节的scope必须要一致!!!

每个环节的scope必须要一致!!!

每个环节的scope必须要一致!!!

每个环节的scope必须要一致!!!

有问题可以联系企鹅:805460597
有问题可以联系企鹅:805460597
有问题可以联系企鹅:805460597

 类似资料: