<?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" => "");
}
}
}