2022-05-25 11:35:57 +00:00
|
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace app\service\ali;
|
|
|
|
|
|
|
|
|
|
use AlibabaCloud\SDK\Dysmsapi\V20170525\Dysmsapi;
|
|
|
|
|
|
|
|
|
|
use AlibabaCloud\SDK\Dysmsapi\V20170525\Models\SendSmsRequest;
|
|
|
|
|
use AlibabaCloud\Tea\Tea;
|
|
|
|
|
use AlibabaCloud\Tea\Utils\Utils;
|
|
|
|
|
use Darabonba\OpenApi\Models\Config;
|
|
|
|
|
use AlibabaCloud\SDK\Dysmsapi\V20170525\Models\SendBatchSmsRequest;
|
|
|
|
|
use think\facade\Log;
|
|
|
|
|
|
|
|
|
|
class Sms
|
|
|
|
|
{
|
2022-06-06 07:15:12 +00:00
|
|
|
|
public const SMS_SIGN = '商城';
|
2022-05-25 11:35:57 +00:00
|
|
|
|
|
|
|
|
|
// 会员注册模版
|
|
|
|
|
public const TEMPLATE_REGISTER_CODE = 'SMS_187934108';
|
|
|
|
|
// 会员通知模版
|
|
|
|
|
public const TEMPLATE_USER_NOTICE = 'SMS_231451587';
|
|
|
|
|
// 活动通知
|
|
|
|
|
public const TEMPLATE_USER_NEW_ACTIVITY = 'SMS_231436568';
|
|
|
|
|
// 员工通知
|
|
|
|
|
public const TEMPLATE_STAFF_NOTICE = 'SMS_231436569';
|
|
|
|
|
|
|
|
|
|
public const STATUS_SUCCESS = 'success';
|
|
|
|
|
public const STATUS_FAIL = 'fail';
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 使用AK&SK初始化账号Client
|
|
|
|
|
* @param string $accessKeyId
|
|
|
|
|
* @param string $accessKeySecret
|
|
|
|
|
* @return Dysmsapi Client
|
|
|
|
|
*/
|
|
|
|
|
public static function createClient(string $accessKeyId = '', string $accessKeySecret = ''): Dysmsapi
|
|
|
|
|
{
|
|
|
|
|
$config = new Config([
|
|
|
|
|
// 您的AccessKey ID
|
|
|
|
|
"accessKeyId" => $accessKeyId ?: 'LTAI4GExL5cc8uHnKJjyqH4h',
|
|
|
|
|
// 您的AccessKey Secret
|
|
|
|
|
"accessKeySecret" => $accessKeySecret ?: 'TNUc1DcQSUOBGmFpKKjT2ImXbg99hO'
|
|
|
|
|
]);
|
|
|
|
|
// 访问的域名
|
|
|
|
|
$config->endpoint = "dysmsapi.aliyuncs.com";
|
|
|
|
|
|
|
|
|
|
return new Dysmsapi($config);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 批量发送[api自带 看场景使用]
|
|
|
|
|
*
|
|
|
|
|
* @param array $args
|
|
|
|
|
* args = [
|
|
|
|
|
* 'phoneNumberJson' => '["135411****","1xxxx"]',
|
2022-06-06 07:15:12 +00:00
|
|
|
|
* 'signNameJson' => '["商城","恒美会"]',
|
2022-05-25 11:35:57 +00:00
|
|
|
|
* 'templateCode' => 'SMS_187934108',
|
|
|
|
|
* 'templateParamJson' => '[{"code":"12345"},{"code":"3333"}]'
|
|
|
|
|
* ]
|
|
|
|
|
*
|
|
|
|
|
* 文档参照:https://next.api.aliyun.com/document/Dysmsapi/2017-05-25/SendBatchSms
|
|
|
|
|
* 注意:参数名 小驼峰 非文档中的大驼峰
|
|
|
|
|
*/
|
|
|
|
|
public static function batchSendByApi(array $args): bool
|
|
|
|
|
{
|
|
|
|
|
//注意格式
|
|
|
|
|
// $args = [
|
|
|
|
|
// 'phoneNumberJson' => '["13541194069"]',
|
2022-06-06 07:15:12 +00:00
|
|
|
|
// 'signNameJson' => '["商城"]',
|
2022-05-25 11:35:57 +00:00
|
|
|
|
// 'templateCode' => 'SMS_187934108',
|
|
|
|
|
// 'templateParamJson' => '[{"code":"12345"}]'
|
|
|
|
|
// ];
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
$client = self::createClient();
|
|
|
|
|
$sendBatchSmsRequest = new SendBatchSmsRequest($args);
|
|
|
|
|
$resp = $client->sendBatchSms($sendBatchSmsRequest);
|
|
|
|
|
Utils::toArray(Tea::merge($resp));
|
|
|
|
|
return true;
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
// code: 400, PhoneNumberJson is mandatory for this action. request id: BED81831-C32E-5589-99C6-D1D05555230A
|
|
|
|
|
Log::error('【短信批量发送失败】'.$e->getMessage());
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 短信发送
|
|
|
|
|
*
|
|
|
|
|
* @param string $phone 手机号
|
|
|
|
|
* @param array $args 参数 如['code' => '3333', 'other' => 'other value'];
|
|
|
|
|
* @param string $templateId 模版 默认注册验证码模版
|
2022-06-06 07:15:12 +00:00
|
|
|
|
* @param string $signName 标签 默认 商城
|
2022-05-25 11:35:57 +00:00
|
|
|
|
* @return bool|string
|
|
|
|
|
*/
|
|
|
|
|
public static function send(string $phone, array $args, string $templateId = self::TEMPLATE_REGISTER_CODE, string $signName = self::SMS_SIGN)
|
|
|
|
|
{
|
|
|
|
|
// $args = [
|
|
|
|
|
// 'phoneNumbers' => '13541194069',
|
2022-06-06 07:15:12 +00:00
|
|
|
|
// 'signName' => '商城',
|
2022-05-25 11:35:57 +00:00
|
|
|
|
// 'templateCode' => 'SMS_187934108',
|
|
|
|
|
// 'templateParam' => '{"code":"66666","other":"other value"}'
|
|
|
|
|
// ];
|
|
|
|
|
|
|
|
|
|
$templateParam = !empty($args) ? json_encode($args, JSON_UNESCAPED_UNICODE) : '';
|
|
|
|
|
$args = [
|
|
|
|
|
'phoneNumbers' => $phone,
|
|
|
|
|
'signName' => $signName,
|
|
|
|
|
'templateCode' => $templateId,
|
|
|
|
|
'templateParam' => $templateParam
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
$client = self::createClient();
|
|
|
|
|
$sendSmsRequest = new SendSmsRequest($args);
|
|
|
|
|
$resp = $client->sendSms($sendSmsRequest);
|
|
|
|
|
$res = Utils::toArray(Tea::merge($resp));
|
|
|
|
|
if (!isset($res['body']) || !isset($res['body']['Code'])) {
|
|
|
|
|
return '返回结果异常';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($res['body']['Code'] != 'OK') {
|
|
|
|
|
return sprintf("【短信发送失败】:code %s, msg:%s", $res['body']['Code'], $res['body']['Message']);
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
Log::error('【短信发送失败】'.$e->getMessage());
|
|
|
|
|
return '【短信发送失败】'.$e->getMessage();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 短信模版
|
|
|
|
|
public static function templateList(): array
|
|
|
|
|
{
|
|
|
|
|
return [
|
|
|
|
|
['name' => '会员通知', 'value' => self::TEMPLATE_USER_NOTICE],
|
|
|
|
|
// ['name' => '会员注册验证码', 'value' => self::TEMPLATE_REGISTER_CODE],
|
|
|
|
|
['name' => '员工通知', 'value' => self::TEMPLATE_STAFF_NOTICE],
|
|
|
|
|
['name' => '活动通知', 'value' => self::TEMPLATE_USER_NEW_ACTIVITY],
|
|
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 短信模版参数列表
|
|
|
|
|
public static function templateParams(): array
|
|
|
|
|
{
|
|
|
|
|
return [
|
|
|
|
|
self::TEMPLATE_REGISTER_CODE => [
|
|
|
|
|
[
|
|
|
|
|
'name' => '验证码',
|
|
|
|
|
'type' => 'string',
|
|
|
|
|
'value' => 'code',
|
|
|
|
|
],
|
|
|
|
|
],
|
|
|
|
|
self::TEMPLATE_USER_NOTICE => [
|
|
|
|
|
[]
|
|
|
|
|
],
|
|
|
|
|
self::TEMPLATE_STAFF_NOTICE => [
|
|
|
|
|
[]
|
|
|
|
|
],
|
|
|
|
|
self::TEMPLATE_USER_NEW_ACTIVITY => [
|
|
|
|
|
[]
|
|
|
|
|
],
|
|
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
}
|