381 lines
12 KiB
PHP
381 lines
12 KiB
PHP
<?php
|
||
|
||
namespace Qiniu\Sms;
|
||
|
||
use Qiniu\Auth;
|
||
use Qiniu\Config;
|
||
use Qiniu\Http\Error;
|
||
use Qiniu\Http\Client;
|
||
|
||
class Sms
|
||
{
|
||
private $auth;
|
||
private $baseURL;
|
||
|
||
public function __construct(Auth $auth)
|
||
{
|
||
$this->auth = $auth;
|
||
|
||
$this->baseURL = sprintf("%s/%s/", Config::SMS_HOST, Config::SMS_VERSION);
|
||
}
|
||
|
||
/**
|
||
* 创建签名
|
||
*
|
||
* @param string $signature 签名
|
||
* @param string $source 签名来源,申请签名时必须指定签名来源
|
||
* @param string $pics 签名对应的资质证明图片进行 base64 编码格式转换后的字符串,可选
|
||
* @return array
|
||
*
|
||
* @link https://developer.qiniu.com/sms/api/5844/sms-api-create-signature
|
||
*/
|
||
public function createSignature($signature, $source, $pics = null)
|
||
{
|
||
$params = array();
|
||
$params['signature'] = $signature;
|
||
$params['source'] = $source;
|
||
if (!empty($pics)) {
|
||
$params['pics'] = array($this->imgToBase64($pics));
|
||
}
|
||
$body = json_encode($params);
|
||
$url = $this->baseURL . 'signature';
|
||
return $this->post($url, $body);
|
||
}
|
||
|
||
/**
|
||
* 编辑签名
|
||
*
|
||
* @param string $id 签名 ID
|
||
* @param string $signature 签名
|
||
* @param string $source 签名来源
|
||
* @param string $pics 签名对应的资质证明图片进行 base64 编码格式转换后的字符串,可选
|
||
* @return array
|
||
* @link https://developer.qiniu.com/sms/api/5890/sms-api-edit-signature
|
||
*/
|
||
public function updateSignature($id, $signature, $source, $pics = null)
|
||
{
|
||
$params = array();
|
||
$params['signature'] = $signature;
|
||
$params['source'] = $source;
|
||
if (!empty($pics)) {
|
||
$params['pics'] = array($this->imgToBase64($pics));
|
||
}
|
||
$body = json_encode($params);
|
||
$url = $this->baseURL . 'signature/' . $id;
|
||
return $this->PUT($url, $body);
|
||
}
|
||
|
||
/**
|
||
* 列出签名
|
||
*
|
||
* @param string $audit_status 审核状态:"passed"(通过), "rejected"(未通过), "reviewing"(审核中)
|
||
* @param int $page 页码。默认为 1
|
||
* @param int $page_size 分页大小。默认为 20
|
||
* @return array
|
||
* @link https://developer.qiniu.com/sms/api/5889/sms-api-query-signature
|
||
*/
|
||
public function querySignature($audit_status = null, $page = 1, $page_size = 20)
|
||
{
|
||
|
||
$url = sprintf(
|
||
"%s?audit_status=%s&page=%s&page_size=%s",
|
||
$this->baseURL . 'signature',
|
||
$audit_status,
|
||
$page,
|
||
$page_size
|
||
);
|
||
return $this->get($url);
|
||
}
|
||
|
||
/**
|
||
* 查询单个签名
|
||
*
|
||
* @param string $signature_id
|
||
* @return array
|
||
* @link https://developer.qiniu.com/sms/api/5970/query-a-single-signature
|
||
*/
|
||
public function checkSingleSignature($signature_id)
|
||
{
|
||
|
||
$url = sprintf(
|
||
"%s/%s",
|
||
$this->baseURL . 'signature',
|
||
$signature_id
|
||
);
|
||
return $this->get($url);
|
||
}
|
||
|
||
/**
|
||
* 删除签名
|
||
*
|
||
* @param string $signature_id 签名 ID
|
||
* @return array
|
||
* @link https://developer.qiniu.com/sms/api/5891/sms-api-delete-signature
|
||
*/
|
||
public function deleteSignature($signature_id)
|
||
{
|
||
$url = $this->baseURL . 'signature/' . $signature_id;
|
||
return $this->delete($url);
|
||
}
|
||
|
||
/**
|
||
* 创建模板
|
||
*
|
||
* @param string $name 模板名称
|
||
* @param string $template 模板内容 可设置自定义变量,发送短信时候使用,参考:${code}
|
||
* @param string $type notification:通知类,verification:验证码,marketing:营销类,voice:语音类
|
||
* @param string $description 申请理由简述
|
||
* @param string $signature_id 已经审核通过的签名
|
||
* @return array array
|
||
* @link https://developer.qiniu.com/sms/api/5893/sms-api-create-template
|
||
*/
|
||
public function createTemplate(
|
||
$name,
|
||
$template,
|
||
$type,
|
||
$description,
|
||
$signature_id
|
||
) {
|
||
$params = array();
|
||
$params['name'] = $name;
|
||
$params['template'] = $template;
|
||
$params['type'] = $type;
|
||
$params['description'] = $description;
|
||
$params['signature_id'] = $signature_id;
|
||
|
||
$body = json_encode($params);
|
||
$url = $this->baseURL . 'template';
|
||
return $this->post($url, $body);
|
||
}
|
||
|
||
/**
|
||
* 列出模板
|
||
*
|
||
* @param string $audit_status 审核状态:passed (通过), rejected (未通过), reviewing (审核中)
|
||
* @param int $page 页码。默认为 1
|
||
* @param int $page_size 分页大小。默认为 20
|
||
* @return array
|
||
* @link https://developer.qiniu.com/sms/api/5894/sms-api-query-template
|
||
*/
|
||
public function queryTemplate($audit_status = null, $page = 1, $page_size = 20)
|
||
{
|
||
|
||
$url = sprintf(
|
||
"%s?audit_status=%s&page=%s&page_size=%s",
|
||
$this->baseURL . 'template',
|
||
$audit_status,
|
||
$page,
|
||
$page_size
|
||
);
|
||
return $this->get($url);
|
||
}
|
||
|
||
/**
|
||
* 查询单个模版
|
||
*
|
||
* @param string $template_id 模版ID
|
||
* @return array
|
||
* @link https://developer.qiniu.com/sms/api/5969/query-a-single-template
|
||
*/
|
||
public function querySingleTemplate($template_id)
|
||
{
|
||
|
||
$url = sprintf(
|
||
"%s/%s",
|
||
$this->baseURL . 'template',
|
||
$template_id
|
||
);
|
||
return $this->get($url);
|
||
}
|
||
|
||
/**
|
||
* 编辑模板
|
||
*
|
||
* @param string $id 模板 ID
|
||
* @param string $name 模板名称
|
||
* @param string $template 模板内容
|
||
* @param string $description 申请理由简述
|
||
* @param string $signature_id 已经审核通过的签名 ID
|
||
* @return array
|
||
* @link https://developer.qiniu.com/sms/api/5895/sms-api-edit-template
|
||
*/
|
||
public function updateTemplate(
|
||
$id,
|
||
$name,
|
||
$template,
|
||
$description,
|
||
$signature_id
|
||
) {
|
||
$params = array();
|
||
$params['name'] = $name;
|
||
$params['template'] = $template;
|
||
$params['description'] = $description;
|
||
$params['signature_id'] = $signature_id;
|
||
$body = json_encode($params);
|
||
$url = $this->baseURL . 'template/' . $id;
|
||
return $this->PUT($url, $body);
|
||
}
|
||
|
||
/**
|
||
* 删除模板
|
||
*
|
||
* @param string $template_id 模板 ID
|
||
* @return array
|
||
* @link https://developer.qiniu.com/sms/api/5896/sms-api-delete-template
|
||
*/
|
||
public function deleteTemplate($template_id)
|
||
{
|
||
$url = $this->baseURL . 'template/' . $template_id;
|
||
return $this->delete($url);
|
||
}
|
||
|
||
/**
|
||
* 发送短信
|
||
*
|
||
* @param string $template_id 模板 ID
|
||
* @param array $mobiles 手机号
|
||
* @param array $parameters 自定义模板变量,变量设置在创建模板时,参数template指定
|
||
* @return array
|
||
* @link https://developer.qiniu.com/sms/api/5897/sms-api-send-message
|
||
*/
|
||
public function sendMessage($template_id, $mobiles, $parameters = null)
|
||
{
|
||
$params = array();
|
||
$params['template_id'] = $template_id;
|
||
$params['mobiles'] = $mobiles;
|
||
if (!empty($parameters)) {
|
||
$params['parameters'] = $parameters;
|
||
}
|
||
$body = json_encode($params);
|
||
$url = $this->baseURL . 'message';
|
||
return $this->post($url, $body);
|
||
}
|
||
|
||
/**
|
||
* 查询发送记录
|
||
*
|
||
* @param string $job_id 发送任务返回的 id
|
||
* @param string $message_id 单条短信发送接口返回的 id
|
||
* @param string $mobile 接收短信的手机号码
|
||
* @param string $status sending: 发送中,success: 发送成功,failed: 发送失败,waiting: 等待发送
|
||
* @param string $template_id 模版 id
|
||
* @param string $type marketing:营销,notification:通知,verification:验证码,voice:语音
|
||
* @param string $start 开始时间,timestamp,例如: 1563280448
|
||
* @param int $end 结束时间,timestamp,例如: 1563280471
|
||
* @param int $page 页码,默认为 1
|
||
* @param int $page_size 每页返回的数据条数,默认20,最大200
|
||
* @return array
|
||
* @link https://developer.qiniu.com/sms/api/5852/query-send-sms
|
||
*/
|
||
public function querySendSms(
|
||
$job_id = null,
|
||
$message_id = null,
|
||
$mobile = null,
|
||
$status = null,
|
||
$template_id = null,
|
||
$type = null,
|
||
$start = null,
|
||
$end = null,
|
||
$page = 1,
|
||
$page_size = 20
|
||
) {
|
||
$query = array();
|
||
\Qiniu\setWithoutEmpty($query, 'job_id', $job_id);
|
||
\Qiniu\setWithoutEmpty($query, 'message_id', $message_id);
|
||
\Qiniu\setWithoutEmpty($query, 'mobile', $mobile);
|
||
\Qiniu\setWithoutEmpty($query, 'status', $status);
|
||
\Qiniu\setWithoutEmpty($query, 'template_id', $template_id);
|
||
\Qiniu\setWithoutEmpty($query, 'type', $type);
|
||
\Qiniu\setWithoutEmpty($query, 'start', $start);
|
||
\Qiniu\setWithoutEmpty($query, 'end', $end);
|
||
\Qiniu\setWithoutEmpty($query, 'page', $page);
|
||
\Qiniu\setWithoutEmpty($query, 'page_size', $page_size);
|
||
|
||
$url = $this->baseURL . 'messages?' . http_build_query($query);
|
||
return $this->get($url);
|
||
}
|
||
|
||
|
||
public function imgToBase64($img_file)
|
||
{
|
||
$img_base64 = '';
|
||
if (file_exists($img_file)) {
|
||
$app_img_file = $img_file; // 图片路径
|
||
$img_info = getimagesize($app_img_file); // 取得图片的大小,类型等
|
||
$fp = fopen($app_img_file, "r"); // 图片是否可读权限
|
||
if ($fp) {
|
||
$filesize = filesize($app_img_file);
|
||
if ($filesize > 5 * 1024 * 1024) {
|
||
die("pic size < 5M !");
|
||
}
|
||
$img_type = null;
|
||
$content = fread($fp, $filesize);
|
||
$file_content = chunk_split(base64_encode($content)); // base64编码
|
||
switch ($img_info[2]) { //判读图片类型
|
||
case 1:
|
||
$img_type = 'gif';
|
||
break;
|
||
case 2:
|
||
$img_type = 'jpg';
|
||
break;
|
||
case 3:
|
||
$img_type = 'png';
|
||
break;
|
||
}
|
||
//合成图片的base64编码
|
||
$img_base64 = 'data:image/' . $img_type . ';base64,' . $file_content;
|
||
}
|
||
fclose($fp);
|
||
}
|
||
|
||
return $img_base64;
|
||
}
|
||
|
||
private function get($url, $contentType = 'application/x-www-form-urlencoded')
|
||
{
|
||
$headers = $this->auth->authorizationV2($url, "GET", null, $contentType);
|
||
$headers['Content-Type'] = $contentType;
|
||
$ret = Client::get($url, $headers);
|
||
if (!$ret->ok()) {
|
||
return array(null, new Error($url, $ret));
|
||
}
|
||
return array($ret->json(), null);
|
||
}
|
||
|
||
private function delete($url, $contentType = 'application/json')
|
||
{
|
||
$headers = $this->auth->authorizationV2($url, "DELETE", null, $contentType);
|
||
$headers['Content-Type'] = $contentType;
|
||
$ret = Client::delete($url, $headers);
|
||
if (!$ret->ok()) {
|
||
return array(null, new Error($url, $ret));
|
||
}
|
||
return array($ret->json(), null);
|
||
}
|
||
|
||
private function post($url, $body, $contentType = 'application/json')
|
||
{
|
||
$headers = $this->auth->authorizationV2($url, "POST", $body, $contentType);
|
||
|
||
$headers['Content-Type'] = $contentType;
|
||
$ret = Client::post($url, $body, $headers);
|
||
if (!$ret->ok()) {
|
||
return array(null, new Error($url, $ret));
|
||
}
|
||
$r = ($ret->body === null) ? array() : $ret->json();
|
||
return array($r, null);
|
||
}
|
||
|
||
private function PUT($url, $body, $contentType = 'application/json')
|
||
{
|
||
$headers = $this->auth->authorizationV2($url, "PUT", $body, $contentType);
|
||
$headers['Content-Type'] = $contentType;
|
||
$ret = Client::put($url, $body, $headers);
|
||
if (!$ret->ok()) {
|
||
return array(null, new Error($url, $ret));
|
||
}
|
||
$r = ($ret->body === null) ? array() : $ret->json();
|
||
return array($r, null);
|
||
}
|
||
}
|