抖音接入

抖音接入

由于目前入职的公司开发一款app,需要获取抖音用户授权等信息,所以要用到抖音的接口。 这里吐槽一下抖音审核人员的审核效率,真是让人崩溃啊。。。

首先进入抖音开放平台,进行身份验证,需要审核机构信息,说好3个工作日,结果等了大半个月,电话打了又打,说是内测中。。。这就很无语了,内测中你让我们审核搞毛啊,效率还这么低。。。结果另外用了企业认证的抖音号去重新注册在提交第二天通过了。。。

审核通过后,你开发app就申请app应用,网站就申请网站应用。也是3个工作日,效率也是低的吓人且严格 filefile, 审核三次才终于过了。


接下来你需要引入前端SDK,以及后端的SDK。 由于本人用到的是PHP语言开发,这里就以PHP为列了,其他语言自行查找注意事项。 注意事项: 1 版本必须为php7.1 2 当本地curl需要访问https时,出现SSL certificate: unable to get local issuer certificate 错误信息 解决办法: 到http://curl.haxx.se/ca/cacert.pem下载pem文件,并将文件拷贝到D:\phpStudy\PHPTutorial\cacert.pem (根据实际修改) 在 php.ini 增加 curl.cainfo = “文件路径\cacert.pem” 3授权 file

 $ClientKey=应用key; 
    $douyinClientSecret=应用secret;
        $code=前端返回的code;
    $url="https://open.douyin.com/platform/oauth/connect/?client_key=".$ClientKey."&response_type=“.$code.”&scope=user_info,fans.data&redirect_uri=回调地址";
 echo '<a href="'.$url.'" title="点击登录" target="_blank">登录</a><br/>';

点击登录即会跳转到抖音授权登录界面 使用抖音登录会跳转到回调地址 授权成功你会获取到access_token,open_id等信息,用他们你可以去获取到抖音用户的信息,粉丝,关注列表,视频,评论,商品橱窗等,当然个别接口需要企业号授权才能调用的。 接下的操作 一、PHP的SDK下载后,解压下载的压缩文件,在Laravel根目录app目录下新建Douyin目录,在Douyin目录里新建Open目录,将解压出来的php-sdk/douyin_open/lib目录里面的所有文件和文件夹全部复制到刚才新建的Douyin\Open目录下file

二、安装guzzlehttp依赖。 因为抖音的SDK基本都是基于guzzlehttp发送的请求,所以需要安装依赖 我这里使用Composer进行安装,如你还未安装Composer ,请先安装 1.执行命令 composer require guzzlehttp/guzzle:~6.0 2.安装完成后即可调用接口 接口调用可参考下载的SDK的php-sdk\douyin_open\test\Api,里面有大部分API调用方法,可参考调用 这里只演示个别接口,如要用到其他接口可以结合抖音开放平台接口文档以及下载的SDK考量


<?php

namespace App\Services\Api\douyin;

use Illuminate\Support\Facades\Redis;

use App\Douyin\Open\Api\DefaultApi;
use App\Douyin\Open\Api\UserInfoApi;
use App\Douyin\Open\Api\FansListApi;
use App\Douyin\Open\Api\VideoListApi;
use App\Douyin\Open\Api\VideoDataApi;
use App\Douyin\Open\Model\VideoDataBody;
use Exception;
use GuzzleHttp\Client;

class IndexService
{
    /*获取用户授权*/
    public function Authorization(array &$postData){
        $user=json_decode(Redis::get($postData['token']),true);

        $apiInstance = new DefaultApi(new Client(['verify' => false]));
        $client_key = "xxx";/*应用key*/
        //填写自己的client_secret
        $client_secret = "xxx";/*应用secret*/
        $grant_type = 'authorization_code';//根据官方文档填写
        $code=100;/*返回code*/
        try {
          //调用获取AccessToken的接口
          $result = $apiInstance->oauthAccessTokenGet($client_key, $client_secret, $code, $grant_type);
        } catch (Exception $e) {
          return array('code'=>1,'msg' =>"授权失败");
        }
        //判断返回的数据是否为空
        if (!$result) {
          return array('code'=>1,'msg' =>"授权失败");
        }
        //判断返回的Message是否为error
        if ($result->message == 'error') {
          return array('code'=>1,'msg' =>"授权失败");
        }

        //获取返回数据
        $data=$result->getData();
        //获取openid和access_toekn
        $openid = $data->getOpenId();
        $access_token = $data->getAccessToken();
        //创建用户信息API
        $userApi = new UserInfoApi(new Client(['verify' => false]));
        //获取用户信息
        $userInfo = $userApi->oauthUserinfoGetWithHttpInfo($access_token,$openid);
        dd($userInfo);
    }
    /*获取用户公开信息*/
    public function UserinfoGet(array &$postData){
        $apiInstance = new UserInfoApi( new Client());
        $access_token="access_token";/*调用/oauth/access_token/生成的token,此token需要用户授权。*/
        $open_id="open_id";/*通过/oauth/access_token/获取,用户唯一标志*/
        try {
           $result = $apiInstance->oauthUserinfoGet($access_token, $open_id);
        } catch (Exception $e) {
          return array('code'=>1,'msg' =>"登录失败");
        }
        //判断返回的数据是否为空
        if (!$result) {
          return array('code'=>1,'msg' =>"登录失败");
        }
        //判断返回的Message是否为error
        if ($result->message == 'error') {
          return array('code'=>1,'msg' =>"登录失败");
        }
        dd($result);
    }

