简单对接抖音小店的接口

最近公司需要对接抖音小店的接口。然后其实对接起来还是蛮简单的,不过自己阅读文档的能力还有点问题,所以这里记录一下开发遇到的问题。

文档地址:https://op.jinritemai.com/docs/guide-docs/6/14

首先是需要准备的配置。

抖音小店的整个流程分两步,第一步先获取他们的access_token,因为调用接口的时候需要附带这个token作为url的参数去调用的,不然会报错。然后第二步就是上面说的再去正式调参。

所以我的做法是写了一个定时每隔10分钟去调用一次token。官方文档找不到了,所以我就贴下自己的方法,下图。

 

拿到了token保存到缓存就可以写接下来的代码了。

https://op.jinritemai.com/docs/guide-docs/10/23

官方文档说他们接口get,post都能调用。我也试了确实可以。调用接口的时候主要碰到的问题是拼参数的问题。因为我开始为了偷懒,就直接用字符串拼接了,但是他们的param格式是Map<String, String> 的字符串 {"id": "0"},所以在拼的时候就很容易出错。因为你要拼成这种格式需要这样写string param = "{\"id\": \"0\"}";。参数一个还行,多了就很容易出错,所以推荐用map然后转jsonObject再转字符串。这样就不会出错了。

然后我也推荐用treeMap去做为容器去装。因为treeMap再插入值的时候会对key进行排序。因为官方文档说明了param需要key从小到大排序,而treeMap也满足了这点要求。

然后抖店接口还有个sign值的参数。他是由很多参数加到一起然后加密的一个字符串,然后这个sign值在调用接口的时候是需要一同带过去的。

然后这个requestStr在拼接的时候也是需要将他的key值从大到小去排序。下面是加密方式,这个官方文档也是有的。

然后得到上述这些就可以去调用抖店的接口了。下面贴个简单的订单列表接口实例(其实确实蛮简单的,但是坑还是有的)

