Sms.php 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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 array $param 模板参数。短信模板变量对应的实际值。支持传入多个参数, json格式,如 {"name":"张三","number":"1390000****"}
  17. * @param string $signName 签名名称。
  18. * @param string $templateCode 模板ID。
  19. *
  20. */
  21. public function sendSms(string $phone,array $param,string $signName,string $templateCode){
  22. try {
  23. // 变量参数转成json字符串
  24. $param = $param ? json_encode($param,JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE) : '';
  25. // 创建请求
  26. $sendSmsRequest = new SendSmsRequest(['phoneNumbers' => $phone,'signName' => $signName,'templateCode' => $templateCode,'templateParam' => $param]);
  27. // 创建终端
  28. $client = $this->createClient();
  29. // 复制代码运行请自行打印 API 的返回值
  30. $response = $client->sendSmsWithOptions($sendSmsRequest, new RuntimeOptions([]))->toMap();
  31. // 获取参数
  32. $result = $response['body'];
  33. // 如果失败的话
  34. if( $result['Code'] != 'OK' ) return ['code'=>$result['Code'],'error'=>$result['Message'],'request_id'=>$result['RequestId']];
  35. dd($result);
  36. // 返回成功信息
  37. return ['code'=>$result['Code'],'message'=>$result['Message'],'requestId'=>$result['RequestId'],'bizId'=>$result['BizId']];
  38. }catch (\Exception $error) {
  39. // 返回错误信息
  40. if ( !($error instanceof TeaError) ) {
  41. $error = new TeaError([], $error->getMessage(), $error->getCode(), $error);
  42. }
  43. // 错误信息
  44. $errorMsg = Utils::assertAsString($error->message);
  45. // 日志记录
  46. Log::error('aliyun_sms',$errorMsg);
  47. // 返回错误信息
  48. return ['error'=>$errorMsg];
  49. }
  50. }
  51. }