linwu 19 小时之前
父节点
当前提交
ffc2290438

+ 2 - 0
app/admin/view/sms_template/index.html

@@ -31,6 +31,8 @@
                 [
                     {field: 'id', width: 80,title: 'ID'},
                     {field: 'code', width: 160, title: '编号'},
+                    {field: 'ali', width: 160, title: '阿里模板编号'},
+                    {field: 'mas', width: 240, title: '移动模板编号'},
                     {field: 'comment', title: '备注'},
                     {title: '操作', width: 150, align: 'center', fixed: 'right', toolbar: '#setTpl'}
                 ]

+ 16 - 0
app/admin/view/sms_template/template_form.html

@@ -14,6 +14,22 @@
                                        class="layui-input">
                             </div>
                         </div>
+                        <div class="layui-form-item">
+                            <label class="layui-form-label">阿里编号</label>
+                            <div class="layui-input-block">
+                                <input type="text" name="ali" value="{:array_get($info,'ali')}"
+                                       placeholder="请输入阿里模板编号" autocomplete="off"
+                                       class="layui-input">
+                            </div>
+                        </div>
+                        <div class="layui-form-item">
+                            <label class="layui-form-label">移动编号</label>
+                            <div class="layui-input-block">
+                                <input type="text" name="mas" value="{:array_get($info,'mas')}"
+                                       placeholder="请输入移动模板编号" autocomplete="off"
+                                       class="layui-input">
+                            </div>
+                        </div>
                         <div class="layui-form-item">
                             <label class="layui-form-label">短信内容</label>
                             <div class="layui-input-block">

+ 1 - 0
app/api/ApiBaseController.php

@@ -16,5 +16,6 @@ class ApiBaseController extends BaseController
     // 初始化
     protected function initialize()
     {
+        $this->_init();
     }
 }

+ 43 - 15
app/api/controller/Sms.php

@@ -2,16 +2,18 @@
 
 namespace app\api\controller;
 
-use ali\AliyunSMS;
 use app\api\ApiBaseController;
 use app\common\model\SmsAuthModel;
 use app\common\model\SmsLogModel;
+use app\common\model\SmsTemplateModel;
 use app\common\service\SmsService;
 use think\facade\Log;
 
 class Sms extends ApiBaseController
 {
-    public function send()
+    private $ip;
+    private $token;
+    public function _init()
     {
         //权限校验
         $token = $this->request->header('token');
@@ -30,27 +32,39 @@ class Sms extends ApiBaseController
             ajax_success();
         }
 
-        //发送短信
+        $this->ip = $ip;
+        $this->token = $token;
+    }
+
+    public function send()
+    {
+        //接收短信参数
         $type           = input('post.type', '');
         $mobile         = input('post.mobile', '');
-        $content        = input('post.content', '');
         $template_code  = input('post.template_code', '');
-        $template_param = input('post.template_param', '');
-        if ($type == 'ali') {
-            if (empty($mobile) || empty($template_code) || empty($template_param)) {
-                ajax_error('手机号或模板号或模板参数不能为空!');
-            }
-        } else {
-            if (empty($mobile) || empty($content)) {
-                ajax_error('手机号或内容不能为空!');
+        $template_param = input('post.template_param', []);
+        if (empty($mobile) || empty($template_code) || empty($template_param)) {
+            ajax_error('手机号或模板号或模板参数不能为空!');
+        }
+
+        //短信内容
+        $template = SmsTemplateModel::where('code', $template_code)->find();
+        if (empty($template)) {
+            ajax_error('模板不存在!');
+        }
+        $content = $template['content'];
+        if (!empty($template_param)) {
+            foreach ($template_param as $k => $v) {
+                $content = str_replace('${' . $k . '}', $v, $content);
             }
         }
-        $res = SmsService::apiSend($mobile, $content, $type, $template_code, $template_param);
+
+        $res = SmsService::apiSend($mobile, $content, $type, $template, $template_param);
 
         //记录日志
         $log = [
-            'ip'             => $ip,
-            'token'          => $token,
+            'ip'             => $this->ip,
+            'token'          => $this->token,
             'mobile'         => $mobile,
             'content'        => $content,
             'template_code'  => $template_code,
@@ -66,4 +80,18 @@ class Sms extends ApiBaseController
         }
         ajax_success();
     }
+
+    public function getTemplateList()
+    {
+        $map = $this->dealLikeInput(['code']);
+
+        $list  = SmsTemplateModel::field(['code','content','comment'])
+            ->where($map)
+            ->limit(input('limit',10))
+            ->page(input('page',1))
+            ->select();
+        $count = SmsTemplateModel::where($map)->count();
+
+        ajax_success(['list'=>$list,'count'=>$count]);
+    }
 }

+ 5 - 7
app/common/service/SmsService.php

@@ -28,10 +28,10 @@ class SmsService
         return $sms->send($mobile, ['message' => $msg]);
     }
 
