springboot 对接 淘宝联盟

各种百度,这样的文章实在太少了,也翻了大量的api,希望这遍文章,让你们少走弯路,我也是刚刚接入,如果有更好的思路,可以留言;

我直接讲方法使用,还有一些坑,怎么取申请,还请大家自己百度;

1  搜索商品信息  淘宝物料搜索  注意:摊位id;

个人使用: 我自己使用了大淘客api 主要是方便,佣金,都计算好了,不然还要自己计算

 /**
     * 大淘客api商品搜索
     * @param param
     * @return
     */
    @GetMapping("tkList")
    public String tkList(RequestParamEntity param) {
        TreeMap<String, String> paraMap = new TreeMap<>();
        paraMap.put("version", "v1.2.1");
        paraMap.put("type", "0");
        paraMap.put("pageId", param.getPageNum()==null?"1":param.getPageNum().toString());
        paraMap.put("pageSize", param.getPageNum()==null?"10":param.getPageNum().toString());
        paraMap.put("keyWords", param.getKeyWords());
        paraMap.put("sort", param.getSort()==null?"total_sales_des":param.getSort());

        return CashBackUtils.getTKData(paraMap,"https://openapi.dataoke.com/api/goods/list-super-goods");
    }

2 : 商品查看详情 我也是接入大淘客api,其实都一样,对接淘宝联盟也一样

/**
     * 商品详细图
     * @param param
     * @return
     */
    @GetMapping("getGoodsDetails")
    public String getGoodsDetails(RequestParamEntity param) {
        TreeMap<String, String> paraMap = new TreeMap<>();
        paraMap.put("version", "v1.2.2");
        paraMap.put("goodsId", param.getGoodsId());//淘宝商品id
        return CashBackUtils.getTKData(paraMap,"https://openapi.dataoke.com/api/goods/get-goods-details");
    }

3 : 购买 ,这个要注意一下,用户绑定订单,需要申请渠道管理

一般情况下,这周申请,下周四就能查看到,是否有渠道管理,可以打开控制台,查看是否申请成功,

有这个菜单,说明申请成功了,接下来查看获得有对应的api权限

坑点:申请通过了api权限,不一定立刻下来,我延迟了一周,也有可能申请的时候appkey填写错了,我又重新审申请了一次,反正没有权限的时候,你可以等一等;

4: 用户绑定渠道id api

  /**
     * 绑定渠道id,并更新数据库
     * @param tbToken
     * @return
     */
    @Override
    public String addRelationId(String tbToken) throws ApiException {
        //绑定渠道用户,获得渠道id
        TaobaoClient client = CashBackUtils.getTaobaoClient();
        TbkScPublisherInfoSaveRequest req = new TbkScPublisherInfoSaveRequest();
        req.setInviterCode(CashBackUtils.INVITATION_CODE);
        req.setInfoType(1L);
        TbkScPublisherInfoSaveResponse response = client.execute(req , tbToken);
        return response.getData().getRelationId().toString();
    }

坑点 : req.setInviterCode(这个参数);看图

点击渠道管理->渠道备案流程->获取连接->打码参数

token 需要用户登录授权,获取的,登录大家可以百度去查找;

不管用户是否有没有绑定,绑定返回渠道id,重复绑定,返回渠道id,拿到id,可以和当前用户进行绑定;进行下一步操作

4:生成二合一连接,就是口令和直接购买,我也是用大淘客api,淘宝联盟也有,其实差不多

  /**
     * 高效转链
     * @param param
     * @return
     */
    @GetMapping("getPrivilegeLink")
    public String getPrivilegeLink(RequestParamEntity param) {
        TreeMap<String, String> paraMap = new TreeMap<>();
        paraMap.put("version", "v1.1.1");
        //摊位id
        paraMap.put("pid", "xxx");
        //渠道id
        paraMap.put("channelId", getUser().getRelationId());
        //淘宝商品id
        paraMap.put("goodsId", param.getGoodsId());
        return CashBackUtils.getTKData(paraMap,"https://openapi.dataoke.com/api/tb-service/get-privilege-link");
    }

坑点 :摊位id全路径,不是后面四位数

 

大淘客摊位id 和 淘宝联盟id进行绑定,保值一致大淘客链接 点击pid 修改,替换一下就好

6: 购买成功了,获取订单,入我们数据库里面,我这里是用定时任务的,主要是淘宝查询时间最长不能超过3个小时,

历史订单问题,这方面,我只要这样的思路,有更好的思路,可以留言进行沟通;

package com.xcds.shequ.project.promote.scheduled;

import com.taobao.api.ApiException;
import com.taobao.api.TaobaoClient;
import com.taobao.api.request.TbkOrderDetailsGetRequest;
import com.taobao.api.response.TbkOrderDetailsGetResponse;
import com.xcds.shequ.common.utils.fanli.CashBackUtils;
import com.xcds.shequ.project.promote.manager.AsyncManager;
import com.xcds.shequ.project.promote.manager.factory.AsyncFactory;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;

