对接淘宝公共平台API

1.说明

        由于项目临时提出需求,需要对接淘宝公共平台查询用户的一些信息,所以需要和淘宝平台做对接,我查看了一下淘宝公共平台开发文档,虽然写的挺丰富挺整洁,但我还是一头雾水,业务流程相对复杂,经过多次查看和尝试接口文档调用,终于是花了周末两天的是将搞定了,不得不记录一下,希望下次不要再采坑,也希望对需要对接淘宝平台的小伙伴们有一些帮助,不要花费不必要的时间在踩坑的路上.

        淘宝开放平台地址:开放平台-文档中心 taobao.tbk.dg.cpa.activity.report( 淘宝客-推广者-任务奖励效果报表 )

2.踩坑

        看这里有详细的API说明,下面还有一大堆参数说明和调用示例,但我还是踩坑了

这是使用淘宝SDK的请求示例

TaobaoClient client = new DefaultTaobaoClient(url, appkey, secret);
TbkDgCpaActivityReportRequest req = new TbkDgCpaActivityReportRequest();
req.setEventId(1L);
req.setBizDate("20210818");
req.setPageNo(1L);
req.setQueryType(1L);
req.setPageSize(10L);
req.setPid("mm_123_123_123");
req.setRelationId(100L);
TbkDgCpaActivityReportResponse rsp = client.execute(req);
System.out.println(rsp.getBody());

 最开始使用的是这个 开放平台-文档中心

还是有一些区别的,这里显示推广者不需要token而我了带token的

TaobaoClient client = new DefaultTaobaoClient(url, appkey, secret);
TbkScCpaActivityReportRequest req = new TbkScCpaActivityReportRequest();
req.setEventId(1L);
req.setBizDate("20210818");
req.setPageNo(1L);
req.setQueryType(1L);
req.setPageSize(10L);
req.setPid("mm_123_123_123");
req.setRelationId(100L);
TbkScCpaActivityReportResponse rsp = client.execute(req, sessionKey);
System.out.println(rsp.getBody());

因为在调用时候发现 client.execute(req, sessionKey)方法一个参数不带sessionKey会有问题,显然我的SDK里面没有这个方法,所以下面重点讲解带token的方式

3.解决方案

        既然需要token那就要看看怎样获取到token ,这里的session就是我们想要的sessionKey

点击进去 开放平台-文档中心

 

 这里也会有详细的介绍

1.创建应用

这里不做过多说明,跟着文档就可以

2.获取授权code

拼接url访问在跳转页会返回一个连接带code参数就是我们需要的code,详细的参数也可以在文档中看到

3.获取token

拿到上一步获取到的code就可以获取到访问token,这个是示例,按照这种方式的确可以获取到,在实际应用时候稍作修改就行了

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import com.taobao.api.internal.util.WebUtils; //引用top sdk
 public class open_oauth {
    public static void main(String[] args) {
      String url="https://oauth.taobao.com/token";
      Map<String,String> props=new HashMap<String,String>();
      props.put("grant_type","authorization_code");
/*测试时,需把test参数换成自己应用对应的值*/
      props.put("code","test");
      props.put("client_id","test");
      props.put("client_secret","test");
      props.put("redirect_uri","http://www.test.com");
      props.put("view","web");
      String s="";
      try{s=WebUtils.doPost(url, props, 30000, 30000);
      System.out.println(s);
      }catch(IOException e){
          e.printStackTrace();}
    } }

下面是我写的测试

@GetMapping("/tb-report")
    public String tbCpaReport(@RequestParam Map<String,String> map) throws ApiException {
        String url = "https://eco.taobao.com/router/rest";

        String appKey = map.get("appKey");
        String secret =map.get("secret");
        String date =map.get("date");
        String pid =map.get("pid");
        String eventId =map.get("eventId");

        String token = openAuth(map);

        TaobaoClient client = new DefaultTaobaoClient(url, appKey, secret);
        TbkDgCpaActivityReportRequest request = new TbkDgCpaActivityReportRequest();

        request.setEventId(Long.parseLong(eventId));
        request.setBizDate(date);
        request.setPageNo(1L);
        request.setQueryType(1L);
        request.setPageSize(10L);
        request.setPid(pid);
        request.setRelationId(100L);
        TbkDgCpaActivityReportResponse response = client.execute(request,token);

        System.out.println(response.getBody());

        return response.getBody();
    }


@GetMapping("/open-auth")
    public String openAuth(@RequestParam Map<String,String> map){

        String code =map.get("code") ;
        String redisKey = "tb-token-"+code;
        String accessToken = (String) redisUtils.get(redisKey);
        if(null!=accessToken&&!"".equals(accessToken)){
            return accessToken;
        }

        String appKey = map.get("appKey");
        String secret =map.get("secret");
        String url="https://oauth.taobao.com/token";
        Map<String,String> props=new HashMap<String,String>();
        props.put("grant_type","authorization_code");
        /*测试时,需把test参数换成自己应用对应的值*/
        props.put("code",code);
        props.put("client_id",appKey);
        props.put("client_secret",secret);
        props.put("redirect_uri","https://hhmt-tb.yoqu.net/v2/taobao/code");
        props.put("view","web");
        String s="";

        try{s=WebUtils.doPost(url, props, 30000, 30000);
            JSONObject json =  JSONObject.parseObject(s);
            accessToken = (String) json.get("access_token");
            redisUtils.set(redisKey,accessToken,1800L,TimeUnit.SECONDS);

        }catch(IOException exception){
            exception.printStackTrace();}
        return accessToken;
    }

需要注意的是要自己保存code和token,因为一个code只能获取一次token,而且token有效时间是半小时,所有这里我选择保存在redis里面

4.测试

pid参数可以查到具体的某一个推广位,如果不加就是查所有。因为只是测试,所有这里没有写分页参数,代码中也没有校验逻辑。需要的小伙伴可以在这个基础上做更改。

4.总结

先读文档在测试,实在不行就百度,CSDB,B站

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值