>  기사  >  PHP 프레임워크  >  Thinkphp가 Douyin SDK를 통합하는 방법 이해

Thinkphp가 Douyin SDK를 통합하는 방법 이해

coldplay.xixi
coldplay.xixi앞으로
2020-08-14 16:44:155070검색

<img src="https://img.php.cn/upload/article/202008/14/2020081416430198815.jpg" alt="Thinkphp가 Douyin SDK를 통합하는 방법 이해" ><img src="https://img.php.cn/upload/article/202008/14/2020081416430198815.jpg" alt="Thinkphp가 Douyin SDK를 통합하는 방법 이해" >

由于抖音官方SDK相关教程太少, 所以本着 前人种树后人乘凉 的精神,写下本篇博客

第一步:下载抖音官方SDK

下载地址:抖音SDK官方下载
选择 Php下载地址 进行下载即可

相关学习推荐:thinkphp

第二步:将SDK导入

1.解压下载的压缩文件

2.在thinkphp项目的根目录(与application目录同级)下的extend目录下新建Douyin目录,再在Douyin目录里新建Open目录

3.将解压出来的php-sdk/douyin_open/lib目录里面的所有文件和文件夹全部复制到刚才新建的DouyinOpen目录下

复制完成后目录结构如下

第三步:安装guzzlehttp依赖

因为抖音的SDK基本都是基于guzzlehttp发送的请求,所以需要安装依赖

我这里使用Composer进行安装,如你还未安装Composer ,请先安装

  • 1.执行命令 composer require guzzlehttp/guzzle:~6.0
  • 2.安装完成后即可调用接口

第四步:接口调用

接口调用可参考下载的SDK内置的php-sdkdouyin_opentestApi,里面有大部分API调用方法,可参考调用

我这里只演示授权并获取用户信息

<?php
/**
 * Created by PhpStorm.
 * User: bigniu
 * Date: 2020-04-25
 * Time: 21:46:42
 */

namespace app\api\controller\v1;


use Douyin\Open\Api\DefaultApi;
use Douyin\Open\Api\UserInfoApi;
use Exception;
use GuzzleHttp\Client;
use think\Controller;

