# API 接口調用
### 創建URL推流地址API創建推流地址
* * *
> 方法名稱
* createPushFlowAddress
> 作用
* 根據用戶的需求創建推流和播流地址,是否鑒權、錄像(自動、手動)等一系列功能
> 請求URL
* 測試地址: `http://sewise.tinywan.com/openapi/createPushFlowAddress`
* 正式地址 :`http://ssconsole.tinywan.com/openapi/createPushFlowAddress`
> 支持格式
* **JSON**
> HTTP請求方式
* **GET**
> 請求參數
| 編號 | 參數名 | 必選 | 類型 | 說明 |
| --- | --- | --- | --- | --- |
| 1 | Sign | 是 | string | 簽名字符串 |
| 2 | AppId | 是 | string | 表示你應用的唯一標識 |
| 3 | DomainName | 是 | string | 您的直播流域名 |
| 4 | AppName | 是 | string | 直播流所屬應用名稱 |
| 5 | ExpireTime | 否 | string | 推流地址過期時間 |
| 6 | AuthKeyStatus | 是 | string | 是否要鑒權(可選) 1:鑒權,0:不鑒權(默認) |
| 7 | AutoStartRecord | 是 | string | 開啟錄像(可選) 1:開啟,0:不開啟(默認) |
| 9 | NotifyUrl | 是 | string | 回調通知URL地址 |
> 響應成功JSON示例:
~~~
{
"status_code": 200,
"msg": "success",
"data": {
"push_flow_address": "rtmp://stream.tinywan.com/live/4001483088068?vhost=tinywan.tinywan.com",
"play_rtmp_address": "rtmp://tinywan.tinywan.com/live/4001483088068",
"play_m3u8_address": "http://tinywan.tinywan.com/live/4001483088068.m3u8",
"streamId": "639"
}
}
~~~
> 響應異常JSON示例:
~~~
{
"status_code": 500102,
"msg": "Did not find what you wanted",
"data": null
}
~~~
> 返回字段說明
| 參數名 | 必選 | 類型 | 說明 |
| --- | --- | --- | --- |
| status\_code | 是 | string | 響應狀態碼 |
| push\_flow\_address | 否 | string | RTMP推流地址 |
| play\_rtmp\_address | 是 | string | RTMP播放地址 |
| play\_flv\_address | 是 | string | FLV播放地址 |
| play\_m3u8\_address | 是 | string | M3u8播放地址 |
| streamId | 是 | int | 全局唯一標識符 |
* 描述:創建一個可以推流的地址
#### PHP請求示例
* * *
> 注意:請求參數名首字母必須為大寫,采用駝峰命名\*\*
~~~
//請求參數
$appId = 13669361192;
$domainName = 'tinywan.tinywan.com';
$appName = 'live';
//簽名密鑰
$appSecret = 'eb9a365a9d37a1354e13ddd7973d5e02409ef451';
//拼接字符串,注意這里的字符為首字符大小寫,采用駝峰命名
$str = "AppId" . $appId . "AppName" . $appName . "DomainName" . $domainName . $appSecret;
//簽名串,由簽名算法sha1生成
$sign = strtoupper(sha1($str));
//請求資源訪問路徑以及請求參數,參數名必須為大寫
$url = "http://ssconsole.tinywan.com/openapi/createPushFlowAddress?AppId=" . $appId . "&AppName=" . $appName . "&DomainName=" . $domainName . "&Sign=" . $sign;
//CURL方式請求
$ch = curl_init() or die (curl_error());
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 360);
$response = curl_exec($ch);
curl_close($ch);
//返回數據為JSON格式,進行轉換為數組打印輸出
var_dump(json_decode($response, true));
~~~
#### 簽名規則:
* * *
##### 將請求參數按照參數名字典順序排列,連接參數名與參數值,并在首尾加上appSecret,生成32位大寫sha1值,作為sign。以下是示例過程:
> 1、請求參數為:
~~~
$appId = 13669361192;
$domainName = 'tinywan.tinywan.com';
$appName = 'live';
~~~
> 2、將請求參數按照參數名字典順序排列
~~~
$appId = 13669361192;
$appName = 'live';
$domainName = 'tinywan.tinywan.com';
~~~
> 3、連接字符串連接參數名與參數值,并在首尾加上appSecret,值為:
~~~
eb9a365a9d37a1354e13ddd7973d5e02409ef451
~~~
> 4、拼接后的字符串如下:
~~~
AppId13669361192AppNameliveDomainNametinywan.amai8.comeb9a365a9d37a1354e13ddd7973d5e02409ef451
~~~
> 5、生成簽名sign
~~~
248CE36F694A59F4F120D8CACBEA0EC80F41D9F8
~~~
> (僅供測試使用)服務端驗證簽名封裝好的一個簽名案例:
~~~
/**
* 服務器簽名驗證方法
* @param string $appId
* @param array $allParam
* @return bool|string
* @static
*/
protected static function checkApiSign($appId, $allParam)
{
//根據appId查詢否存在該用戶
$userInfo = User::findFirst(array('nickName = :nickName:', 'bind' => array('nickName' => $appId)));
if (false == $userInfo) return false;
$appSecret = ‘eb9a365a9d37a1354e13ddd7973d5e02409ef451; //sha1()加密
//去除最后的簽名
unset($allParam['Sign']);
// 1. 對加密數組進行字典排序
foreach ($allParam as $key => $value) {
$sortParam[$key] = $key;
}
// 2. 字典排序的作用就是防止因為參數順序不一致而導致下面拼接加密不同
sort($sortParam);
// 3. 將Key和Value拼接
$str = "";
foreach ($sortParam as $k => $v) {
$str = $str . $sortParam[$k] . $allParam[$v];
}
//3.將appSecret作為拼接字符串的后綴,形成最后的字符串
$finalStr = $str . $appSecret;
//4. 通過sha1加密,轉化為大寫大寫獲得簽名
$sign = strtoupper(sha1($finalStr));
return $sign;
}
~~~