Переглянути джерело

feat(sixshop-tencentcloud-sms): 增加发送短信后的自定义回调逻辑

- 在 sendSms 方法中添加了可选的 $responseCallback 参数
- 如果提供了回调函数,将跳过错误检查并直接返回响应数据- 这允许用户在发送短信后根据需要自定义处理响应
runphp 6 місяців тому
батько
коміт
eebdbffe13
1 змінених файлів з 12 додано та 3 видалено
  1. 12 3
      src/SmsClient.php

+ 12 - 3
src/SmsClient.php

@@ -1,5 +1,6 @@
 <?php
 declare(strict_types=1);
+
 namespace SixShop\TencentCloudSms;
 
 
@@ -26,6 +27,7 @@ class SmsClient
         'InvalidParameterValue.ContentLengthLimit' => '内容长度超出限制',
         'InvalidParameterValue.IncorrectPhoneNumber' => '号码格式错误',
     ];
+
     public function __construct(private Config $config)
     {
         $this->templateMap = array_to_map($this->config->tencent_sms_templates, 'template_id', 'template_content');
@@ -43,8 +45,10 @@ class SmsClient
      * @param array|string $phoneNumberSet 手机号码列表
      * @param string $templateId 模板ID
      * @param array|string $templateParamSet 模板参数
+     * @param callable|null $responseCallback 回调函数
+     * @return array
      */
-    public function sendSms(array|string $phoneNumberSet, string $templateId, array|string $templateParamSet): array
+    public function sendSms(array|string $phoneNumberSet, string $templateId, array|string $templateParamSet, ?callable $responseCallback = null): array
     {
         $phoneNumberSet = (array)$phoneNumberSet;
         $templateParamSet = (array)$templateParamSet;
@@ -57,13 +61,17 @@ class SmsClient
             throw new \RuntimeException($e->getMessage(), $e->getCode(), $e);
         }
         $resp = json_decode($resp->toJsonString(), true);
-        $this->checkError($resp);
+        if ($responseCallback) {
+            return $responseCallback($resp);
+        } else {
+            $this->checkError($resp);
+        }
         return $resp;
     }
 
     private function getSendSmsRequest(array $phoneNumberSet, string $templateId, array $templateParamSet): SendSmsRequest
     {
-        $req =  new SendSmsRequest();
+        $req = new SendSmsRequest();
         $req->setPhoneNumberSet($phoneNumberSet);
         $req->setSmsSdkAppid($this->config->app_id);
         $req->setTemplateID($templateId);
@@ -71,6 +79,7 @@ class SmsClient
         $req->setTemplateParamSet($templateParamSet);
         return $req;
     }
+
     private function checkError(array $resp): void
     {
         foreach ($resp['SendStatusSet'] as $statusItem) {