php阿里雲虛擬電話


<?php

namespace lib;

use think\Loader;
use Aliyun\Core\Config;
use Aliyun\Core\Exception\ClientException;
use Aliyun\Core\Profile\DefaultProfile;
use Aliyun\Core\DefaultAcsClient;
use Aliyun\Api\Dypls\Request\V20170525\BindAxbRequest;
use Aliyun\Api\Dypls\Request\V20170525\BindAxnRequest;
use Aliyun\Api\Dypls\Request\V20170525\UnbindSubscriptionRequest;
use Aliyun\Api\Dypls\Request\V20170525\UpdateSubscriptionRequest;
use Aliyun\Api\Dypls\Request\V20170525\QueryRecordFileDownloadUrlRequest;
use Aliyun\Api\Dypls\Request\V20170525\QuerySubscriptionDetailRequest;
use Aliyun\Api\Dypls\Request\V20170525\BindAxnExtensionRequest;
use Aliyun\Api\Dypls\Request\V20170525\QueryCallStatusRequest;

/**
* Description of Qrcode
*
* @author lsf
*/
class AliyunPls {

static $acsClient = null;
static $setting;

public function __construct($setting = array()) {
Loader::import("aliyun-dypls-php-sdk/api_sdk/vendor/autoload", EXTEND_PATH);
static::$setting = $setting;
Config::load();
}

/**
* 取得AcsClient
*
* @return DefaultAcsClient
*/
public static function getAcsClient() {
//產品名稱:雲通信號碼隱私保護服務API產品,開發者無需替換
$product = "Dyplsapi";

//產品域名,開發者無需替換
$domain = "dyplsapi.aliyuncs.com";

// TODO 此處需要替換成開發者自己的AK (https://ak-console.aliyun.com/)

$accessKeyId = static::$setting["message_apikey"]; // AccessKeyId

$accessKeySecret = static::$setting["message_apisecret"]; // AccessKeySecret
// 暫時不支持多Region
$region = "cn-hangzhou";

// 服務結點
$endPointName = "cn-hangzhou";


if (static::$acsClient == null) {

//初始化acsClient,暫不支持region化
$profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret);

// 增加服務結點
DefaultProfile::addEndpoint($endPointName, $region, $product, $domain);

// 初始化AcsClient用於發起請求
static::$acsClient = new DefaultAcsClient($profile);
}
return static::$acsClient;
}

public static function setAxb($noa, $nob, $key, $bind = array()) {
//組裝請求對象-具體描述見控制台-文檔部分內容
$request = new BindAxbRequest();
//可選-啟用https協議
$request->setProtocol("https");
//必填:號池Key
$request->setPoolKey($key);

//必填:AXB關系中的A號碼
$request->setPhoneNoA($noa);

//必填:AXB關系中的B號碼
$request->setPhoneNoB($nob);

//可選:指定X號碼進行綁定
// $request->setPhoneNoX("1700000000");
//可選:期望分配X號碼歸屬的地市(省去地市后綴后的城市名稱)
// $request->setExpectCity("北京");
//必填:綁定關系對應的失效時間-不能早於當前系統時間
$request->setExpiration(date("Y-m-d H:i:s", time() + 3600));

//可選:是否需要錄制音頻-默認是false
$request->setIsRecordingEnabled(true);

//可選:外部業務自定義ID屬性
// $request->setOutId("yourOutId");
//hint 此處可能會拋出異常,注意catch

try {
$response = static::getAcsClient()->getAcsResponse($request);
return array("success" => true, "msg" => "", "data" => $response);
} catch (\Exception $exc) {
return array("success" => false, "msg" => $exc->getMessage(), "data" => "");
}
}

/**
* AXB綁定接口
*
* @return stdClass
* @throws ClientException
*/
public static function bindAxb($noa, $nob, $key, $bind = array()) {
if(empty($noa)){
return array("successccess" => false, "msg" => "商家沒有填寫電話無法撥打", "data" => "");
}
if (!empty($bind)) {
$res = static::querySubscriptionDetail($key, $bind["subs_id"], $bind["secret_no"]);
if (!$res["success"]) {
return array("successccess" => false, "msg" => $res["msg"], "data" => "");
} else {
if ($res["data"]->Code != 'OK') {
return array("success" => false, "msg" => $res["data"]->Message, "data" => "");
} else {
if (empty($res["data"]->SecretBindDetailDTO->Status)) {
return static::setAxb($noa, $nob, $key, array());
} else {
if (($res["data"]->SecretBindDetailDTO->PhoneNoB == $noa || $res["data"]->SecretBindDetailDTO->PhoneNoA == $noa) && ($res["data"]->SecretBindDetailDTO->PhoneNoB == $nob || $res["data"]->SecretBindDetailDTO->PhoneNoA == $nob)) {
return array("success" => true, "msg" => "", "data" => "", "phone" => $res["data"]->SecretBindDetailDTO->PhoneNoX);
} else {
return static::setAxb($noa, $nob, $key, array());
}
}
}
}
} else {

return static::setAxb($noa, $nob, $key, array());
}
}

//FC100000070742059

