抖音开放平台-开发指南
<?phpnamespace app\common\libs;u app\common\exception\baexception;/** * class douyinapi * @package app\common\libs */class douyinapi{ private $host; //抖音接口api,api调用指南:/d/file/titlepic/814 private $appkey; //appkey private $appcret; //appcret private $accesstoken; //访问令牌 private $refreshtoken; //刷新令牌 private $versionnumber; //api协议版本,当前版本为 2 private $versionnumberstr; //api协议版本,当前版本为 v2 public function __construct() { $this->host = 'https://openapi-fxg.jinritemai.com'; //接口访问地址 $this->appkey = '你的抖音后台的appkey'; $this->appcret = '你的抖音后台的appcret'; $this->versionnumber = '2'; $this->versionnumberstr = 'v' . $this->versionnumber; //获取access_token,refresh_token放到最后,如果其他的如versionnumber在后面设置则报错:"v不可为空",因为handletoken中调用了versionnumber,但versionnumber此时的值为null $result = lf::handletoken(); //创建token// $result = lf::handletoken(fal); //刷新token:提示-"缺少code",需要建一张第三方表存抖音该店铺的access_token,refresh_token,expire_time信息 $清新散文this->accesstoken = $result['access_token']; //用于出创建token接口之外的其他接口 $this->refreshtoken = $result['refresh_token']; //用于刷新token接口 } /** * 处理(创建/刷新)token的方法 * 开发指南 > 产品功能 > 授权介绍 -> 自用型应用店铺授权流程:/d/file/titlepic/21 * @param bool $createtoken 是否调用创建token的方法 * @return array * @throws baexception */ public function handletoken($createtoken = true) { if ($createtoken) { //调用创建token接口 $param = [ 'code' => '', 'grant_type' => 'authorization_lf', 'shop_id' => '你抖音店铺的id', //店铺id,仅自用型应用有效;若不传,则默认返回最早授权成功店铺对应的token信息 ]; $method = 'token.create'; } el { //调用刷新token方法 $param = [// 'app_id' => '', //应用key ,长度19位字母和数字组合的字符串,可不传 'refresh_token' => $this->refreshtoken, //注意:传真实的refreshtoken值,而不是传refresh_token 'grant_type' => 'refresh_token', ]; $method = 'token.refresh'; } $timestamp = time(); //接口请求前记录开始时间,防止过期时间$expiretime失效 $result = lf::fetch($method, $param); if ($result['code'] != 10000) { //请求失败 throw new baexception($result['message']); } el { $data = $result['data']; $accesstoken = $data['access_token']; //accesstoken $refreshtoken = $data['refresh_token']; //refreshtoken $expiretime = $timestamp + $data['expires_in']; //token过期时间 = 当前时间 + 有效时间(秒s) return [ 'access_token' => $accesstoken, 'refresh_token' => $refreshtoken, ]; } } /** * 封装抖音接口公共方法 * php调用说明:/d/file/titlepic/811 * @param $method 方法名:格式 token.c129运动及其历史意义reate 方法中转为 token/create * @param $param 请求接口需要的参数名 * @param bool $accesstoken url中是否要加上access_token,默认否。 * 为什么不直接传accesstoken的值:在本类中,可以获取到accesstoken的值,直接传,但是如果在其他的地方调用就获取不到access_token的值,需要传true/fal标识在本类中获取。 * @param bool $paramjsonaddtourl 是否把paramjson放到 url 中,根据实际情况 * 例:实际过程中【订单批量解密接口】不需要放到url中(猜测是这个接口paramjson内容太多,会超出get的最大内容) * 订单批量解密接口:/d/file/titlepic/982 * @return fal|mixed|string */ function fetch($method, $param, $accesstoken = fal, $paramjsonaddtourl = true) { //当前时间戳 $timestamp = time(); //php中:如果数组为空转为json之后是[]。但接口可能是强类型语言编写的,需要传{}。所以$param为空时,需要把$paramjson设置为{} $paramjson = $param ? lf::marshal($param) : '{}'; //获取签名 $sign = lf::sign($method, $timestamp, $paramjson); //调用的方法.替换为/ $methodpath = str_replace('.', '/', $method); //拼接url路径 $url = $this->host . '/' . $methodpath . '?method=' . urlencode($method) . '&app_key=' . urlencode($this->appkey); if ($accesstoken) { $url .= '&access_token=' .urlencode($this->accesstoken); } $url .= '×tamp=' . urlencode(strval($timestamp)) . '&v=' . urlencode($this->versionnumber) . '&sign=' . $sign; if ($paramjsonaddtourl) { $url .= '&皇帝英文param_json=' . $paramjson; } $url .= '&sign_method=' . urlencode('hmac-sha256'); //官方接口为非必填,但是不加签名会验证失败 //处理句柄数据 $opts = array('http' => array( 'method' => 'post', 'header' => "accept: */*\r\n" . "content-type: application/json;chart=utf-8\r\n", 'content' => $paramjson ) ); $context = stream_context_create($opts); $result = file_get_contents($url, fal, $context); return json_decode($result,true); } //计算签名 function sign($method, $timestamp, $paramjson) { $parampattern = 'app_key' . $this->appkey . 'method' . $method . 'param_json' . $paramjson . 'timestamp' . $timestamp . $this->versionnumberstr; $signpattern = $this->appcret . $parampattern . $this->appcret; return hash_hmac("sha256", $signpattern, $this->appcret); } //序列化参数,入参必须为关联数组(键值对数组) function marshal(array $param) { lf::rec_ksort($param); // 对关联数组中的kv,执行排序,需要递归 $s = json_encode($param, json_unescaped_slashes | json_unescaped_unicode); // 重新序列化,确保所有key按字典序排序 // 加入flag,确保斜杠不被escape,汉字不被escape return $s; } //关联数组排序,递归 function rec_ksort(array &$arr) { $kstring = true; foreach ($arr as $k => &$v) { if (!is_string($k)) { $kstring = fal; } if (is_array($v)) { lf::rec_ksort($v); //这里的调用方式要和marshal中调用方式一致 } } if ($kstring) { ksort($arr); } }}
__construct()
方法 $this->appkey
中加上你的真实appkey在 __construct()
方法 $this->appcret
中加上你的真实appcret在 handletoken()
方法 shop_id
中加上你真实的抖音店铺idthird_shop(第三方店铺表)
:存放第三方店铺(比如:抖音)的信息,表的字段大致有:id;shop_name:店铺名;third_shop_id:第三方店铺的id,source:店铺来源(抖音,京东,天猫);app_key,app_cret,access_token,refresh_token,expire_time:过期时间;status:状态(0-关闭;1-启用),create_time,update_time ...
我们要对接抖音前,在third_shop
中写好 id;shop_name:店铺名;third_shop_id:第三方店铺的id,source:店铺来源(抖音,京东,天猫);app_key,app_cret;status:状态(0-关闭;1-启用),create_time,update_time ....
在 __construct()
中先查询店铺的信息,如果 access_t熨斗古镇oken为空
或者 expire_time过期时间 小于 当前时间
,则需要重新生成 access_token,refresh_token,expire_time:过期时间
在 handletoken()
中加上third_shop 表
更新操作;否则取数据表中未过期的 access_token,refresh_token
用于接口调用1、param为空的问题:param为空,$paramjson字符串的值为 {}
,而不是 []
2、rec_ksort递归调用的问题:rec_ksort中调用rec_ksort方式要和marshal中调用rec_ksort方式一致
3、paramjson何时传的问题:如果接口请求数据太大,get请求可能会超出最大值,则 fetch()
中 $paramjsonaddtourl
可试着传 fal
订单列表中 请求参数、响应参数 main_status
,每个数字代表什么意思,没有清楚的给出,如下图:
给了,在订单详情 接口的 响应参数
中,如下图:
2、页码从第0页开始(这个属于需要注意的点)
3、金额 是元 还是 分,不清晰
不给的话,那就默认为:分
到此这篇关于php对接抖音开发平台接口的详细教程的文章就介绍到这了,更多相关php 抖音开发平台接口内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
本文发布于:2023-04-04 13:02:17,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/843ac13ac4b7f3297edd5d8c765edb91.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:PHP对接抖音开发平台接口的详细教程.doc
本文 PDF 下载地址:PHP对接抖音开发平台接口的详细教程.pdf
留言与评论(共有 0 条评论) |