各种百度,这样的文章实在太少了,也翻了大量的api,希望这遍文章,让你们少走弯路,我也是刚刚接入,如果有更好的思路,可以留言;
我直接讲方法使用,还有一些坑,怎么取申请,还请大家自己百度;
1 搜索商品信息 淘宝物料搜索 注意:摊位id;
个人使用: 我自己使用了大淘客api 主要是方便,佣金,都计算好了,不然还要自己计算
/**
* 大淘客api商品搜索
* @param param
* @return
*/
@GetMapping("tkList")
public String tkList(RequestParamEntity param) {
TreeMap 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 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 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 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 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 paraMap = new TreeMap<>();
paraMap.put("version", "v1.0.1");
return CashBackUtils.getTKData(paraMap,"https://openapi.dataoke.com/api/category/get-top100");
}