SmsServices.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: qiuzijian
  5. * Date: 6/22/24
  6. * Time: 12:34 PM
  7. */
  8. namespace Modules\Admin\Services;
  9. use AlibabaCloud\SDK\Dysmsapi\V20170525\Dysmsapi;
  10. use \Exception;
  11. use AlibabaCloud\Tea\Exception\TeaError;
  12. use AlibabaCloud\Tea\Utils\Utils;
  13. use Darabonba\OpenApi\Models\Config;
  14. use AlibabaCloud\SDK\Dysmsapi\V20170525\Models\SendBatchSmsRequest;
  15. use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
  16. use Illuminate\Support\Facades\DB;
  17. class SmsServices{
  18. // 短信模板code
  19. private $templateCode = [
  20. "",
  21. "SMS_475295115", // 会议审批提醒-提醒领导审批 1
  22. "SMS_475345129", // 会议通知-个人 2
  23. "SMS_475205106", // 会议通知-部门 3
  24. "", // 通知申请人 4
  25. ];
  26. public function __construct()
  27. {
  28. }
  29. /**
  30. * 使用AK&SK初始化账号Client
  31. * @return Dysmsapi Client
  32. */
  33. public static function createClient(){
  34. // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
  35. // 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/311677.html。
  36. $access_key_id = getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
  37. $access_key_secret = getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
  38. if (empty($access_key_id) || empty($access_key_secret)) {
  39. error_log("短信配置错误", 0);
  40. return null;
  41. }
  42. $config = new Config([
  43. // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
  44. "accessKeyId" => $access_key_id,
  45. // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
  46. "accessKeySecret" => $access_key_secret
  47. ]);
  48. // Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi
  49. $config->endpoint = "dysmsapi.aliyuncs.com";
  50. return new Dysmsapi($config);
  51. }
  52. /**
  53. * 会议通知:${uname},您好!您有一个会议需要参加,会议时间为${meetdate},地点为${meetroom},会议主题为${meetname},详情登录安宁查看。
  54. */
  55. public function sendBatchSms($phoneArr, $infoArr, $tplCode){
  56. if (empty($phoneArr)||empty($infoArr) || empty($tplCode)) {
  57. error_log("短信参数错误", 0);
  58. return;
  59. }
  60. $client = $this->createClient();
  61. if (empty($client)) {
  62. error_log("短信客户端创建失败", 0);
  63. return null;
  64. }
  65. // 签名
  66. for ($i = 0; $i < count($phoneArr); $i++) {
  67. $signArr[] = $this->sign;
  68. }
  69. $client = self::createClient();
  70. // $sendBatchSmsRequest = new SendBatchSmsRequest([
  71. // "phoneNumberJson" => "[\"15309501557\"]",
  72. // "templateCode" => "SMS_474845249",
  73. // "signNameJson" => "[\"智慧矿山\"]",
  74. // "templateParamJson" => "[{\"uname\":\"秦先生\", \"meetdate\":\"2024-11-11 11:11:00\", \"meetroom\":\"道德讲堂\",\"meetname\":\"论短信通知的重要性\"}]"
  75. // ]);
  76. $dSmsInfo = [
  77. "phoneNumberJson" => json_encode($phoneArr),
  78. "templateCode" => $this->templateCode[$tplCode],
  79. "signNameJson" => json_encode($signArr),
  80. "templateParamJson" => json_encode($infoArr)
  81. ];
  82. $sendBatchSmsRequest = new SendBatchSmsRequest($dSmsInfo);
  83. $runtime = new RuntimeOptions([]);
  84. try {
  85. // 复制代码运行请自行打印 API 的返回值
  86. $client->sendBatchSmsWithOptions($sendBatchSmsRequest, $runtime);
  87. }
  88. catch (Exception $error) {
  89. if (!($error instanceof TeaError)) {
  90. $error = new TeaError([], $error->getMessage(), $error->getCode(), $error);
  91. }
  92. // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
  93. // 错误 message
  94. var_dump($error->message);
  95. // 诊断地址
  96. var_dump($error->data["Recommend"]);
  97. Utils::assertAsString($error->message);
  98. }
  99. }
  100. }