抖音接入
由于目前入职的公司开发一款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即可,,
———————————————————————————————————————————————————————————————————————————————————————————————————————————
最后,希望大家在这场疫情的打击下扛过去,今年行情太糟糕了,博主欲哭无泪啊。。。
扫描下方二维码,关注本人公众号:
___中国好码农
猜你喜欢
Laravel队列的实现
阅读 1336Laravel 队列的简单使用例子
基于 Swoole 实现简单的 WebSocket 服务器及客户端
阅读 1319基于 Swoole 实现简单的 WebSocket 服务器及客户端
Resultful API规范
阅读 811什么是resultful
Swoole 扩展安装与使用入门
阅读 1907Swoole从入门到实战
Layui富文本视频等多功能
阅读 702Layui富文本多功能添加
Git使用
阅读 669Git基本配置/服务器搭建仓库
微擎常用记录
阅读 752微擎常用记录
Laravel验证码
阅读 712Composer生成Laravel验证码