抖音接入
由于目前入职的公司开发一款app,需要获取抖音用户授权等信息,所以要用到抖音的接口。 这里吐槽一下抖音审核人员的审核效率,真是让人崩溃啊。。。
首先进入抖音开放平台,进行身份验证,需要审核机构信息,说好3个工作日,结果等了大半个月,电话打了又打,说是内测中。。。这就很无语了,内测中你让我们审核搞毛啊,效率还这么低。。。结果另外用了企业认证的抖音号去重新注册在提交第二天通过了。。。
审核通过后,你开发app就申请app应用,网站就申请网站应用。也是3个工作日,效率也是低的吓人且严格,审核三次才终于过了。
接下来你需要引入前端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授权
$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目录下 二、安装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即可,, ——————————————————————————————————————————————————————————————————————————————————————————————————————————— 最后,希望大家在这场疫情的打击下扛过去,今年行情太糟糕了,博主欲哭无泪啊。。。
扫描下方二维码,关注本人公众号:
___中国好码农