Sms.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. <?php namespace App\Servers\Aliyun;
  2. use AlibabaCloud\SDK\Dysmsapi\V20170525\Models\SendSmsRequest;
  3. use AlibabaCloud\Tea\Exception\TeaError;
  4. use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
  5. use AlibabaCloud\Tea\Utils\Utils;
  6. use App\Facades\Servers\Logs\Log;
  7. /**
  8. * 验证码模型
  9. *
  10. * @author 刘相欣
  11. */
  12. class Sms extends Client{
  13. /**
  14. * 发送短信
  15. * @param string $phone 手机号。国际/港澳台消息需加国际区号。支持向不同的手机号码发送短信,手机号码之间以半角逗号(,)分隔。上限为 1000 个手机号码。批量发送相对于单条发送,及时性稍有延迟。验证码类型的短信,建议单条发送。
  16. * @param string $signName 签名名称。
  17. * @param string $templateCode 模板ID。
  18. * @param array $param 模板参数。短信模板变量对应的实际值。支持传入多个参数, json格式,如 {"name":"张三","number":"1390000****"}
  19. *
  20. */
  21. public function sendSms(string $phone,string $signName,string $templateCode,array $param=[]){
  22. try {
  23. // 变量参数转成json字符串
  24. $param = $param ? json_encode($param,JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE) : '';
  25. $request = ['phoneNumbers' => $phone,'signName' => $signName,'templateCode' => $templateCode];
  26. if( $param ) $request['templateParam'] = $param;
  27. // 创建请求
  28. $sendSmsRequest = new SendSmsRequest($request);
  29. // 创建终端
  30. $client = $this->createClient();
  31. // 复制代码运行请自行打印 API 的返回值
  32. $response = $client->sendSmsWithOptions($sendSmsRequest, new RuntimeOptions([]))->toMap();
  33. // 获取参数
  34. $result = $response['body'];
  35. // 如果失败的话
  36. if( $result['Code'] != 'OK' ) return ['code'=>$result['Code'],'error'=>$result['Message'],'request_id'=>$result['RequestId']];
  37. dd($result);
  38. // 返回成功信息
  39. return ['code'=>$result['Code'],'message'=>$result['Message'],'requestId'=>$result['RequestId'],'bizId'=>$result['BizId']];
  40. }catch (\Exception $error) {
  41. // 返回错误信息
  42. if ( !($error instanceof TeaError) ) {
  43. $error = new TeaError([], $error->getMessage(), $error->getCode(), $error);
  44. }
  45. // 错误信息
  46. $errorMsg = Utils::assertAsString($error->message);
  47. // 日志记录
  48. Log::error('aliyun_sms',$errorMsg);
  49. // 返回错误信息
  50. return ['error'=>$errorMsg];
  51. }
  52. }
  53. }