開發環境
包管理:Composer
PHP框架:Laravel7
融雲IM:V3.0
需要做的準備
本文檔適合有一些PHP基礎的同學,融合第三方sdk(這裏採用融雲IM)
- composer
- php框架採用laravel7(5.4以上的版本都可以,嚐個鮮才用了最新的 7)
- 融雲IM賬號,並申請測試APP
開始開發
0、注意本文是建立在,已經安裝好laravel框架和composer包管理的基礎上進行操作,下文不在贅述:
1、進入到laravel項目根目錄,使用composer安裝依賴(這裏使用官方依賴,不建議使用任何第三方封裝的依賴)
composer require rongcloud/php-sdk dev-master
等待安裝完成,可能遇到網絡問題,注意更換源。完成後會在composer.json文件中多一些信息如圖:
2、檢查sdk文件會在根目錄的vendor目錄下多出一個rongcloud文件夾
3、執行composer update 使安裝的依賴生效
composer update
4、創建Controller引入使用
<?php
namespace App\Http\Controllers\Home;
use App\Exceptions\ApiException;
use App\Helpers\ApiResponse;
use App\Http\Requests\ImRequest;
use Illuminate\Support\Facades\Log;
class ImController extends HomeBaseController
{
use ApiResponse;
private $APP_URL = 'http://api-cn.ronghub.com';
private $APP_KEY = 'x18ywvqfx5vwc';
private $APP_SECRET = 'XDOWnK7wNW';
protected $request;
public function __construct(ImRequest $request)
{
$this->request = $request;
}
/*
* 獲取用戶token並註冊
*/
public function register()
{
try {
//接收app傳過來的參數
$user_id = $this->request->get('userId');
$username = $this->request->get('name');
$head_pic = $this->request->get('portraitUri');
//拼接融雲的網址和要訪問的方法 例子:http://api-cn.ronghub.com/user/getToken.json
$url = config('app.im.url') . '/user/getToken.json';
//融雲需要參數
$data = 'userId=' . $user_id . '&name=' . $username . '&portraitUri=' . $head_pic;
return getRongClound($url, $data);
} catch (ApiException $exception) {
Log::error($exception->getMessage());
return $this->failed('400', '即時通訊網絡故障');
}
}
}
我封裝的getRongClound 函數放到了 laravel的幫助函數裏,如果對幫助函數不熟悉的可以直接拿出來放到controller裏方便調用,我把代碼貼出來自行修改調用方式即可
/*
* curl方式調用融雲api
*
* @param $url api地址
* @param $postData 傳遞數據
* $url 開發環境默認是 http://api-cn.ronghub.com
*/
function getRongClound($url = "http://api-cn.ronghub.com", $data = "")
{
$app_key = config('app.im.app_key');//這裏寫你申請到的app-key
$secret = config('app.im.secret');//同理,寫你申請到的secret
//參數初始化
$nonce = mt_rand(); // 獲取隨機數。
$timeStamp = time();// 獲取時間戳。
$signature = sha1($secret . $nonce . $timeStamp);
$httpHeader = array(
'App-Key:' . $app_key, // 平臺分配
'Nonce:' . $nonce, // 隨機數
'Timestamp:' . $timeStamp, // 時間戳
'Signature:' . $signature, // 簽名
'Content-Type: application/x-www-form-urlencoded',
);
// 初始化curl
$ch = curl_init();
// 設置你需要抓取的URL
curl_setopt($ch, CURLOPT_URL, $url);
// post提交方式
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
// 設置cURL 參數,要求結果保存到字符串中還是輸出到屏幕上。
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 設置header
curl_setopt($ch, CURLOPT_HEADER, false);
// 增加 HTTP Header(頭)裏的字段
curl_setopt($ch, CURLOPT_HTTPHEADER, $httpHeader);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
// 終止從服務端進行驗證
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
// 運行curl
$data = curl_exec($ch);
// 關閉URL請求
curl_close($ch);
return $data;
}
通過postman模擬訪問
測試參數爲:
http://v5.com/api/home/getUserToken?userId=2&name=wangyanlin2&portraitUri=https://qlogo3.store.qq.com/qzone/916684310/916684310/100?1531812249
注意:v5.com是我自己模擬用的,改成你自己的
查看返回值
{"code":200,"userId":"2","token":"[email protected];9dcv.cn.rongcfg.com"}
報錯的話會有具體提示信息,這裏就不寫了。如還有不懂得可以私信博主。
-by 目之所及皆是回憶。