-    public static function apiSend($mobile, $content, $sms_type = '', $template_code = '', $template_param = '')
+    public static function apiSend($mobile, $content, $sms_type = '', $template = '', $template_param = '')
     {
         $sms_obj_arr = [
-            'chuanglang' => 'chuanglan\\Chuanglan',
+            'chuanglan' => 'chuanglan\\Chuanglan',
             'mas'        => 'mas\\Mas',
             'ali'        => 'ali\\Ali',
         ];
@@ -41,10 +41,8 @@ class SmsService
                 return ['code' => 1, 'msg' => '未配置默认模板'];
             }
         }
-        if (empty($sms_obj_arr[$sms_type])) {
-            if (empty($sms_type)) {
-                return ['code' => 1, 'msg' => '模板类型错误'];
-            }
+        if (empty($sms_obj_arr[$sms_type]) && empty($sms_type)) {
+            return ['code' => 1, 'msg' => '模板类型错误'];
         }
 
         if (!in_array($sms_type, array_keys(SettingModel::SMS_TYPE))) {
@@ -55,7 +53,7 @@ class SmsService
         $sms     = new $sms_obj();
         return $sms->send($mobile, [
             'message'        => $content,
-            'template_code'  => $template_code,
+            'template'       => $template,
             'template_param' => $template_param,
         ]);
     }

+ 6 - 1
extend/ali/Ali.php

@@ -31,10 +31,15 @@ class Ali
             return ['code' => 1, 'msg' => '请绑定模板参数'];
         }
 
+        //模板编号
+        $templateCode          = $smslog_param['template']['ali'];
+        if (empty($templateCode)) {
+            return ['code' => 1, 'msg' => '系统未配置阿里模板编号'];
+        }
+
         $this->accessKeyId     = $config['sms_ali_accesskeyid'];
         $this->accessKeySecret = $config['sms_ali_accesskeysecret'];
         $this->signName        = $config['sms_ali_signname'];
-        $templateCode          = $smslog_param['template_code'];
         $templateParam         = $smslog_param['template_param'];
 
         // 公共参数

+ 11 - 22
extend/chuanglan/Chuanglan.php

@@ -24,28 +24,17 @@ class Chuanglan
             return ['code' => 1, 'msg' => '请绑定模板参数'];
         }
 
-        if (empty($smslog_param['params'])) {
-            $url = 'http://smssh1.253.com/msg/send/json';
-            //创蓝接口参数
-            $postArr = [
-                'account'  => $config['sms_chuanglan_appkey'],
-                'password' => $config['sms_chuanglan_secret'],
-                'msg'      => $smslog_param['message'],
-                'phone'    => $mobile,
-                'report'   => 'true',
-            ];
-        } else {
-            $params_str = $mobile . ',' . implode(',', $smslog_param['params']);
-            $url        = 'http://smssh1.253.com/msg/variable/json';
-            //创蓝接口参数
-            $postArr = [
-                'account'  => $config['sms_chuanglan_appkey'],
-                'password' => $config['sms_chuanglan_secret'],
-                'msg'      => $smslog_param['message'],
-                'params'   => $params_str,
-                'report'   => 'true',
-            ];
-        }
+        $url = 'http://smssh1.253.com/msg/send/json';
+        //创蓝接口参数
+        $postArr = [
+            'account'  => $config['sms_chuanglan_appkey'],
+            'password' => $config['sms_chuanglan_secret'],
+            'msg'      => $smslog_param['message'],
+            'phone'    => $mobile,
+            'report'   => 'true',
+        ];
+
+        //发送短信
         $postFields = json_encode($postArr);
         $ch         = curl_init();
         curl_setopt($ch, CURLOPT_URL, $url);

+ 22 - 8
extend/mas/Mas.php

@@ -33,16 +33,29 @@ class Mas
             return ['code' => 1, 'msg' => '请绑定模板参数'];
         }
 
+        $templateId = $smslog_param['template']['mas'];
+        if (empty($templateId)) {
+            return ['code' => 1, 'msg' => '系统未配置移动模板编号'];
+        }
+
         //请求参数