    /*获取用户粉丝*/
    public function FansListGet(array &$postData){
        $apiInstance = new FansListApi(
            new Client()
        );
        $open_id = "open_id"; // string | 通过/oauth/access_token/获取,用户唯一标志
        $access_token = "access_token"; // string | 调用/oauth/access_token/生成的token,此token需要用户授权。
        $count = !empty($postData['count'])?$postData['count']:10; // int | 每页数量
        $cursor = !empty($postData['cursor'])?$postData['cursor']:0; // int | 分页游标, 第一页请求cursor是0, response中会返回下一页请求用到的cursor, 同时response还会返回has_more来表明是否有更多的数据。

        try {
            $result = $apiInstance->fansListGet($open_id, $access_token, $count, $cursor);   
        } catch (Exception $e) {
            return array('code'=>1,'msg' =>"获取粉丝列表失败");
        }
        if($result->data->description="access_token过期,请刷新或重新授权"){
            return array('code'=>1,'msg' =>$result->data->description);
        }
        dd($result);
    }
    /*抖音用户视频数据*/
    public function VideoListGet (array &$postData){
        $apiInstance =  new VideoListApi(
            new Client()
        );
        $open_id ="open_id"; // string | 通过/oauth/access_token/获取,用户唯一标志
        $access_token = "access_token"; // string | 调用/oauth/access_token/生成的token,此token需要用户授权。
        $count = !empty($postData['count'])?$postData['count']:10; // int | 每页数量
        $cursor = !empty($postData['cursor'])?$postData['cursor']:0; // int | 分页游标, response中会返回下一页请求用到的cursor, 同时response还会返回has_more来表明是否有更多的数据。
        try {
            $result = $apiInstance->videoListGet($open_id, $access_token, $count, $cursor); 
        } catch (Exception $e) {
            return array('code'=>1,'msg' =>"获取粉丝列表失败");
        }
        if($result->data->description="access_token过期,请刷新或重新授权"){
            return array('code'=>1,'msg' =>$result->data->description);
        }
        dd($result); 
    }
    /*指定视频数据*/
    public function VideoDataApi(array $postData){
        $apiInstance =  new VideoDataApi(
            new Client()
        );
        $body=new VideoDataBody();
        $open_id = "open_id"; // string | 通过/oauth/access_token/获取,用户唯一标志
        $access_token ="access_token"; // string | 调用/oauth/access_token/生成的token,此token需要用户授权。
        try {
            $result = $apiInstance->videoDataPost($body, $open_id, $access_token);
        } catch (Exception $e) {
            return array('code'=>1,'msg' =>"获取指定视频数据失败");
        }
        if($result->data->description="access_token过期,请刷新或重新授权"){
            return array('code'=>1,'msg' =>$result->data->description);
        }
        dd($result); 
    }

}

问题: cURL error 60: SSL certificate problem: unable to get local issuer certificate (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) 错误

问题原因 该错误是由于 SSL证书 验证的原因 解决方案1: 只需要把$apiInstance = new DefaultApi(new Client());改为$apiInstance = new DefaultApi(new Client(['verify'=>false])); 即可,主要是修改new Client()这里,其他API同样 解决方案2: 下载一个ca-bundle.crt ,放到对应的目录,在php.ini文件中配置下路径 https://github.com/bagder/ca-bundle/blob/e9175fec5d0c4d42de24ed6d84a06d504d5e5a09/ca-bundle.crt 在php.ini的末尾加入 , curl.cainfo="真实路径/ca-bundle.crt"

在调用接口获取数据时有时候个别接口报错,如:获取用户信息等接口,只需要在其调用文件返回的地方ObjectSerializer::deserialize($content, $returnType, []),替换为$content即可, filefile


最后,希望大家在这场疫情的打击下扛过去,今年行情太糟糕了,博主欲哭无泪啊。。。

扫描下方二维码,关注本人公众号: file
file

___中国好码农

猜你喜欢