开发环境
包管理: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 目之所及皆是回忆。