123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- <?php
- /**
- * 手机短信类
- */
- namespace mas;
- use app\common\model\SettingModel;
- use think\facade\Log;
- class Mas
- {
- private $_error_arr = [
- 'IllegalMac' => 'mac校验不通过。',
- 'IllegalSignId' => '无效的签名编码。',
- 'InvalidMessage' => '非法消息,请求数据解析失败。',
- 'InvalidUsrOrPwd' => '非法用户名/密码。',
- 'NoSignId' => '未匹配到对应的签名信息。',
- 'success' => '数据验证通过。',
- 'TooManyMobiles' => '手机号数量超限(>5000),应≤5000。',
- ];
- /**
- * 短信发送
- * @param $mobile
- * @param $smslog_param
- * @return array
- */
- public function send($mobile, $smslog_param)
- {
- $config = SettingModel::getConfigValue(['sms_mas_url', 'sms_mas_ecName', 'sms_mas_apId', 'sms_mas_secretKey', 'sms_mas_sign']);
- if (empty($config['sms_mas_url']) || empty($config['sms_mas_ecName']) || empty($config['sms_mas_apId']) || empty($config['sms_mas_secretKey']) || empty($config['sms_mas_sign'])) {
- return ['code' => 1, 'msg' => '请绑定模板参数'];
- }
- $templateId = $smslog_param['template']['mas'];
- if (empty($templateId)) {
- return ['code' => 1, 'msg' => '系统未配置移动模板编号'];
- }
- //请求参数
- $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['templateId'] . $param['mobiles'] . $param['params'] . $param['sign'] . $param['addSerial']);
- $postFields = base64_encode(json_encode($param));
- //发送请求
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, $config['sms_mas_url']);
- curl_setopt($ch, CURLOPT_HTTPHEADER, [
- 'Content-Type: application/json; charset=utf-8', //json版本需要填写 Content-Type: application/json;
- ]
- );
- curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); //若果报错 name lookup timed out 报错时添加这一行代码
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt($ch, CURLOPT_POST, 1);
- curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
- curl_setopt($ch, CURLOPT_TIMEOUT, 60);
- curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
- $ret = curl_exec($ch);
- curl_close($ch);
- $rsp = json_decode($ret, true);
- if (!$rsp['success']) {
- Log::error('短信发送失败:' . json_encode($rsp) . "。原始参数:" . $postFields);
- $error = $this->_error_arr[$rsp['rspcod']] ?? '未知错误';
- return ['code' => 1, 'msg' => $error];
- } else {
- return ['code' => 0];
- }
- }
- }
|