/**
 * 淘宝定时任务
 * @Author: zhangYuHui
 * @Date: 2020/5/17 12:47
 */
@Configuration
@EnableScheduling
@EnableAsync
public class TbTasks {

    /**
     * 每隔2分钟查询
     * 查询20分钟之内已创建的订单
     * @throws ApiException
     */
    @Scheduled(fixedRate=120000)
    @Async
    public void getTbCreateOrder() throws ApiException {
        TbkOrderDetailsGetRequest req = new TbkOrderDetailsGetRequest();
        DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        LocalDateTime ld = LocalDateTime.now();
        req.setQueryType(1L);
        req.setMemberType(2L);
        req.setEndTime(dtf2.format(ld));
        req.setStartTime(dtf2.format(ld.plusMinutes(-20)));
        findTbOrder(req);

    }

    /**
     * 每隔3分钟查询
     * 查询5分钟之内已支付的订单
     * @throws ApiException
     */
    @Scheduled(fixedRate=180000)
    @Async
    public void getTbOrder() throws ApiException {
        TbkOrderDetailsGetRequest req = new TbkOrderDetailsGetRequest();
        DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        LocalDateTime ld = LocalDateTime.now();
        req.setQueryType(2L);
        req.setMemberType(2L);
        req.setTkStatus(12L);
        req.setEndTime(dtf2.format(ld));
        req.setStartTime(dtf2.format(ld.plusMinutes(-15)));
        findTbOrder(req);

    }

    /**
     * 第一次延迟1分钟
     * 每隔10分钟查询
     * 查询15分钟之内已结算订单
     * @throws ApiException
     */
    @Scheduled(initialDelay = 60000,fixedRate=600000)
    @Async
    public void getTbSettlementOrder() throws ApiException {
        TbkOrderDetailsGetRequest req = new TbkOrderDetailsGetRequest();
        DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        LocalDateTime ld = LocalDateTime.now();
        req.setQueryType(3L);
        req.setMemberType(2L);
        req.setTkStatus(3L);
        req.setEndTime(dtf2.format(ld));
        req.setStartTime(dtf2.format(ld.plusMinutes(-15)));
        findTbOrder(req);
    }

    /**
     * 每天凌晨4点查询历史订单
     * 60天之之内的订单
     * @throws ApiException
     */
    @Async
    @Scheduled(cron = "0 0 4 * * ?")
    public void getTbHistoryOrder() throws Exception {
        TbkOrderDetailsGetRequest req = new TbkOrderDetailsGetRequest();
        DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        LocalDateTime ld = LocalDateTime.now();
        req.setQueryType(1L);
        req.setMemberType(2L);
        int count=0;
        while (toDays(ld.plusHours(count))<=CashBackUtils.ORDER_DAY){
            Thread.sleep(1000);
            LocalDateTime localDateTime = ld.plusHours(count);
            req.setEndTime(dtf2.format(localDateTime));
            req.setStartTime(dtf2.format(localDateTime.plusHours(-3)));
            findTbOrder(req);
            count-=3;
        }
    }

    /**
     * 去淘宝获取订单
     * @param req
     * @return
     * @throws ApiException
     */
   private void findTbOrder(TbkOrderDetailsGetRequest req) throws ApiException {
       TaobaoClient client = CashBackUtils.getTaobaoClient();
       req.setJumpType(1L);
       req.setOrderScene(2L);
       req.setPageSize(50L);
       Long pageNo =1L;
       Boolean hasNext = true;
       while (hasNext){
           req.setPageNo(pageNo);
           TbkOrderDetailsGetResponse rsp = client.execute(req);
           TbkOrderDetailsGetResponse.OrderPage data = rsp.getData();
           List<TbkOrderDetailsGetResponse.PublisherOrderDto> results = data.getResults();
           if(results!=null && !results.isEmpty()){
            //异步保存到数据库,用了 replace into进行插入,订单id+子订单id建立了唯一索引
            // 保存之前,有同样的剔除,插入最新的,保证数据唯一最新
              AsyncManager.me().execute(AsyncFactory.addTbkOrder(results));
               //是否还有下一页
               hasNext=data.getHasNext();
               pageNo++;
           }else {
               hasNext=false;
           }
       }
   }

    /**
     * 和当前时间比较天数
     * @param end
     * @return
     */
   private long toDays(LocalDateTime end){
       LocalDateTime now = LocalDateTime.now();
       Duration duration = Duration.between(end,now);
       //相差的天数
       return  duration.toDays();
   }

}

sql 建表语句,让你们少搬砖

