Jtti广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP对接抖音开发平台接口的详细教程
  • 318
分享到

PHP对接抖音开发平台接口的详细教程

PHP 抖音开发平台接口PHP 抖音开发 2014-06-16 12:06:00 318人浏览 绘本
摘要

目录一、说明二、代码三、代码运行需知 四、功能扩展五、接口调用需要注意的点六、接口文档中的 ‘坑'(以订单列表接口为例)1、请求参数、响应参数 代表的具体值不清晰一、说明 抖音开放平台-开发指南 二、代码 <?PHP na

目录
  • 一、说明
  • 二、代码
  • 三、代码运行需知
  • 四、功能扩展
  • 五、接口调用需要注意的点
  • 六、接口文档中的 ‘坑'(以订单列表接口为例)
    • 1、请求参数、响应参数 代表的具体值不清晰

一、说明

抖音开放平台-开发指南

二、代码


<?PHP
namespace app\common\libs;

use app\common\exception\BaseException;


class DouYinapi
{
    private $host; //抖音接口API,API调用指南:https://op.jinritemai.com/docs/guide-docs/148/814
    private $appKey; //appKey
    private $appSecret; //appSecret
    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->appSecret = '你的抖音后台的appSecret';

        $this->versionNumber = '2';
        $this->versionNumberStr = 'v' . $this->versionNumber;

        //获取access_token,refresh_token放到最后,如果其他的如versionNumber在后面设置则报错:"v不可为空",因为handleToken中调用了versionNumber,但versionNumber此时的值为NULL
        $result = self::handleToken(); //创建Token
//        $result = self::handleToken(false); //刷新Token:提示-"缺少code",需要建一张第三方表存抖音该店铺的access_token,refresh_token,expire_time信息
        $this->accessToken = $result['access_token']; //用于出创建token接口之外的其他接口
        $this->refreshToken = $result['refresh_token']; //用于刷新token接口
    }

    
    public function handleToken($createToken = true)
    {
        if ($createToken) { //调用创建token接口
            $param = [
                'code' => '',
                'grant_type' => 'authorization_self',
                'shop_id' => '你抖音店铺的ID', //店铺ID,仅自用型应用有效;若不传,则默认返回最早授权成功店铺对应的token信息
            ];
            $method = 'token.create';

        } else { //调用刷新Token方法
            $param = [
//                'app_id' => '', //应用key ,长度19位字母和数字组合的字符串,可不传
                'refresh_token' => $this->refreshToken, //注意:传真实的refreshToken值,而不是传REFRESH_TOKEN
                'grant_type' => 'refresh_token',
            ];
            $method = 'token.refresh';
        }

        $timestamp = time(); //接口请求前记录开始时间,防止过期时间$expireTime失效
        $result = self::fetch($method, $param);
        if ($result['code'] != 10000) { //请求失败
            throw new BaseException($result['message']);
        } else {
            $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,
            ];
        }
    }

    
    function fetch($method, $param, $accessToken = false, $paramJSONAddToUrl = true)
    {
        //当前时间戳
        $timestamp = time();

        //php中:如果数组为空转为json之后是[]。但接口可能是强类型语言编写的,需要传{}。所以$param为空时,需要把$paramJson设置为{}
        $paramJson = $param ? self::marshal($param) : '{}';

        //获取签名
        $sign = self::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 .= '&timestamp=' . 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;charset=UTF-8\r\n",
                'content' => $paramJson
            )
        );

        $context = stream_context_create($opts);
        $result = file_get_contents($url, false, $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->appSecret . $paramPattern . $this->appSecret;

        return hash_hmac("sha256", $signPattern, $this->appSecret);
    }

    //序列化参数,入参必须为关联数组(键值对数组)
    function marshal(array $param)
    {
        self::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 = false;
            }
            if (is_array($v)) {
                self::rec_ksort($v); //这里的调用方式要和marshal中调用方式一致
            }
        }
        if ($kstring) {
            ksort($arr);
        }
    }
}

三、代码运行需知

  • __construct() 方法 $this->appKey 中加上你的真实appKey
  • __construct() 方法 $this->appSecret 中加上你的真实appSecret
  • handleToken() 方法 shop_id 中加上你真实的抖音店铺ID

