165 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			165 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			PHP
		
	
	
| 
								 | 
							
								<?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
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								    public const SMS_SIGN = '佩丽商城';
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    // 会员注册模版
							 | 
						|||
| 
								 | 
							
								    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"]',
							 | 
						|||
| 
								 | 
							
								     * 'signNameJson' => '["佩丽商城","恒美会"]',
							 | 
						|||
| 
								 | 
							
								     * '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"]',
							 | 
						|||
| 
								 | 
							
								        //            'signNameJson'      => '["佩丽商城"]',
							 | 
						|||
| 
								 | 
							
								        //            '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  模版  默认注册验证码模版
							 | 
						|||
| 
								 | 
							
								     * @param  string  $signName  标签 默认 佩丽商城
							 | 
						|||
| 
								 | 
							
								     * @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',
							 | 
						|||
| 
								 | 
							
								        //            'signName'      => '佩丽商城',
							 | 
						|||
| 
								 | 
							
								        //            '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 => [
							 | 
						|||
| 
								 | 
							
								                []
							 | 
						|||
| 
								 | 
							
								            ],
							 | 
						|||
| 
								 | 
							
								        ];
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								}
							 |