<sup id="m40ya"></sup>
  • 
    
  • <kbd id="m40ya"></kbd>
    <samp id="m40ya"></samp>
    <ul id="m40ya"></ul>
  • 更多精彩內容,歡迎關注:

    視頻號
    視頻號

    抖音
    抖音

    快手
    快手

    微博
    微博

    PHP對接抖音開發平臺接口的詳細教程

    導讀本文主要介紹了PHP對接抖音開發平臺接口的詳細教程,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下。

    一、說明

    二、代碼

    三、代碼運行需知

    四、功能擴展

    五、接口調用需要注意的點

    六、接口文檔中的 ‘坑'(以訂單列表接口為例)

    1、請求參數、響應參數 代表的具體值不清晰

    一、說明

    抖音開放平臺-開發指南

    二、代碼
    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接口
    ????}
    
    ????/**
    ?????*?處理(創建/刷新)Token的方法
    ?????*?開發指南?>?產品功能?>?授權介紹?->?自用型應用店鋪授權流程:https://op.jinritemai.com/docs/guide-docs/9/21
    ?????*?@param?bool?$createToken?是否調用創建Token的方法
    ?????*?@return?array
    ?????*?@throws?BaseException
    ?????*/
    ????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,
    ????????????];
    ????????}
    ????}
    
    ????/**
    ?????*?封裝抖音接口公共方法
    ?????*?PHP調用說明:https://op.jinritemai.com/docs/guide-docs/151/811
    ?????*?@param?$method?方法名:格式?token.create?方法中轉為?token/create
    ?????*?@param?$param?請求接口需要的參數名
    ?????*?@param?bool?$accessToken?url中是否要加上access_token,默認否。
    ?????*??????????????為什么不直接傳accessToken的值:在本類中,可以獲取到accessToken的值,直接傳,但是如果在其他的地方調用就獲取不到access_token的值,需要傳true/false標識在本類中獲取。
    ?????*?@param?bool?$paramJsonAddToUrl?是否把paramJson放到?url?中,根據實際情況
    ?????*??????????例:實際過程中【訂單批量解密接口】不需要放到url中(猜測是這個接口paramJson內容太多,會超出GET的最大內容)
    ?????*??????????????訂單批量解密接口:https://op.jinritemai.com/docs/api-docs/15/982
    ?????*?@return?false|mixed|string
    ?????*/
    ????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?.=?'×tamp='?.?urlencode(strval($timestamp))?.
    ????????????'&v='?.?urlencode($this->versionNumber)?.
    ????????????'&sign='?.?$sign;
    
    ????????if?($paramJsonAddToUrl)?{
    ????????????$url?.=?'¶m_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用于接口調用

    五、接口調用需要注意的點

    1、param為空的問題:param為空,$paramJson字符串的值為 {},而不是 []

    2、rec_ksort遞歸調用的問題:rec_ksort中調用rec_ksort方式要和marshal中調用rec_ksort方式一致

    3、paramJson何時傳的問題:如果接口請求數據太大,GET請求可能會超出最大值,則 fetch() 中 $paramJsonAddToUrl 可試著傳 false

    六、接口文檔中的 ‘坑'(以訂單列表接口為例)1、請求參數、響應參數 代表的具體值不清晰

    訂單列表中請求參數、響應參數main_status,每個數字代表什么意思,沒有清楚的給出,如下圖:

    給了,在訂單詳情 接口的 響應參數 中,如下圖:

    2、頁碼從第0頁開始(這個屬于需要注意的點)

    3、金額 是元 還是 分,不清晰

    不給的話,那就默認為:分

    到此這篇關于PHP對接抖音開發平臺接口的詳細教程的文章就介紹到這了,希望大家以后多多支持好二三四!

    為你推薦
    資訊專欄
    熱門視頻
    相關推薦
    PHP7中對十六進制字符串處理的問題詳解 php生成唯一uid的解決方法詳解 php兩種基本的輸出方及實例詳解 PHP遍歷數組的6種方式總結 JS截取字符串的三種方法詳解 Python常用的正則表達式處理函數詳解 一文秒懂python正則表達式常用函數 python正則表達式語法學習筆記 Python&nbsp;垃圾回收機制詳解 Python實現城市公交網絡分析與可視化 Python數據分析處理(三)--運動員信息的分組與聚合 基于Python實現PDF區域文本提取工具 詳解python的循環 python實現新年倒計時實例代碼 Python實現消消樂小游戲 學習python的while循環嵌套 提升Python運行速度的5個小技巧 Python按鍵或值對字典進行排序 圖像檢索之基于vlfeat實現SIFT特征 python繪圖中的四個繪圖技巧 php7安裝mysqli實例講解 php去掉一維數組的鍵值的實例方法 PHP中empty()和isset()的區別介紹 PHP實現JWT的Token登錄認證 php判斷時間戳是否為今天實例講解 PHP7 preg_replace出錯及解決辦法 五年班的學習計劃怎么寫 五年級的學習計劃 初中新學期學習計劃怎么寫 關于英語的學習計劃怎么寫 怎么寫暑假學習計劃書 4年級數學學習計劃怎么寫 后半學期的學習計劃怎么寫 上學期學習計劃怎么寫 五年級的學習計劃書怎么寫 小學一年級學習計劃怎么寫 暑假學習計劃表怎么寫 八年級學習計劃怎么寫 暑期學習計劃表怎么寫 小學四年級學習計劃怎么寫 一年級的學習計劃怎么寫
    Top 2021国产精品自产拍在线观看| 国产精品国产三级国产专播下| 香蕉精品高清在线观看视频| 成人午夜精品网站在线观看| 国产精品无码一区二区在线观一| 精品小视频在线观看| 999精品视频在线观看热6| 日韩成人精品日本亚洲| 久章草在线精品视频免费观看| 亚洲欧洲美洲无码精品VA| 99久久99久久精品免费观看| 精品国产亚洲AV麻豆| 久草精品视频在线播放| 久久精品国产一区二区三区| 亚洲日本久久久午夜精品| 国产69精品久久久久99尤物| 国产精品成人va| 少妇伦子伦精品无吗| 国产精品无码久久av| 久久久免费精品re6| 精品一区二区在线观看| 国产成人精品男人的天堂网站| 黑人无码精品又粗又大又长| 91精品导航在线网址免费| 国产精品无码v在线观看| 国产精品资源在线观看| 国产精品女主播自在线拍| 国产精品视频白浆免费视频| 六月婷婷精品视频在线观看| 91麻豆精品国产91久久久久久| 宅男宅女精品国产av天堂| 久久精品美女视频| 国精无码欧精品亚洲一区| 国产精品亚洲色图| 国产精品漂亮美女在线观看| 精品精品国产自在97香蕉| 精品哟哟哟国产在线观看不卡| 国产精品视频白浆免费视频| 国产拍揄自揄精品视频| 亚洲精品乱码久久久久久蜜桃不卡| 模特私拍国产精品久久|