四、功能扩展

  • 加一张数据表 third_shop(第三方店铺表):存放第三方店铺(比如:抖音)的信息,表的字段大致有:id;shop_name:店铺名;third_shop_id:第三方店铺的ID,source:店铺来源(抖音,京东,天猫);app_key,app_secret,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_secret;status:状态(0-关闭;1-启用),create_time,update_time ....
  • __construct()中先查询店铺的信息,如果 access_token为空 或者 expire_time过期时间 小于 当前时间,则需要重新生成 access_token,refresh_token,expire_time:过期时间handleToken() 中加上third_shop 表更新操作;否则取数据表中未过期的 access_token,refresh_token用于接口调用

五、接口调用需要注意的点

param为空的问题:param为空,$paramJson字符串的值为 {},而不是 []

rec_ksort递归调用的问题:rec_ksort中调用rec_ksort方式要和marshal中调用rec_ksort方式一致

paramJson何时传的问题:如果接口请求数据太大,GET请求可能会超出最大值,则 fetch()$paramJsonAddToUrl 可试着传 false

六、接口文档中的 ‘坑'(以订单列表接口为例)

1、请求参数、响应参数 代表的具体值不清晰

订单列表中 请求参数、响应参数 main_status,每个数字代表什么意思,没有清楚的给出,如下图:

在这里插入图片描述

给了,在订单详情 接口的 响应参数 中,如下图:

在这里插入图片描述

页码从第0页开始(这个属于需要注意的点)

在这里插入图片描述

金额 是元 还是 分,不清晰

不给的话,那就默认为:

在这里插入图片描述

到此这篇关于PHP对接抖音开发平台接口的详细教程的文章就介绍到这了,更多相关PHP 抖音开发平台接口内容请搜索编程界以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程界!

--结束END--

本文标题: PHP对接抖音开发平台接口的详细教程