CREATE TABLE `tbk_order` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `tb_paid_time` varchar(255) DEFAULT NULL COMMENT '订单在淘宝拍下付款的时间',
  `tk_paid_time` varchar(255) DEFAULT NULL COMMENT '订单付款的时间,该时间同步淘宝,可能会略晚于买家在淘宝的订单创建时间',
  `pay_price` varchar(255) DEFAULT NULL COMMENT '买家确认收货的付款金额(不包含运费金额)',
  `pub_share_fee` varchar(255) DEFAULT NULL COMMENT '结算预估收入=结算金额*提成。以买家确认收货的付款金额为基数,预估您可能获得的收入。因买家退款、您违规推广等原因,可能与您最终收入不一致。最终收入以月结后您实际收到的为准',
  `trade_id` varchar(255) DEFAULT NULL COMMENT '买家通过购物车购买的每个商品对应的订单编号,此订单编号并未在淘宝买家后台透出',
  `tk_earning_time` varchar(255) DEFAULT NULL COMMENT '订单确认收货后且商家完成佣金支付的时间',
  `adzone_id` varchar(255) DEFAULT NULL COMMENT '推广位管理下的推广位名称对应的ID,同时也是pid=mm_1_2_3中的“3”这段数字',
  `pub_share_rate` varchar(255) DEFAULT NULL COMMENT '从结算佣金中分得的收益比率',
  `refund_tag` varchar(2) DEFAULT NULL COMMENT '维权标签,0 含义为非维权 1 含义为维权订单',
  `subsidy_rate` varchar(255) DEFAULT NULL COMMENT '平台给与的补贴比率,如天猫、淘宝、聚划算等',
  `tk_total_rate` varchar(255) DEFAULT NULL COMMENT '提成=收入比率*分成比率。指实际获得收益的比率',
  `item_category_name` varchar(255) DEFAULT NULL COMMENT '商品所属的根类目,即一级类目的名称',
  `item_img` varchar(255) DEFAULT NULL COMMENT '商品图片',
  `pub_share_pre_fee` varchar(255) DEFAULT NULL COMMENT '付款预估收入=付款金额*提成。指买家付款金额为基数,预估您可能获得的收入。因买家退款等原因,可能与结算预估收入不一致',
  `alipay_total_price` varchar(7) DEFAULT NULL,
  `item_title` varchar(255) DEFAULT NULL COMMENT '商品标题',
  `trade_parent_id` varchar(255) DEFAULT NULL COMMENT '买家在淘宝后台显示的订单编号',
  `item_num` varchar(255) DEFAULT NULL,
  `order_type` varchar(255) DEFAULT NULL COMMENT '订单所属平台类型,包括天猫、淘宝、聚划算等',
  `tk_create_time` varchar(255) DEFAULT NULL COMMENT '订单创建的时间,该时间同步淘宝,可能会略晚于买家在淘宝的订单创建时间',
  `tk_status` varchar(255) DEFAULT NULL COMMENT '已付款:指订单已付款,但还未确认收货 已收货:指订单已确认收货,但商家佣金未支付 已结算:指订单已确认收货,且商家佣金已支付成功 已失效:指订单关闭/订单佣金小于0.01元,订单关闭主要有:1)买家超时未付款; 2)买家付款前,买家/卖家取消了订单;3)订单付款后发起售中退款成功;3:订单结算,12:订单付款, 13:订单失效,14:订单成功',
  `item_price` varchar(255) DEFAULT NULL COMMENT '商品单价',
  `adzone_name` varchar(255) DEFAULT NULL COMMENT '推广位管理下的自定义推广位名称',
  `item_id` varchar(255) DEFAULT NULL COMMENT '商品id',
  `total_commission_rate` varchar(255) DEFAULT NULL COMMENT '佣金比率',
  `item_link` varchar(255) DEFAULT NULL COMMENT '商品链接',
  `income_rate` varchar(255) DEFAULT NULL COMMENT '订单结算的佣金比率+平台的补贴比率',
  `total_commission_fee` varchar(255) DEFAULT NULL COMMENT '佣金金额=结算金额*佣金比率',
  `relation_id` varchar(255) DEFAULT NULL COMMENT '渠道关系id',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `oredrId` (`trade_parent_id`) COMMENT '订单唯一索引'
) ENGINE=InnoDB AUTO_INCREMENT=97 DEFAULT CHARSET=utf8mb4 COMMENT='淘宝订单';

测试成功了哈,当我淘宝下了订单,2分钟之内可以进我数据库

大淘客一下好用的api,后续对接拼多多,和京东,这个先进项目测试

 /**
     * 白菜价
     * @param param
     * @return
     */
    @GetMapping("cabbagePrice")
    public String cabbagePrice(RequestParamEntity param) {
        TreeMap<String, String> paraMap = new TreeMap<>();
        paraMap.put("version", "v1.2.2");
        paraMap.put("pageId", param.getPageNum()==null?"1":param.getPageNum().toString());
        paraMap.put("pageSize", param.getPageSize()==null?"20":param.getPageSize().toString());
        paraMap.put("nineCid", "1");
        return CashBackUtils.getTKData(paraMap,"https://openapi.dataoke.com/api/goods/nine/op-goods-list");
    }


    /**
     * 今日热搜
     * @return
     */
    @GetMapping("searchToday")
    public String searchToday() {
        TreeMap<String, String> paraMap = new TreeMap<>();
        paraMap.put("version", "v1.0.1");
        return CashBackUtils.getTKData(paraMap,"https://openapi.dataoke.com/api/category/get-top100");
    }

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值