抖音用户扫码一键转发视频至抖音php
生活随笔
收集整理的這篇文章主要介紹了
抖音用户扫码一键转发视频至抖音php
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
需求:用戶掃碼授權(quán)后自動轉(zhuǎn)發(fā)視頻到抖音,轉(zhuǎn)發(fā)完成后獲得一張優(yōu)惠券,視頻要隨機(jī)生成(用阿里云視頻生產(chǎn)接口提前后臺生成好),因?yàn)橥粋€(gè)視頻會被抖音降權(quán)
我用的yii2框架,具體寫法需要自己改一改
1:接入抖音jssdk,實(shí)現(xiàn)抖音端掃碼授權(quán),具體接入步驟參考抖音給的文檔
根據(jù)抖音給的文檔接入,比較值得注意的是簽名驗(yàn)證,下邊附上簽名驗(yàn)證的php代碼
后臺生成簽名
//驗(yàn)證簽名public function actionGetSignature(){\Yii::$app->response->format = Response::FORMAT_JSON;$url = 'https://open.douyin.com/oauth/client_token/';$params = ['client_key' => 網(wǎng)站應(yīng)用的clientkey,'client_secret' => 網(wǎng)站應(yīng)用的secret,'grant_type' => 'client_credential'];$client_data = \Yii::$app->HttpHelper->curlPost($url,$params);//封裝好的curl方法 post上傳$client_data = json_decode($client_data,true);$client_acess_token = $client_data['data']['access_token'];$jsapi_ticket_url = "https://open.douyin.com/js/getticket?access_token=".$client_acess_token;$ticket_info = \Yii::$app->HttpHelper->curlGet($jsapi_ticket_url);//curl get方式上傳$ticket_info = json_decode($ticket_info,true);$ticket = $ticket_info['data']['ticket'];$timestamp = "1597213176393";//時(shí)間串必須為string類型 否則簽名不通過$nonce_str = 'ABCD561';//隨機(jī)一個(gè)字符串$string = "jsapi_ticket=$ticket&nonce_str=$nonce_str×tamp=$timestamp&url=要跳轉(zhuǎn)的授權(quán)頁面";$signature = md5($string);//簽名MD5加密$resData['signature'] = $signature;$resData['timestamp'] = (string)$timestamp;$resData['nonce_str'] = $nonce_str;return $resData; }頁面驗(yàn)證簽名
<!DOCTYPE html> <html> <head><meta charset="UTF-8"><title>授權(quán)</title> </head> <script type="text/javascript" src="/js/jquery.min.js"></script> <script type="text/javascript" src=" https://unpkg.byted-static.com/bridge/douyin_open/1.0.7/lib/douyin_open.umd.js"></script> <body> </body> </html> <script>const url = location.href;$(function(){$.ajax({type: "GET",url: 后臺生成簽名的地址,dataType: "json",success: function(data){const sdk = window.DouyinOpenJSBridge;sdk.config({params: {client_key:自己的clientkey, // clientKey在你的網(wǎng)頁應(yīng)用申請通過后得到signature:data.signature,// 服務(wù)端計(jì)算的簽名,該簽名被抖音開放平臺驗(yàn)證通過后方可調(diào)用jsb方法timestamp:data.timestamp, // 時(shí)間戳nonce_str:data.nonce_str,url:和后臺生成簽名時(shí)用的url必須一模一樣 建議直接寫死,ios端用location。href獲取時(shí)會出問題, // 為應(yīng)用申請的 JSB 安全域名下的鏈接,需要攜帶協(xié)議}}); sdk.ready(() => {sdk.jumpOpenAuth({params: {client_key: 自己的clientkey, // clientKey在你的網(wǎng)頁應(yīng)用申請通過后得到state: '', // 自定義狀態(tài),詳見下方說明scope: 'user_info,video.create', // 需要授權(quán)的scope列表, 多個(gè)用英文逗號分隔response_type: 'code' // 默認(rèn)填‘code’,詳見下方說明},success: ({ ticket }) => {此處的ticket就相當(dāng)于授權(quán)時(shí)的code,拿著ticket去后臺走openapi里的授權(quán)流程就可以了 },error: res => {}});});sdk.error(res => {// Config error回調(diào)alert(Object.values(res)); }); }});}); </script>2:授權(quán)成功后,調(diào)用openapi的視頻/video/upload/接口獲取video_id
//上傳視頻 獲取videoidpublic function getVideoId($open_id,$access_token,$url){ $curl = curl_init();curl_setopt_array($curl, array(CURLOPT_URL => 'https://open.douyin.com/video/upload?open_id=' . $open_id. '&access_token=' . $access_token,CURLOPT_RETURNTRANSFER => true,//CURLOPT_ENCODING => '',//CURLOPT_MAXREDIRS => 10,CURLOPT_TIMEOUT => 0,//CURLOPT_FOLLOWLOCATION => true,//CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,//CURLOPT_CUSTOMREQUEST => 'POST',CURLOPT_POST => 1,CURLOPT_POSTFIELDS => array('video' => new \CURLFILE($url)),));$response = curl_exec($curl);curl_close($curl);$response = json_decode($response, true);if($response['data']['error_code'] == 0){return $response['data']['video']['video_id'];}return $null;}3:調(diào)用/video/create/接口,拿著video_id上傳視頻 具體的優(yōu)惠券領(lǐng)取代碼比較簡單,我這邊搭demo的時(shí)候略過了
//上傳videopublic function actionCreateVideo(){\Yii::$app->response->format = Response::FORMAT_JSON;$open_id = $_POST['openid'];$access_token = 授權(quán)時(shí)存起來的accesstoken;$url = $_POST['url'];//這個(gè)url為要轉(zhuǎn)發(fā)視頻的url$video_id = $this->getVideoId($open_id, $access_token, $url);if(!$video_id){return ['code' => 1,'msg' => '轉(zhuǎn)發(fā)失敗'];}$url = "https://open.douyin.com/video/create?open_id=$open_id&access_token=$access_token";$params = ['video_id' => $video_id,'text' => '好好吃飯鴨'];$video_info = \Yii::$app->HttpHelper->curlPost($url,$params,true);$video_info = json_decode($video_info,true);if(isset($video_info['data']['item_id'])){return ['code' => 1,'msg' => '卡券領(lǐng)取成功'];}return ['code' => 0,'msg' => '卡券領(lǐng)取失敗'];}總結(jié)
以上是生活随笔為你收集整理的抖音用户扫码一键转发视频至抖音php的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ThinkPHP学生在线考试管理系统
- 下一篇: matlab hilbert 包络,hi