本文链接: https://www.lsjlt.com/news/45.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • PHP抖音小程序登录接口及微信和抖音数据互通
    小程序静默登录 public function douyinlogin() { $config = Config::get('douyin'); $code = $this->request...
    364
    2023-09-27
    php 小程序 微信
  • 抖音是go语言开发的吗
    抖音是go语言开发的,go语言的设计目标是提供一种简单、直观、高效的编程语言,以满足现代计算机系统的需求,它具有良好的并发性能和高效的编译速度,非常适合构建高性能的后端服务。借助go语言的高并发性能和可靠性,抖音能够处理大量的请求和数据,保...
    507
    2023-09-27
  • PHP商城开发中的多平台对接技巧
    PHP商城是一款基于PHP语言开发的网上购物系统,可以帮助用户实现在线购物、支付、物流等功能。在现代商业环境中,越来越多的人们习惯通过互联网购买商品和服务,因此PHP商城的发展前景十分广阔。但是,在PHP商城开发过程中,如何实现多平台对接是...
    897
    2023-09-27
    技巧 PHP商城开发 多平台对接
  • v.douyin.com/xxx抖音网址官方生成制作抖音缩短口令网址php接口方法
    v.douyin.com是抖音官方的接口,可以制作头条,火山,抖音短视频等官方域名的任意生成接口,可以推广抖音号,第三方网址,头条文章等,效果非常号,这里记录下api接口,纯技术php生成,具体规则可以去抖音的开放平台去申请对应接口 。这里...
    498
    2023-09-27
    php 开发语言 前端
  • java开发平台有哪些
    java的开发平台有:1.Jbuilder,java可视化开发工具;2.Eclipse,基于java的可扩展开发平台;3.NetBeans,开放框架的、可扩展的开发平台;java的开发平台有以下几种JbuilderJbuilder是一个ja...
    604
    2023-09-27
    Java
  • 如何理解ERP开发平台
    如何理解ERP开发平台,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。下面简单整理一下ERP开发平台的主要作用和结构:主要作用:让业务组的程序员能根据业务需求快速开发单据,分工合...
    809
    2023-09-27
  • 推荐一款快速开发平台,web中最好的快速开发平台
    力软快速开发平台是力软自主开发的基于SOA面向服务的应用系统开发平台,可以方便快捷的搭建企业、医院、工厂、学校等行业的企业级运营管理平台。平台采用.net.技术架构,webapi服务搭建。 力软...
    662
    2023-09-27
    web 中最 好的
  • 抖音团购券码核销PHP
    近期项目需要,抖音团购的券码核销,网上找了好久也没找到,只能自己手敲了。。。话不多说,直接上代码吧! 凑合着用吧,反正能销,具体业务还得自己码代码了 ...
    842
    2023-09-27
    php
  • java对接支付宝支付接口开发详细步骤
    目录第一步第二步第三步第四步对接支付宝支付接口,官方文档已经写的很清楚了,但是也有很多像我一样的小白,第一次对接支付宝支付接口,会有些迷茫,所以我在此写下这篇文章,给我和我一样的同学...
    510
    2023-09-27
    java对接支付宝支付接口 java 支付宝支付接口
  • DSW:面向AI研发的集成开发平台
    发布会传送门产品详情云原生技术,注重用户体验,提升研发效率环境搭建是算法研发过程中的重要一环,这里除了硬件选型外,软件环境的安装配置,后续升级往往会耗费不少时间。DSW借助阿里云ECS,Docker和Kubernetes等云原生技术,能够在...
    490
    2023-09-27
  • windows 8 开发之开发平台与开发框架的应用
    windows 8 开发之开发平台与开发框架的应用 win8 App开发主要分成两部分,desktop app和metro app。右边蓝色的部分就是desktop app的部分,也是从wi...
    135
    2023-09-27
    框架 平台 windows
  • 什么是低代码开发平台
    这篇文章主要讲解了“什么是低代码开发平台”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“什么是低代码开发平台”吧!低代码开发平台是什么:在低代码平台,技术人员...
    338
    2023-09-27
    低代码
  • 如何搭建Carbide C++开发平台
    如何搭建Carbide C++开发平台,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。对Carbide C++运行之前,要知道Carbide.c++是Nokia和Eclips...
    771
    2023-09-27
  • 抖音小程 服务端OpenAPI 开发示例
    开发流程如下图 为方便开发 我用的是沙盒模式 开放平台前三个接口开发流程如下,我的代码没做相关优化 代码如下 1、 接口调用凭证 //接口调用凭证 public function get...
    187
    2023-09-27
    javascript json php
  • PHP怎么获取抖音无水印视频
    本篇内容介绍了“PHP怎么获取抖音无水印视频”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Videoparse短视频解析接口支持:抖音、快手...
    308
    2023-09-27
  • Android仿抖音APP
    国庆放假,自己撸的App 模仿抖音写的App,实现了类似抖音的部分功能。即使聊天部分还没有写完,抽空写完,开源 功能简单,为提高代码的复用性,采用封装--- 效果图 开发环境...
    688
    2023-09-27
    app Android
  • 抖音设备注册
    import hashlibimport jsonimport randomimport reimport requestsimport timeimport uuiddef get_md5(data): return hashli...
    392
    2023-09-27
    python 前端 java
  • 在海之舟大数据平台上搭建mysql+php开发平台
    海之舟服务器操作系统基于国产arm64,3399cpu,分a版,b版,a版内置了大量软件,开发接口范例。操作系统是个.img的文件,在windows7下刷入tf卡,开机即可启动。启动后ssh登陆,操作界面如下。配置文件设置开机启动root@...
    738
    2023-09-27
  • 怎么用PHP获取抖音无水印视频
    这篇文章主要介绍“怎么用PHP获取抖音无水印视频”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么用PHP获取抖音无水印视频”文章能帮助大家解决问题。这里说的解析抖音无水印视频是通过调用第三方接口来...
    316
    2023-09-27
  • PHP抖音最新视频提取代码
    PHP抖音视频最新提取代码 研究了很多天,发现直接调用接口感觉不太行,所以只能采集HTML页面内容了。 下面直接附上代码吧 需要安装插件库 use GuzzleHttp\Client; 这里大家自行百...
    388
    2023-09-27
    音视频 java 网络
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作