-        $param        = [
-            'ecName'    => $config['sms_mas_ecName'],
-            'apId'      => $config['sms_mas_apId'],
-            'mobiles'   => $mobile,
-            'content'   => $smslog_param['message'],
-            'sign'      => $config['sms_mas_sign'],
-            'addSerial' => '',
+        $params = [""];
+        if (!empty($smslog_param['template_param'])) {
+            $params = [];
+            foreach ($smslog_param['template_param'] as $v) {
+                $params[] = $v;
+            }
+        }
+        $param = [
+            'ecName'     => $config['sms_mas_ecName'],
+            'apId'       => $config['sms_mas_apId'],
+            'mobiles'    => $mobile,
+            'templateId' => $templateId,
+            'params'     => json_encode($params),
+            'sign'       => $config['sms_mas_sign'],
+            'addSerial'  => '',
         ];
-        $param['mac'] = md5($param['ecName'] . $param['apId'] . $config['sms_mas_secretKey'] . $param['mobiles'] . $param['content'] . $param['sign'] . $param['addSerial']);
+        $param['mac'] = md5($param['ecName'] . $param['apId'] . $config['sms_mas_secretKey'] . $param['templateId'] . $param['mobiles'] . $param['params'] . $param['sign'] . $param['addSerial']);
         $postFields   = base64_encode(json_encode($param));
 
         //发送请求
@@ -62,6 +75,7 @@ class Mas
         $ret = curl_exec($ch);
         curl_close($ch);
         $rsp = json_decode($ret, true);
+        halt($rsp);
 
         if (!$rsp['success']) {
             Log::error('短信发送失败:' . json_encode($rsp) . "。原始参数:" . $postFields);

+ 62 - 18
短信接口文档.md

@@ -1,23 +1,22 @@
+## 公共请求头
+
+| 字段名     | 类型   | 是否必填 | 描述         |
+|---------| ------ |------|------------|
+| token   | string | 是    | 平台分配的token |
+
 ## 发送短信
 
 访问方式和地址
 
 `POST https://lw_test.jinjianghc.com/api/sms/send`
 
-请求头
-
-| 字段名     | 类型   | 是否必填 | 描述         |
-|---------| ------ |------|------------|
-| token   | string | 是    | 平台分配的token |
-
 请求参数(可不传,不传按默认值处理):
 
-| 字段名            | 类型     | 是否必填 | 描述                 |
-|----------------|--------|------|--------------------|
-| mobile         | string | 是    | 手机号                |
-| content        | string | 否    | 短信内容               |
-| template_code  | string | 否    | 模板号,ali平台使用        |
-| template_param | object | 否    | 模板参数,ali平台使用       |
+| 字段名            | 类型     | 是否必填 | 描述         |
+|----------------|--------|------|------------|
+| mobile         | string | 是    | 手机号        |
+| template_code  | string | 是    | 模板id       |
+| template_param | object | 是    | 模板参数       |
 | type           | string | 否    | 短信平台,默认"chuanglan" |
 
 短信平台参数说明:
@@ -30,11 +29,11 @@
 
 响应参数说明:
 
-| 字段名  | 类型      | 描述      |
-|------|---------|---------|
-| code | int     | 0成功,1失败 |
-| msg  | varchar | 提示消息    |
-| data | array   | 返回数据    |
+| 字段名  | 类型     | 描述      |
+|------|--------|---------|
+| code | int    | 0成功,1失败 |
+| msg  | string | 提示消息    |
+| data | array  | 返回数据    |
 
 响应示例:
 
@@ -43,4 +42,49 @@
 	"code": 0,
 	"msg": "成功",
 	"data": []
-}
+}
+```
+
+## 获取短信模板类别
+
+访问方式和地址
+`POST https://lw_test.jinjianghc.com/api/sms/getTemplateList`
+请求参数(可不传,不传按默认值处理):
+
+| 字段名   | 类型     | 是否必填 | 描述                 |
+|-------|--------|------|--------------------|
+| code  | string | 否    | 模板编号,模糊搜索          |
+| page  | int    | 否    | 页码,默认1             |
+| limit | object | 否    | 每页显示数量,默认10        |
+
+响应参数说明:
+
+| 字段名               | 类型     | 描述          |
+|-------------------|--------|-------------|
+| code              | int    | 0成功,1失败     |
+| msg               | string | 提示消息        |
+| data              | array  | 返回数据        |
+| data.list         | array  | 数据列表        |
+| data.list.code    | string | 模板编号        |
+| data.list.content | string | 模板内容        |
+| data.list.comment | string | 备注          |
+| data.count        | int    | 数据总数,用于分页计算 |
+
+响应示例:
+
+```json
+{
+  "code": 0,
+  "msg": "成功",
+  "data": {
+    "list": [
+      {
+        "code": "verification_code",
+        "content": "您的验证码为:${code},请勿泄露于他人!",
+        "comment": "短信验证码"
+      }
+    ],
+    "count": 1
+  }
+}
+```