Mas.php 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. <?php
  2. /**
  3. * 手机短信类
  4. */
  5. namespace mas;
  6. use app\common\model\SettingModel;
  7. use think\facade\Log;
  8. class Mas
  9. {
  10. private $_error_arr = [
  11. 'IllegalMac' => 'mac校验不通过。',
  12. 'IllegalSignId' => '无效的签名编码。',
  13. 'InvalidMessage' => '非法消息,请求数据解析失败。',
  14. 'InvalidUsrOrPwd' => '非法用户名/密码。',
  15. 'NoSignId' => '未匹配到对应的签名信息。',
  16. 'success' => '数据验证通过。',
  17. 'TooManyMobiles' => '手机号数量超限(>5000),应≤5000。',
  18. ];
  19. /**
  20. * 短信发送
  21. * @param $mobile
  22. * @param $smslog_param
  23. * @return array
  24. */
  25. public function send($mobile, $smslog_param)
  26. {
  27. $config = SettingModel::getConfigValue(['sms_mas_url', 'sms_mas_ecName', 'sms_mas_apId', 'sms_mas_secretKey', 'sms_mas_sign']);
  28. 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'])) {
  29. return ['code' => 1, 'msg' => '请绑定模板参数'];
  30. }
  31. //请求参数
  32. $param = [
  33. 'ecName' => $config['sms_mas_ecName'],
  34. 'apId' => $config['sms_mas_apId'],
  35. 'mobiles' => $mobile,
  36. 'content' => $smslog_param['message'],
  37. 'sign' => $config['sms_mas_sign'],
  38. 'addSerial' => '',
  39. ];
  40. $param['mac'] = md5($param['ecName'] . $param['apId'] . $config['sms_mas_secretKey'] . $param['mobiles'] . $param['content'] . $param['sign'] . $param['addSerial']);
  41. $postFields = base64_encode(json_encode($param));
  42. //发送请求
  43. $ch = curl_init();
  44. curl_setopt($ch, CURLOPT_URL, $config['sms_mas_url']);
  45. curl_setopt($ch, CURLOPT_HTTPHEADER, [
  46. 'Content-Type: application/json; charset=utf-8', //json版本需要填写 Content-Type: application/json;
  47. ]
  48. );
  49. curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); //若果报错 name lookup timed out 报错时添加这一行代码
  50. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  51. curl_setopt($ch, CURLOPT_POST, 1);
  52. curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
  53. curl_setopt($ch, CURLOPT_TIMEOUT, 60);
  54. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
  55. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
  56. $ret = curl_exec($ch);
  57. curl_close($ch);
  58. $rsp = json_decode($ret, true);
  59. if (!$rsp['success']) {
  60. Log::error('短信发送失败:' . json_encode($rsp) . "。原始参数:" . $postFields);
  61. $error = $this->_error_arr[$rsp['rspcod']] ?? '未知错误';
  62. return ['code' => 1, 'msg' => $error];
  63. } else {
  64. return ['code' => 0];
  65. }
  66. }
  67. }