/**
* 解綁接口
*
* @return stdClass
* @throws ClientException
*/
public static function unbindSubscription($subsId, $secretNo, $key) {

//組裝請求對象
$request = new UnbindSubscriptionRequest();

//可選-啟用https協議
$request->setProtocol("https");
//必填:號池Key
$request->setPoolKey($key);

//必填:對應的產品類型
$request->setProductType("AXB_170");

//必填-分配的X小號-對應到綁定接口中返回的secretNo;
$request->setSecretNo($secretNo);

//必填-綁定關系對應的ID-對應到綁定接口中返回的subsId;
$request->setSubsId($subsId);

//hint 此處可能會拋出異常,注意catch
try {
$response = static::getAcsClient()->getAcsResponse($request);
return array("success" => true, "msg" => "", "data" => $response);
} catch (\Exception $exc) {
return array("success" => false, "msg" => $exc->getMessage(), "data" => "");
}
}

/**
* 更新綁定關系
*
* @return stdClass
* @throws ClientException
*/
public static function updateSubscription($subsId, $secretNo, $key) {

//組裝請求對象
$request = new UpdateSubscriptionRequest();

//可選-啟用https協議
//$request->setProtocol("https");
//必填:號池Key
$request->setPoolKey($key);

//必填: 您所選擇的產品類型,目前支持AXB_170、AXN_170、AXN_95三種產品類型
$request->setProductType("AXB_170");

//必填: 創建綁定關系API接口所返回的訂購關系ID
$request->setSubsId($subsId);

//必填: 創建綁定關系API接口所返回的X號碼
$request->setPhoneNoX("170000000");


// todo 以下操作三選一, 目前支持三種類型: updateNoA(修改A號碼)、updateNoB(修改B號碼)、updateExpire(更新綁定關系有效期)
// -------------------------------------------------------------------
// 1. 修改A號碼示例:
// 必填: 操作類型
$request->setOperateType("updateNoA");

// OperateType為updateNoA時必選: 需要修改的A號碼
$request->setPhoneNoA("150000000");

// -------------------------------------------------------------------
// 2. 修改B號碼示例:
// 必填: 操作類型
// $request->setOperateType("updateNoB");
// OperateType為updateNoB時必選: 需要修改的B號碼
// $request->setPhoneNoB("150000000");
// -------------------------------------------------------------------
// 3. 更新綁定關系有效期示例:
// 必填: 操作類型
// $request->setOperateType("updateExpire");
// OperateType為updateExpire時必選: 需要修改的綁定關系有效期
// $request->setExpiration("2017-09-05 12:00:00");
// -------------------------------------------------------------------
// 此處可能會拋出異常,注意catch
$response = static::getAcsClient()->getAcsResponse($request);

return $response;
}

/**
* 獲取錄音文件下載鏈接
*
* @return stdClass
* @throws ClientException
*/
public static function queryRecordFileDownloadUrl() {

//組裝請求對象
$request = new QueryRecordFileDownloadUrlRequest();

//可選-啟用https協議
$request->setProtocol("https");
//必填:號池Key
$request->setPoolKey("FC123456");

//必填: 對應的產品類型,目前一共支持三款產品AXB_170,AXN_170,AXN_95
$request->setProductType("AXB_170");

//必填: 話單回執中返回的標識每一通唯一通話行為的callId
$request->setCallId("abcedf1234");

//必填: 話單回執中返回的callTime字段
$request->setCallTime("2017-09-05 12:00:00");

//hint 此處可能會拋出異常,注意catch
$response = static::getAcsClient()->getAcsResponse($request);

return $response;
}

/**
* 查詢打電話狀態
*
* @return stdClass
* @throws ClientException
*/
public static function queryCallStatusDetail($key, $subsId, $nob) {

//組裝請求對象
$request = new QueryCallStatusRequest();


//必填:號池Key
$request->setPoolKey($key);


//必填: 綁定關系ID
$request->setSubsId($subsId);


$request->setCallNo($nob);

//hint 此處可能會拋出異常,注意catch
try {
$response = static::getAcsClient()->getAcsResponse($request);

return array("success" => true, "msg" => "", "data" => $response);
} catch (\Exception $exc) {
return array("success" => false, "msg" => $exc->getMessage(), "data" => "");
}
}

/**
* 查詢綁定關系詳情
*
* @return stdClass
* @throws ClientException
*/
public static function querySubscriptionDetail($key, $subsId, $secretNo) {

//組裝請求對象
$request = new QuerySubscriptionDetailRequest();

//可選-啟用https協議
$request->setProtocol("https");
//必填:號池Key
$request->setPoolKey($key);

//必填: 產品類型,目前一共支持三款產品AXB_170,AXN_170,AXN_95
$request->setProductType("AXB_170");

//必填: 綁定關系ID
$request->setSubsId($subsId);

//必填: 綁定關系對應的X號碼
$request->setPhoneNoX($secretNo);

//hint 此處可能會拋出異常,注意catch
try {
$response = static::getAcsClient()->getAcsResponse($request);
return array("success" => true, "msg" => "", "data" => $response);
} catch (Exception $exc) {
return array("success" => false, "msg" => $exc->getMessage(), "data" => "");
}
}

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM