国产精品亚洲AV三区_国产精品日本一区二区在线播放_国产成人无码久久久精品一_性感美女视频在线观看免费精品

更多精彩內(nèi)容,歡迎關(guān)注:

視頻號
視頻號

抖音
抖音

快手
快手

微博
微博

PHP對接抖音開發(fā)平臺接口的詳細(xì)教程

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

一、說明

二、代碼

三、代碼運(yùn)行需知

四、功能擴(kuò)展

五、接口調(diào)用需要注意的點(diǎn)

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

1、請求參數(shù)、響應(yīng)參數(shù) 代表的具體值不清晰

一、說明

抖音開放平臺-開發(fā)指南

二、代碼
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在后面設(shè)置則報錯:"v不可為空",因?yàn)閔andleToken中調(diào)用了versionNumber,但versionNumber此時的值為NULL
????????$result?=?self::handleToken();?//創(chuàng)建Token
//????????$result?=?self::handleToken(false);?//刷新Token:提示-"缺少code",需要建一張第三方表存抖音該店鋪的access_token,refresh_token,expire_time信息
????????$this->accessToken?=?$result['access_token'];?//用于出創(chuàng)建token接口之外的其他接口
????????$this->refreshToken?=?$result['refresh_token'];?//用于刷新token接口
????}

????/**
?????*?處理(創(chuàng)建/刷新)Token的方法
?????*?開發(fā)指南?>?產(chǎn)品功能?>?授權(quán)介紹?->?自用型應(yīng)用店鋪授權(quán)流程:https://op.jinritemai.com/docs/guide-docs/9/21
?????*?@param?bool?$createToken?是否調(diào)用創(chuàng)建Token的方法
?????*?@return?array
?????*?@throws?BaseException
?????*/
????public?function?handleToken($createToken?=?true)
????{
????????if?($createToken)?{?//調(diào)用創(chuàng)建token接口
????????????$param?=?[
????????????????'code'?=>?'',
????????????????'grant_type'?=>?'authorization_self',
????????????????'shop_id'?=>?'你抖音店鋪的ID',?//店鋪ID,僅自用型應(yīng)用有效;若不傳,則默認(rèn)返回最早授權(quán)成功店鋪對應(yīng)的token信息
????????????];
????????????$method?=?'token.create';

????????}?else?{?//調(diào)用刷新Token方法
????????????$param?=?[
//????????????????'app_id'?=>?'',?//應(yīng)用key?,長度19位字母和數(shù)字組合的字符串,可不傳
????????????????'refresh_token'?=>?$this->refreshToken,?//注意:傳真實(shí)的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過期時間?=?當(dāng)前時間?+?有效時間(秒s)

????????????return?[
????????????????'access_token'?=>?$accessToken,
????????????????'refresh_token'?=>?$refreshToken,
????????????];
????????}
????}

????/**
?????*?封裝抖音接口公共方法
?????*?PHP調(diào)用說明:https://op.jinritemai.com/docs/guide-docs/151/811
?????*?@param?$method?方法名:格式?token.create?方法中轉(zhuǎn)為?token/create
?????*?@param?$param?請求接口需要的參數(shù)名
?????*?@param?bool?$accessToken?url中是否要加上access_token,默認(rèn)否。
?????*??????????????為什么不直接傳accessToken的值:在本類中,可以獲取到accessToken的值,直接傳,但是如果在其他的地方調(diào)用就獲取不到access_token的值,需要傳true/false標(biāo)識在本類中獲取。
?????*?@param?bool?$paramJsonAddToUrl?是否把paramJson放到?url?中,根據(jù)實(shí)際情況
?????*??????????例:實(shí)際過程中【訂單批量解密接口】不需要放到url中(猜測是這個接口paramJson內(nèi)容太多,會超出GET的最大內(nèi)容)
?????*??????????????訂單批量解密接口:https://op.jinritemai.com/docs/api-docs/15/982
?????*?@return?false|mixed|string
?????*/
????function?fetch($method,?$param,?$accessToken?=?false,?$paramJsonAddToUrl?=?true)
????{
????????//當(dāng)前時間戳
????????$timestamp?=?time();

????????//PHP中:如果數(shù)組為空轉(zhuǎn)為json之后是[]。但接口可能是強(qiáng)類型語言編寫的,需要傳{}。所以$param為空時,需要把$paramJson設(shè)置為{}
????????$paramJson?=?$param???self::marshal($param)?:?'{}';

????????//獲取簽名
????????$sign?=?self::sign($method,?$timestamp,?$paramJson);

????????//調(diào)用的方法.替換為/
????????$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');?//官方接口為非必填,但是不加簽名會驗(yàn)證失敗

????????//處理句柄數(shù)據(jù)
????????$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);
????}

????//序列化參數(shù),入?yún)⒈仨殲殛P(guān)聯(lián)數(shù)組(鍵值對數(shù)組)
????function?marshal(array?$param)
????{
????????self::rec_ksort($param);?//?對關(guān)聯(lián)數(shù)組中的kv,執(zhí)行排序,需要遞歸
????????$s?=?json_encode($param,?JSON_UNESCAPED_SLASHES?|?JSON_UNESCAPED_UNICODE);?//?重新序列化,確保所有key按字典序排序
????????//?加入flag,確保斜杠不被escape,漢字不被escape
????????return?$s;
????}

????//關(guān)聯(lián)數(shù)組排序,遞歸
????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);?//這里的調(diào)用方式要和marshal中調(diào)用方式一致
????????????}
????????}
????????if?($kstring)?{
????????????ksort($arr);
????????}
????}
}
三、代碼運(yùn)行需知

在 __construct() 方法 $this->appKey 中加上你的真實(shí)

appKey

在 __construct() 方法 $this->appSecret 中加上你的真實(shí)

appSecret

在 handleToken() 方法 shop_id 中加上你真實(shí)的

抖音店鋪ID

四、功能擴(kuò)展

加一張數(shù)據(jù)表 third_shop(第三方店鋪表):存放第三方店鋪(比如:抖音)的信息,表的字段大致有:id;shop_name:店鋪名;third_shop_id:第三方店鋪的ID,source:店鋪來源(抖音,京東,天貓);app_key,app_secret,access_token,refresh_token,expire_time:過期時間;status:狀態(tài)(0-關(guān)閉;1-啟用),create_time,update_time ...

我們要對接抖音前,在third_shop中寫好 id;shop_name:店鋪名;third_shop_id:第三方店鋪的ID,source:店鋪來源(抖音,京東,天貓);app_key,app_secret;status:狀態(tài)(0-關(guān)閉;1-啟用),create_time,update_time ....

在 __construct()中先查詢店鋪的信息,如果 access_token為空 或者 expire_time過期時間 小于 當(dāng)前時間,則需要重新生成 access_token,refresh_token,expire_time:過期時間 在 handleToken() 中加上third_shop 表更新操作;否則取數(shù)據(jù)表中未過期的 access_token,refresh_token用于接口調(diào)用

五、接口調(diào)用需要注意的點(diǎn)

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

2、rec_ksort遞歸調(diào)用的問題:rec_ksort中調(diào)用rec_ksort方式要和marshal中調(diào)用rec_ksort方式一致

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

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

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

給了,在訂單詳情 接口的 響應(yīng)參數(shù) 中,如下圖:

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

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

不給的話,那就默認(rèn)為:分

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

