Mas.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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. $templateId = $smslog_param['template']['mas'];
  32. if (empty($templateId)) {
  33. return ['code' => 1, 'msg' => '系统未配置移动模板编号'];
  34. }
  35. //请求参数
  36. $params = [""];
  37. if (!empty($smslog_param['template_param'])) {
  38. $params = [];
  39. foreach ($smslog_param['template_param'] as $v) {
  40. $params[] = $v;
  41. }
  42. }
  43. $param = [
  44. 'ecName' => $config['sms_mas_ecName'],
  45. 'apId' => $config['sms_mas_apId'],
  46. 'mobiles' => $mobile,
  47. 'templateId' => $templateId,
  48. 'params' => json_encode($params),
  49. 'sign' => $config['sms_mas_sign'],
  50. 'addSerial' => '',
  51. ];
  52. $param['mac'] = md5($param['ecName'] . $param['apId'] . $config['sms_mas_secretKey'] . $param['templateId'] . $param['mobiles'] . $param['params'] . $param['sign'] . $param['addSerial']);
  53. $postFields = base64_encode(json_encode($param));
  54. //发送请求
  55. $ch = curl_init();
  56. curl_setopt($ch, CURLOPT_URL, $config['sms_mas_url']);
  57. curl_setopt($ch, CURLOPT_HTTPHEADER, [
  58. 'Content-Type: application/json; charset=utf-8', //json版本需要填写 Content-Type: application/json;
  59. ]
  60. );
  61. curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); //若果报错 name lookup timed out 报错时添加这一行代码
  62. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  63. curl_setopt($ch, CURLOPT_POST, 1);
  64. curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
  65. curl_setopt($ch, CURLOPT_TIMEOUT, 60);
  66. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
  67. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
  68. $ret = curl_exec($ch);
  69. curl_close($ch);
  70. $rsp = json_decode($ret, true);
  71. if (!$rsp['success']) {
  72. Log::error('短信发送失败:' . json_encode($rsp) . "。原始参数:" . $postFields);
  73. $error = $this->_error_arr[$rsp['rspcod']] ?? '未知错误';
  74. return ['code' => 1, 'msg' => $error];
  75. } else {
  76. return ['code' => 0];
  77. }
  78. }
  79. }