流程就是先拿到token,再拿到当前时间(其实好像不是当前时间也可以),然后根据他的method, param, date去获取sign(/order/list就是这个接口的api,然后order.list就是接口的method,文档都有:https://op.jinritemai.com/docs/api-docs/15/55)

然后我这里json和date做了下转换是因为参数怕会有什么特殊字符,所以要转义一下。

然后就可以拼好url了(url + param)然后用http请求就行。

全部代码:

package com.xxx.mall.core.utils;import com.alibaba.fastjson.JSONObject;
import com.xxx.mall.common.DoudianConstant;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.net.URLEncoder;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;public class DouDianUtils {/*** 抖店接口域名*/private static final String DOUDIAN_URL = "https://openapi-fxg.jinritemai.com";/*** app key*/private static final String APP_KEY = "your app key";/*** app secret*/private static final String APP_SECRET = "your app secret";/*** 抖店cache的cacheName*/private static final String DOUDIAN_CACHE_NAME = "doudianCache";/*** 抖店cache的cacheKey*/private static final String DOUDIAN_TOKEN_KEY = "doudian_access_token";/*** 通过api取accessToken*/public static void fetchAccessToken() {String url = DOUDIAN_URL + "/oauth2/access_token" + "?app_id=" + APP_KEY + "&app_secret="+ APP_SECRET + "&grant_type=authorization_self";String response = HttpUtils.httpGet(url, 20000);if (StringUtils.isBlank(response)) {for (int i = 0; i < 3; i++) {response = HttpUtils.httpGet(url, 20000);if (StringUtils.isNotBlank(response)) {break;}try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}JSONObject jsonObject = JSONObject.parseObject(response);if (jsonObject.getIntValue("err_no") == 0) {JSONObject data = jsonObject.getJSONObject("data");if (null != data) {//用于调用API的access_tokenString accessToken = data.getString("access_token");if (StringUtils.isNotBlank(accessToken)) {CacheUtil.put(DOUDIAN_CACHE_NAME, DOUDIAN_TOKEN_KEY, accessToken);}}}}/*** 获取 输入参数签名结果 sign** @param methodName 方法名* @param paramJson 传参* @param timeStamp 时间戳* @return sign*/public static String fetchSign(String methodName, String paramJson, String timeStamp) {String requestStr = APP_SECRET + "app_key" + APP_KEY + "method" + methodName + "param_json" + paramJson + "timestamp"+ timeStamp + "v2" + APP_SECRET;return paramToMD5(requestStr);}/*** 将param参数转成MD5** @param requestStr 请求参数* @return String*/public static String paramToMD5(String requestStr) {byte[] secretBytes;try {secretBytes = MessageDigest.getInstance("md5").digest(requestStr.getBytes());} catch (NoSuchAlgorithmException e) {throw new RuntimeException("没有这个md5算法!");}StringBuilder md5code = new StringBuilder(new BigInteger(1, secretBytes).toString(16));while (md5code.length() < 32) {md5code.insert(0, "0");}return md5code.toString();}/*** 获取订单列表 支持按照子订单状态和订单的创建时间、更新时间来检索订单,获取订单列表** Tips:* 此接口做了限流,每个access_token每分钟1000次上限* 此接口,page最多返回100页,一页最多100单,故同样的请求,最多能拉到1万单* 通过该接口获取到的父订单,会在order_id后面会加上字母A做标识(这里和从店铺后台导出的订单有区别,从店铺后台导出的订单末尾没有A,* 但其实际和通过openapi获取的父订单是同一个,如依据运营导出的订单做核对,则请做订单末尾的A相关处理)* 如搜索时指定order_status,则搜索维度为子订单,即按照子订单状态搜索,total也为该状态子订单数量。返回结果的json结构不变,仍为父子订单结构,* 因此当有父订单包含多子订单时,返回的结构中父订单可能会有重复!* 由于订单同步会有延迟,建议在使用open接口拉取订单时,要做缓冲和兜底处理。比如,在今天的6:00去拉取5:30-5:40的数据后(20分钟后拉),明天的6:00时再拉取一次今天5:30-5:40的数据(兜底补拉)** 拉订单最好不要100页的拉,要98-99页的拉,100页有的时候会出问题* start_time 开始时间* end_time 结束时间* order_by 1、默认按订单创建时间搜索 2、值为“create_time”:按订单创建时间;值为“update_time”:按订单更新时间* @return JSONArray* @throws UnsupportedEncodingException*/public static JSONObject fetchOrderList() throws UnsupportedEncodingException {Map<String, String> map = new TreeMap<>();map.put("start_time", "2020/08/01 00:00:00");map.put("end_time", "2020/10/02 00:00:00");map.put("order_by", "create_time");String paramJson = JSONObject.toJSONString(map);String accessToken = (String) CacheUtil.get(DOUDIAN_CACHE_NAME, DOUDIAN_TOKEN_KEY);String url = DOUDIAN_URL + "/order/list";Date now = new Date();String dateStr = DateUtil.date2Str(now, "yyyy-MM-dd HH:mm:ss");String sign = fetchSign("order.list", paramJson, dateStr);//转码String paramJson2 = URLEncoder.encode(paramJson, "UTF-8");String dateStr2 = URLEncoder.encode(dateStr, "UTF-8");String param = "?app_key=" + APP_KEY + "&method=" + "order.list" + "&access_token="+ accessToken + "&param_json=" + paramJson2 + "&timestamp=" + dateStr2 + "&v=2&sign=" + sign;String response = HttpUtils.httpGet(url + param, 20000);JSONObject jsonObject = JSONObject.parseObject(response);if (jsonObject.getIntValue("err_no") == 0) {return jsonObject.getJSONObject("data");}return null;}
}

这里只是实例代码,可以根据实际要求优化代码,这就是后面的工作了。

 

=============================================================================================

更新一下遇到新的问题:

批量添加sku的时候(/sku/addAll),规格id取的是规格项的最上级的id。这里如果有三个sku的话就是拼成8|8|8

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/32969.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

获得抖音商品详情 API 返回值说明

请求地址: https://api-gw.onebound.cn/douyin/item_get 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,item_get,item_sear…

抖音关键词月搜查询( API 返回值说明)

为了进行电商平台API开发&#xff0c;我们需要做下面几件事情。 1&#xff09;开发者注册一个账号 2&#xff09;然后在平台应用注册一个应用程序键&#xff08;App Key) 。 3&#xff09;下载平台API的SDK并掌握基本的API基础知识和调用 4&#xff09;利用SDK接口和对象&a…

抖音跳转微信加好友功能实现解析

抖音现在毫无疑问的成为了大众喜闻乐见、爱不释手的娱乐利器&#xff0c;工作闲暇、茶余饭后、候车排队等等只要有空&#xff0c;就会随时随刻随手划拉&#xff0c;每个人都沉浸在这虚拟和现实的交互之中&#xff0c;乐不思蜀&#xff0c;忘乎所以&#xff0c;不能自拔。 抖音…

研究抖音的,点进来

作者&#xff1a;杨浩 全文共 5183 字&#xff0c;阅读需要 11 分钟 ———— / BEGIN / ———— 抖音之火&#xff0c;我们可能从主观上会听到很多声音&#xff0c;比如&#xff1a;“中毒了&#xff0c;我每天晚上要刷2个小时”&#xff0c;、昨晚刷到凌晨4点”、“我家小女…

获取详情API接口(抖音)

API接口名称&#xff1a; item_get - 获得抖音商品详情 响应参数 Version: Date: 名称类型必须示例值描述itemitem[]0宝贝详情数据 注册申请试用&#xff1a; 点击注册 请求参数&#xff1a;num_iid3514453298386183303 参数说明&#xff1a;num_iid:抖音商品ID 请求示例…

清爽聊天无多余功能!抖音聊天工具上线

&#x1f447;&#x1f447;关注后回复 “进群” &#xff0c;拉你进程序员交流群&#x1f447;&#x1f447; 来源丨电脑报 https://mp.weixin.qq.com/s/iRwO_iot8DSfN5PZbbKMDA 近日&#xff0c;抖音在官网上线了一款桌面端聊天软件“抖音聊天”&#xff0c;将支持 windows 7…

今日推荐一款实用的搜题小程序,题多多搜题

为什么要用小程序 1、不用安装&#xff0c;即开即用&#xff0c;节省流量&#xff0c;节约安装时间&#xff0c;而且不占用桌面&#xff1b; 2、功能上更为集中、单一&#xff0c;降低用户的使用难度&#xff0c;减少手机的过度使用。 小程序怎么找 现在大厂都已经推出了各…

大学c语言作业用什么搜题比较好,快速查找题库_什么手机软件可以把题库输入进去然后输入关键字可以查找点道题_淘题吧...

❶ 什么手机软件可以把题库输入进去。然后输入关键字可以查找点道题 用试题通啊&#xff0c;这款软件可以的&#xff0c;题库录入过后搜索关键字就能看到答案和题目了。 ❷ 如何快速寻找题库中的答案我有份题库&#xff0c;答题时如何快速的找到答案 大家谁也好的方法 用啥软件…

chatgpt赋能python:Python学习者必备:如何使用Python搜题

Python学习者必备&#xff1a;如何使用Python搜题 Python是一种非常强大的编程语言&#xff0c;在各种行业和领域都有广泛的应用。其中&#xff0c;Python在搜索引擎优化中的作用越来越受到重视。本篇文章将介绍如何使用Python来实现搜题&#xff0c;以及如何将Python应用到搜…

AI、OpenAI、MidJourney发展史

1探索ChatGPT&#xff0c;协助工作学习创作。加入「阿杰与AI」公众号&#xff0c;一同探讨&#xff0c;一同成长&#xff0c;比他人更进一步。 1.AI、OpenAI、MidJourney发展史2.ChatGPT们对今后社会生活的影响3.目前市面比较好的AI产品介绍4.注册方式汇总5.针对初学者的 Chat…

[世界杯]根据赔率计算各种组合概率与赔率

目录 一、背景 二、数据输入 2.1 赔率示意图 2.2 字典保存数据 三、数据处理 3.1 计算各种组合可能性 3.2 修正概率 四、输出结果 五、代码 一、背景 本文以世界杯体彩“混合过关”4场串胜平负为的赔率进行编码 其他类型如比分 、总进球数可以参考代码进行相应修改 …

2/26周日 今日竞彩前瞻推荐,精选5场稳胆推荐,比分预测

大家好&#xff0c;我是千雅&#xff0c;本人热爱足球多年&#xff0c;对比赛有个人的独特的分析和见解&#xff0c;放平心态&#xff0c;细细分析&#xff0c;跟从自己的看法&#xff0c;结合盘口的走向&#xff0c;才能有效的把握住每一场比赛的最终结果。以下是我个人的见解…

用代码预测一波欧冠8强对阵吧

欧冠8强已经出炉&#xff0c;不知道你支持的球队晋级了吗 这8支球队分别是比利亚雷亚尔、切尔西、马竞、本菲卡、拜仁、利物浦、曼城、皇马。这其中英超联赛和西甲联赛分别有3支球队晋级&#xff0c;德甲联赛和葡超联赛则分别有1支球队晋级&#xff01;五大联赛中的意甲联赛和…

这届 AI 预测欧洲杯冠军,通通被打脸

持续了一个月的欧洲杯&#xff0c;终于落下帷幕。 北京时间 7 月 12 日&#xff08;周一&#xff09;凌晨&#xff0c;本届欧洲杯决赛中&#xff0c;意大利对阵英格兰。两队在 120 分钟时间里 1-1 战平&#xff0c;意大利在欧洲杯中通过点球大战以 3:2击败英格兰夺冠。 意大利上…

这10本书,带你了解 ChatGPT 的底层逻辑

文末赠书 文章来源&#xff1a;人民邮电出版社 自2022年11月30日发布以来&#xff0c;ChatGPT已经真正意义上地火爆全球&#xff1a;它在不到40天内就拥有了1000万用户&#xff0c;而Instagram足足用了355天&#xff1b;最近它的日活已经达到1000万&#xff0c;这意味着其用户已…

在线K歌场景下实时合唱方案选型分析

摘要 在线K歌软件的开发有许多技术难点&#xff0c;需考虑到音频录制和处理、实时音频传输和同步、音频压缩和解压缩、设备兼容性问题等技术难点外&#xff0c;此外&#xff0c;开发者还应关注音乐版权问题&#xff0c;确保开发的应用合规合法。 前言 前面写了几期关于直播 …

技术选型|K歌App中的实时合唱如何进行选型

摘要 在线K歌软件的开发有许多技术难点&#xff0c;需考虑到音频录制和处理、实时音频传输和同步、音频压缩和解压缩、设备兼容性问题等技术难点外&#xff0c;此外&#xff0c;开发者还应关注音乐版权问题&#xff0c;确保开发的应用合规合法。 前言 前面写了几期关于直播 …

【教你做直播产品】线上K歌软件开发技术选型

摘要 在线K歌软件的开发有许多技术难点&#xff0c;需考虑到音频录制和处理、实时音频传输和同步、音频压缩和解压缩、设备兼容性问题等技术难点外&#xff0c;此外&#xff0c;开发者还应关注音乐版权问题&#xff0c;确保开发的应用合规合法。 前言 前面写了几期关于直播 …

【转载】风控-风控策略逻辑

从现金贷平台方面来看&#xff0c;一是完善大数据体系和风控模型&#xff0c;放款给那些急需用钱的人&#xff0c;需要快速判断用户画像&#xff0c;需要很强的大数据和风控模型来做支撑。二是准确评估用户属性&#xff0c;产品定价回归理性。筛选出相对优质的客户群体&#xf…