class Douyin extends Controller
{
  public function auth($code=&#39;&#39;)
  {
    //创建默认API的实例,verify=false不做ssl验证,否则可能报错,根据实际情况而定
    $apiInstance = new DefaultApi(new Client([&#39;verify&#39; => false]));
    //填写自己的client_key
    $client_key = "xxx";
    //填写自己的client_secret
    $client_secret = "xxx";
    $grant_type = &#39;authorization_code&#39;;//根据官方文档填写
    try {
      //调用获取AccessToken的接口
      $result = $apiInstance->oauthAccessTokenGet($client_key, $client_secret, $code, $grant_type);
    } catch (Exception $e) {
      return error("登录失败");
    }
    //判断返回的数据是否为空
    if (!$result) {
      return error("登录失败");
    }
    //判断返回的Message是否为error
    if ($result->getMessage() == &#39;error&#39;) {
      return error("登录失败");
    }
    //获取返回数据
    $data=$result->getData();
    //获取openid和access_toekn
    $openid = $data->getOpenId();
    $access_token = $data->getAccessToken();
    //创建用户信息API
    $userApi = new UserInfoApi(new Client([&#39;verify&#39; => false]));
    //获取用户信息
    $userInfo = $userApi->oauthUserinfoGetWithHttpInfo($access_token,$openid);
    dump($userInfo);

  }
}

常见问题整理

一、[0] 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"

重启web服务器

二、提示配置无效

调用授权登录接口https://open.douyin.com/platform/oauth/connect?client_key=xxx&response_type=code&scope=user_info&redirect_uri=redirect_uri&state=1提示授权失败或配置失效

问题原因

申请的应用为移动应用,实际调用为网页应用web扫码,网页应用在申请的时候有个授权域回调的配置,就是填写回调域名的

解决方案

重新申请网页应用,需要填写这个回调地址

三、获取用户信息报Invalid value for ‘e_account_role', must be one of ‘EAccountM', ‘EAccountS', ‘EAccountK'

调用UserInfoApioauthUserinfoGetWithHttpInfo接口出现该错误

问题原因

由于返回用户信息里的e_account_role

Douyin 공식 SDK 관련 튜토리얼은 너무 적기 때문에 선인들이 미래 세대가 그늘을 즐길 수 있도록 나무를 심었다는 정신으로 이 블로그를 작성합니다

1단계: Douyin 공식 SDK 다운로드

span>🎜🎜다운로드 주소: Douyin SDK 공식 다운로드
다운로드하려면 PHP 다운로드 주소를 선택하세요
🎜

🎜

🎜관련 학습 권장사항: thinkphp
🎜
🎜🎜2단계 : SDK를 가져옵니다🎜🎜🎜1. 다운로드한 압축 파일의 압축을 푼다🎜🎜2. thinkphp 프로젝트 루트 디렉터리 아래의 extend 디렉터리에 새 를 생성합니다. 응용 프로그램 디렉터리와 동일한 수준) >Douyin 디렉터리를 만든 다음 Douyin 디렉터리에 새 Open 디렉터리를 만듭니다.
🎜

🎜🎜3. 이동 압축이 풀린 php-sdk/douyin_open/lib 디렉토리 내부의 모든 파일과 폴더를 새로 생성된 DouyinOpen 디렉토리에 복사하세요.
🎜

🎜

복사 후 완료되면 디렉토리 구조는 다음과 같습니다
🎜

🎜

🎜3단계: guzzlehttp 종속성 설치🎜🎜🎜 Douyin의 SDK는 기본적으로 Request sent by guzzlehttp를 기반으로 하기 때문에 종속성을 설치해야 합니다🎜🎜Composer를 설치하지 않은 경우 <code>Composer를 사용하여 설치합니다. 먼저 설치해주세요🎜

  • 1. composer require guzzlehttp/guzzle:~6.0 명령을 실행하세요.
  • 2. , 인터페이스를 호출할 수 있습니다
🎜🎜4단계: 인터페이스 호출🎜🎜🎜인터페이스 호출은 내장된 php-sdkdouyin_opentestApi 대부분의 API 호출 메소드가 포함된 다운로드 SDK의 호출을 참조할 수 있습니다🎜🎜여기에서는 인증 및 사용자 정보 획득만 보여줍니다🎜rrreee🎜🎜자주 묻는 질문 구성🎜🎜🎜1.[0] cURL 오류 60: SSL 인증서 문제: 로컬 발급자 인증서를 얻을 수 없습니다(https://curl.haxx.se/libcurl/c 참조) /libcurl-errors.html) Error🎜🎜🎜문제 원인🎜🎜🎜이 오류는 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 끝에 추가하세요. 🎜rrreee🎜웹 서버를 다시 시작하세요. 🎜🎜2 구성이 유효하지 않다는 메시지를 표시하세요. 🎜🎜인증 로그인 인터페이스를 호출하세요. https://open.douyin.com/platform/oauth/connect?client_key=xxx&response_type=code&scope=user_info&redirect_uri=redirect_uri&state=1 인증 실패 메시지 또는 구성이 유효하지 않습니다🎜

🎜🎜🎜문제 원인🎜🎜🎜 신청한 애플리케이션은 모바일 애플리케이션이지만 실제 호출은 웹 애플리케이션웹 스캔 코드입니다. 신청 시 도메인 콜백 구성을 입력해야 합니다. 콜백 도메인 이름
🎜

🎜🎜🎜Solution🎜🎜🎜웹 애플리케이션을 다시 신청하려면 이 콜백 주소를 입력해야 합니다.
🎜

🎜🎜3. 사용자 정보를 얻고 'e_account_role'에 대한 잘못된 값을 보고합니다. 'EAccountM', 'EAccountS', 'EAccountK' 중 하나🎜🎜이 오류는 UserInfoApi🎜🎜🎜문제 원인🎜🎜🎜Due의 oauthUserinfoGetWithHttpInfo 인터페이스를 호출할 때 발생합니다. 사용자 정보의 e_account_role 필드가 null인데, 이는 API를 수정하면 해결될 수 있습니다. 이 오류는 일반적으로 모바일 애플리케이션의 client_key를 강제로 사용하는 등 비정상적인 API 호출로 인해 발생합니다. 🎜🎜🎜 솔루션 🎜🎜

반환된 사용자 정보의 e_account_role 필드가 null이므로 API를 수정하면 해결될 수 있습니다. e_account_role字段为null所导致,可通过修改API解决
根据TP的错误提示我们可以发下报错发生在DouyinOpenModelOauthUserinfoResponseData.php line 564
错误发生在第564行代码

将563 - 570行注释掉即可获取正常用户信息

修改前:

修改后:TP의 오류 메시지에 따라 DouyinOpenModelOauthUserinfoResponseData.php 564행
564행에서 오류가 발생했습니다

일반 사용자 정보를 얻으려면 563~570행을 주석 처리하세요

수정 전:

이후 수정:

🎜🎜🎜🎜🎜관련 학습 권장 사항: 🎜프로그래밍 비디오🎜🎜🎜

위 내용은 Thinkphp가 Douyin SDK를 통합하는 방법 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 jb51.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제