為你推薦
資訊專欄
熱門視頻
相關(guān)推薦
PHP7中對十六進(jìn)制字符串處理的問題詳解 php生成唯一uid的解決方法詳解 php兩種基本的輸出方及實(shí)例詳解 PHP遍歷數(shù)組的6種方式總結(jié) JS截取字符串的三種方法詳解 Python常用的正則表達(dá)式處理函數(shù)詳解 一文秒懂python正則表達(dá)式常用函數(shù) python正則表達(dá)式語法學(xué)習(xí)筆記 Python 垃圾回收機(jī)制詳解 Python實(shí)現(xiàn)城市公交網(wǎng)絡(luò)分析與可視化 Python數(shù)據(jù)分析處理(三)--運(yùn)動員信息的分組與聚合 基于Python實(shí)現(xiàn)PDF區(qū)域文本提取工具 詳解python的循環(huán) python實(shí)現(xiàn)新年倒計時實(shí)例代碼 Python實(shí)現(xiàn)消消樂小游戲 學(xué)習(xí)python的while循環(huán)嵌套 提升Python運(yùn)行速度的5個小技巧 Python按鍵或值對字典進(jìn)行排序 圖像檢索之基于vlfeat實(shí)現(xiàn)SIFT特征 python繪圖中的四個繪圖技巧 php7安裝mysqli實(shí)例講解 php去掉一維數(shù)組的鍵值的實(shí)例方法 PHP中empty()和isset()的區(qū)別介紹 PHP實(shí)現(xiàn)JWT的Token登錄認(rèn)證 php判斷時間戳是否為今天實(shí)例講解 PHP7 preg_replace出錯及解決辦法 五年班的學(xué)習(xí)計劃怎么寫 五年級的學(xué)習(xí)計劃 初中新學(xué)期學(xué)習(xí)計劃怎么寫 關(guān)于英語的學(xué)習(xí)計劃怎么寫 怎么寫暑假學(xué)習(xí)計劃書 4年級數(shù)學(xué)學(xué)習(xí)計劃怎么寫 后半學(xué)期的學(xué)習(xí)計劃怎么寫 上學(xué)期學(xué)習(xí)計劃怎么寫 五年級的學(xué)習(xí)計劃書怎么寫 小學(xué)一年級學(xué)習(xí)計劃怎么寫 暑假學(xué)習(xí)計劃表怎么寫 八年級學(xué)習(xí)計劃怎么寫 暑期學(xué)習(xí)計劃表怎么寫 小學(xué)四年級學(xué)習(xí)計劃怎么寫 一年級的學(xué)習(xí)計劃怎么寫
Top 国产精品亚洲AV三区_国产精品日本一区二区在线播放_国产成人无码久久久精品一_性感美女视频在线观看免费精品
<strike id="cakm0"></strike>
  • <button id="cakm0"><dl id="cakm0"></dl></button>
  • <samp id="cakm0"><tbody id="cakm0"></tbody></samp>
    <samp id="cakm0"><pre id="cakm0"></pre></samp><ul id="cakm0"></ul>
    <strike id="cakm0"></strike>
    <li id="cakm0"></li>
  • <ul id="cakm0"></ul>
  • 国产亚洲精品一区二区| 欧美主播一区二区三区美女 久久精品人 | …久久精品99久久香蕉国产| 蜜乳av另类精品一区二区| 亚洲欧美日韩综合| 日韩视频一区二区| 亚洲大胆视频| 永久域名在线精品| 国产一区二区高清| 国产欧美69| 国产精品乱码一区二区三区| 欧美日韩国产综合视频在线| 欧美www视频| 久久久99免费视频| 久久久久久穴| 久久久免费精品视频| 欧美主播一区二区三区| 狠狠噜噜久久| 国产日韩视频| 国产精品一区二区三区四区| 欧美午夜精品| 国产精品www色诱视频| 欧美日韩精品免费观看视频完整 | 一区二区三区你懂的| 亚洲精品国精品久久99热| 精品成人国产在线观看男人呻吟| 国产亚洲观看| 伊人男人综合视频网| 一区在线视频观看| 亚洲大胆视频| 亚洲狼人综合| 亚洲综合精品四区| 午夜精品久久| 久久人人超碰| 欧美成在线观看| 欧美人与禽猛交乱配| 欧美日韩精品一区视频| 欧美三日本三级少妇三2023| 国产精品成人v| 国内精品久久久| 亚洲国产成人精品久久久国产成人一区| 韩日精品视频| 亚洲精品乱码久久久久久蜜桃麻豆| 在线免费观看欧美| 99精品国产在热久久下载| 亚洲午夜视频在线| 性欧美8khd高清极品| 久久久免费av| 欧美日韩亚洲高清| 国内精品伊人久久久久av影院| 亚洲国产精品一区二区久| 一本久道久久综合狠狠爱| 亚洲综合色婷婷| 久久久国产精彩视频美女艺术照福利 | 亚洲欧洲在线免费| 亚洲午夜黄色| 久久久久青草大香线综合精品| 欧美va亚洲va香蕉在线| 欧美日韩一区二区三区| 久久成人一区二区| 欧美在线视频一区二区三区| 久久漫画官网| 欧美日韩四区| 黄网站色欧美视频| 亚洲视频图片小说| 欧美 日韩 国产一区二区在线视频 | 你懂的一区二区| 国产精品欧美日韩| 亚洲精品国产日韩| 久久久av毛片精品| 国产精品久久午夜| 亚洲精品久久久蜜桃| 欧美中文字幕| 国产精品国产馆在线真实露脸| 精品成人乱色一区二区| 亚洲欧美在线播放| 欧美三级第一页| 亚洲精品久久久久久久久| 久久国产精品一区二区三区四区 | 国产精品成人播放| 亚洲欧洲在线观看| 久久精品视频在线看| 国产精品一区2区| 亚洲美女毛片| 农村妇女精品| 亚洲国产精品成人久久综合一区| 欧美一区二区三区电影在线观看| 欧美日韩在线高清| 日韩一级不卡| 欧美激情综合网| 91久久久久久国产精品| 美女网站在线免费欧美精品| 国产一区二区视频在线观看| 午夜在线一区二区| 国产精品亚洲综合天堂夜夜 | 亚洲欧美日韩国产综合在线| 久久久www成人免费精品| 欧美午夜精品理论片a级按摩| 亚洲经典在线| 欧美sm视频| 亚洲欧洲午夜| 欧美视频一区二区| 亚洲精品一区二区三区在线观看| 美国十次成人| 最新亚洲一区| 欧美日韩1080p| 夜夜爽99久久国产综合精品女不卡| 欧美不卡一卡二卡免费版| 亚洲电影在线观看| 欧美高清在线一区| 99re在线精品| 国产精品久久久久久av福利软件 | 玖玖玖国产精品| 亚洲激情自拍| 欧美日韩国产在线观看| 亚洲视频在线看| 国产日韩视频一区二区三区| 久久国产精品亚洲va麻豆| 尤物yw午夜国产精品视频明星| 麻豆精品在线观看| 一本一本大道香蕉久在线精品| 欧美小视频在线| 久久国产福利| 亚洲国产成人久久综合| 欧美日韩一区二区欧美激情| 亚洲午夜在线观看视频在线| 国产日本欧美一区二区三区在线| 久久精品国产91精品亚洲| 在线精品亚洲| 国产精品多人| 麻豆精品网站| 一区二区三区www| 国产视频亚洲| 欧美波霸影院| 性感少妇一区| 日韩天堂在线视频| 好看的亚洲午夜视频在线| 欧美极品aⅴ影院| 先锋影音久久久| 亚洲黄色一区| 国产日韩欧美在线视频观看| 久热精品在线| 午夜精品国产| 亚洲精选在线观看| 国产亚洲欧洲一区高清在线观看| 欧美大片免费观看在线观看网站推荐| 亚洲午夜在线视频| 亚洲欧洲视频| 在线不卡亚洲| 国产午夜亚洲精品羞羞网站| 欧美日韩不卡一区| 乱中年女人伦av一区二区| 午夜国产精品视频| 艳妇臀荡乳欲伦亚洲一区| 在线看欧美日韩| 国产日韩一区在线| 欧美日韩精品系列| 美女日韩欧美| 久久激情视频| 亚洲欧美日韩成人高清在线一区| 伊人精品成人久久综合软件| 国产精品久久久亚洲一区| 欧美成年视频| 亚洲国产日韩欧美综合久久| 国产精品一区视频| 欧美精品粉嫩高潮一区二区 | 99精品国产在热久久| 欧美日韩免费在线| 国内精品久久久久影院色| 欧美激情亚洲国产| 亚洲综合视频1区| 狠狠色丁香婷婷综合影院| 欧美日韩国产美女| 开元免费观看欧美电视剧网站| 99精品欧美一区二区蜜桃免费| 永久91嫩草亚洲精品人人| 国内视频一区| 国产偷国产偷亚洲高清97cao| 欧美日韩成人综合天天影院| 免费精品视频| 久久久久国色av免费观看性色| 欧美一区中文字幕| 亚洲性视频网址| 中文久久乱码一区二区| 日韩午夜av电影| 亚洲精品日韩在线观看| 亚洲国产欧美另类丝袜| 亚洲日本无吗高清不卡| 亚洲人成久久| 亚洲人成网站色ww在线| 在线观看精品视频| 亚洲精品乱码久久久久久蜜桃91| 在线播放中文一区| 亚洲欧洲精品成人久久奇米网| 亚洲国产天堂久久国产91| 影音欧美亚洲| 亚洲人www| 99国产精品99久久久久久粉嫩| 一区二区激情| 亚洲一区免费观看|