data_center/vendor/qiniu/php-sdk/src/Qiniu/Sms/Sms.php

381 lines
12 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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