对接淘宝公共平台API

2023-05-16

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站

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对接淘宝公共平台API 的相关文章

随机推荐

  • stable diffusion的使用

    文章目录 1 文生图1 1 mountains and trees and gree1 2 three dogs1 3 cats1 4 three lovely cats1 5 beautiful girl1 6 机器猫1 7 卡通图像生成
  • DIY:用开源软件搭建自己的物联网

    原文链接 xff1a DIY Open Source Software for your very own IoT 作者 xff1a Vishal Shah 翻译 xff1a 赵屹华 审校 xff1a 刘翔宇 图片来源 xff1a open
  • ubuntu开启rdp服务

    概要 ssh登录用于终端 xff0c 如果需要GUI的远程登陆ubuntu 我了解到大概3中方案 vncxrdp第三方软件 向日葵 TeamViewer之类的 因为vnc我一直配置不好 xff0c 所以试了一下xrdp xff0c 这样wi
  • csp模拟2-T1 HRZ的序列

    题目 时间限制 1s 空间限制 64MB 题目描述 相较于咕咕东 xff0c 瑞神是个起早贪黑的好孩子 xff0c 今天早上瑞神起得很早 xff0c 刷B站时看到了一个序列aaa xff0c 他对这个序列产生了浓厚的兴趣 他好奇是否存在一个
  • Ubuntu 中文件和目录的操作命令

    在 Ubuntu 中 xff0c 文件和目录的操作命令是非常重要的 这些命令帮助您在文件系统中创建 复制 移动 删除和查看文件和目录 以下是一些常用的文件和目录操作命令 xff1a cd cd 命令用于切换当前工作目录 例如 xff0c 要
  • Docker无法在WSL2的Ubuntu启动的问题

    今天在更新了WSL2上的Ubuntu22 04版本 xff0c 在安装Docker后无法启动 xff0c 查看Docker的日志显示如下的错误 INFO 2022 04 22T16 14 55 718999500 43 08 00 stop
  • C语言中的移位操作

    C语言中的移位操作 xff0c 内容不多 不过有些地方你不注意 xff0c 就疏忽了 先做两个小题先 1 unsigned char x 61 3 x lt lt 1是多少 xff1f x gt gt 1是多少 xff1f 2 char x
  • Android获取设备唯一标识的方法

    String uniqueId String mac 61 getMacAddressByInetAddress if mac 61 null amp amp mac equals 34 34 amp amp mac equals 34 0
  • Linux 搭建私有CA证书服务器之超详细版本

    一 CA简介 CA是什么 xff1f CA是Certificate Authority的简写 xff0c 从字面意思翻译过来是凭证管理中心 xff0c 认证授权 它有点类似我们生活中的身份证颁发机构 xff0c 这里的CA就相当于生活中颁发
  • 基于Nginx搭建RTMP-HLS视频直播服务器(推流+拉流)

    1 环境准备 Linux centos7 6 nginx 1 18 0 源码包 span class token function wget span http nginx org download nginx 1 8 1 tar gz n
  • k8s-部署本地仓库harbor

    1 基础配置 xff1a 主机名IP系统版本k8s master192 168 32 128centos 7 6k8s node1192 168 32 129centos 7 6k8s node2192 168 32 130centos 7
  • k8s部署nginx容器

    1 创建挂载nginx namespace yaml配置文件 xff08 k8s master xff1a 192 168 32 128 xff09 apiVersion v1 kind Namespace metadata name ng
  • k8s部署tomcat并且映射本地目录

    1 编写Dockerfile span class token punctuation span root 64 VM 12 7 centos opt span class token punctuation span span class
  • 自动化运维记录之GitLab CI/CD 自动化部署入门教程

    1 前端项目自动化部署需要的环境依赖 Node 安装项目依赖 打包都需要 Nginx web 项目部署必须 正向代理 方向代理 负载均衡等等 GitLab 也会用到 Nginx span class token punctuation sp
  • k8s-kubeadm证书过期续订解决方法

    1 实验目的 通过kubeadm安装的kubernetes集群各个组件所使用证书的期限为1年 xff0c 本实验练习的是到期之后如何续期 2 实验环境 ubernetes环境及版本 整个实验三台机器192 168 32 128作为maste
  • 宝塔部署Django项目-避坑必看

    1 在linux windoes机器上已经安装宝塔 浏览器登录宝塔管理页面 1 1打包模块 span class token number 1 span 将本地计算机的项目下的模块打包 python m pip freeze span cl
  • week11作业—A - 必做题11-1—

    题目 蒜头君从现在开始工作 xff0c 年薪 NNN 万 他希望在蒜厂附近买一套 606060 平米的房子 xff0c 现在价格是 200200200 万 假设房子价格以每年百分之 KKK 增长 xff0c 并且蒜头君未来年薪不变 xff0
  • Linux 系统 nginx 源码编译安装

    nginx版本 xff1a nginx 1 18 0 操作实施环境 Ubuntu 16 04 6 LTS SUSE Linux Enterprise Server 12 SP4 x86 64 注 xff1a 因为是源码安装 xff0c 操作
  • ubuntu18.04和20.04(ubuntu focal)安装MySQL8并使用navicat连接(详细)

    文章的第一节转载自原文连接 本文实现了服务器ubuntu18 04和虚拟机ubuntu20 04两个版本的MySQL8 的安装 xff0c 和navicat的连接 其中ubuntu18 04对应第二节 xff0c ubuntu20 04是u
  • 对接淘宝公共平台API

    1 说明 由于项目临时提出需求 xff0c 需要对接淘宝公共平台查询用户的一些信息 xff0c 所以需要和淘宝平台做对接 xff0c 我查看了一下淘宝公共平台开发文档 xff0c 虽然写的挺丰富挺整洁 xff0c 但我还是一头雾水 xff0