You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
267 lines
9.7 KiB
267 lines
9.7 KiB
5 years ago
|
<?php
|
||
|
/**
|
||
|
* Created by PhpStorm.
|
||
|
* User: Administrator
|
||
|
* Date: 2017/8/3
|
||
|
* Time: 14:58
|
||
|
*/
|
||
|
|
||
|
namespace app\utils;
|
||
|
|
||
|
use app\models\SmsRecord;
|
||
|
use app\models\SmsSetting;
|
||
|
use Hejiang\Sms\Messages\TemplateMessage;
|
||
|
use Hejiang\Sms\Messages\VerificationCodeMessage;
|
||
|
use Hejiang\Sms\Senders\AlidayuSender;
|
||
|
use Hejiang\Sms\Senders\AliyunSender;
|
||
|
|
||
|
class Sms
|
||
|
{
|
||
|
/**
|
||
|
* 发送短信
|
||
|
*
|
||
|
* 短信通知
|
||
|
* @param string $store_id 商铺ID
|
||
|
* @param string $content 内容,字符串
|
||
|
* @return array
|
||
|
*/
|
||
|
public static function send($store_id, $content = null)
|
||
|
{
|
||
|
$sms_setting = SmsSetting::findOne(['is_delete' => 0, 'store_id' => $store_id]);
|
||
|
if ($sms_setting->status == 0) {
|
||
|
return [
|
||
|
'code' => 1,
|
||
|
'msg' => '短信通知服务未开启'
|
||
|
];
|
||
|
}
|
||
|
$content_sms[$sms_setting->msg] = substr($content, -8);
|
||
|
$res = null;
|
||
|
$resp = null;
|
||
|
|
||
|
$a = str_replace(",", ",", $sms_setting->mobile);
|
||
|
$g = explode(",", $a);
|
||
|
foreach ($g as $mobile) {
|
||
|
if (!$mobile) {
|
||
|
continue;
|
||
|
}
|
||
|
try {
|
||
|
$sender = new AliyunSender($sms_setting->AccessKeyId, $sms_setting->AccessKeySecret);
|
||
|
$messageParams = [
|
||
|
'sender' => $sender,
|
||
|
'sign' => $sms_setting->sign,
|
||
|
'tplId' => $sms_setting->tpl,
|
||
|
'tplParams' => $content_sms,
|
||
|
'phoneNumber' => $mobile
|
||
|
];
|
||
|
$message = new TemplateMessage($messageParams);
|
||
|
$res = $message->send();
|
||
|
} catch (\Exception $e) {
|
||
|
\Yii::warning("阿里云短信调用失败:" . $e->getMessage());
|
||
|
try {
|
||
|
$sender = new AlidayuSender($sms_setting->AccessKeyId, $sms_setting->AccessKeySecret);
|
||
|
$messageParams = [
|
||
|
'sender' => $sender,
|
||
|
'sign' => $sms_setting->sign,
|
||
|
'tplId' => $sms_setting->tpl,
|
||
|
'tplParams' => $content_sms,
|
||
|
'phoneNumber' => $mobile
|
||
|
];
|
||
|
$message = new TemplateMessage($messageParams);
|
||
|
$resp = $message->send();
|
||
|
} catch (\Exception $r_e) {
|
||
|
\Yii::warning("阿里大鱼调用失败:" . $r_e->getMessage());
|
||
|
return [
|
||
|
'code' => 1,
|
||
|
'msg' => $e->getMessage() . $r_e->getMessage()
|
||
|
];
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if (is_array($content_sms)) {
|
||
|
foreach ($content_sms as $k => $v) {
|
||
|
$content_sms[$k] = strval($v);
|
||
|
}
|
||
|
$content_sms = json_encode($content_sms, JSON_UNESCAPED_UNICODE);
|
||
|
}
|
||
|
$smsRecord = new SmsRecord();
|
||
|
$smsRecord->mobile = $sms_setting->mobile;
|
||
|
$smsRecord->tpl = $sms_setting->tpl;
|
||
|
$smsRecord->content = $content_sms;
|
||
|
$smsRecord->ip = \Yii::$app->request->userIP;
|
||
|
$smsRecord->addtime = time();
|
||
|
$smsRecord->save();
|
||
|
return [
|
||
|
'code' => 0,
|
||
|
'msg' => '成功'
|
||
|
];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 发送短信 退款通知
|
||
|
* @param string $store_id 商铺ID
|
||
|
* @param string $content 内容,字符串
|
||
|
* @return array
|
||
|
*/
|
||
|
public static function send_refund($store_id, $content = null)
|
||
|
{
|
||
|
$sms_setting = SmsSetting::findOne(['is_delete' => 0, 'store_id' => $store_id]);
|
||
|
if ($sms_setting->status == 0) {
|
||
|
return [
|
||
|
'code' => 1,
|
||
|
'msg' => '短信通知服务未开启'
|
||
|
];
|
||
|
}
|
||
|
// $content_sms[$sms_setting->msg] = substr($content, -8);
|
||
|
$res = null;
|
||
|
$resp = null;
|
||
|
|
||
|
$a = str_replace(",", ",", $sms_setting->mobile);
|
||
|
$g = explode(",", $a);
|
||
|
$tpl = json_decode($sms_setting->tpl_refund, true);
|
||
|
if (!is_array($tpl) || !$tpl['tpl']) {
|
||
|
return [
|
||
|
'code' => 1,
|
||
|
'msg' => '未设置退款短信'
|
||
|
];
|
||
|
}
|
||
|
foreach ($g as $mobile) {
|
||
|
try {
|
||
|
$sender = new AliyunSender($sms_setting->AccessKeyId, $sms_setting->AccessKeySecret);
|
||
|
$messageParams = [
|
||
|
'sender' => $sender,
|
||
|
'sign' => $sms_setting->sign,
|
||
|
'tplId' => $tpl['tpl'],
|
||
|
'tplParams' => [],
|
||
|
'phoneNumber' => $mobile
|
||
|
];
|
||
|
$message = new TemplateMessage($messageParams);
|
||
|
$res = $message->send();
|
||
|
} catch (\Exception $e) {
|
||
|
// \Yii::warning("阿里云短信调用失败:" . $e->getMessage());
|
||
|
try {
|
||
|
$sender = new AlidayuSender($sms_setting->AccessKeyId, $sms_setting->AccessKeySecret);
|
||
|
$messageParams = [
|
||
|
'sender' => $sender,
|
||
|
'sign' => $sms_setting->sign,
|
||
|
'tplId' => $tpl['tpl'],
|
||
|
'tplParams' => [],
|
||
|
'phoneNumber' => $mobile
|
||
|
];
|
||
|
$message = new TemplateMessage($messageParams);
|
||
|
$res = $message->send();
|
||
|
} catch (\Exception $r_e) {
|
||
|
return [
|
||
|
'code' => 1,
|
||
|
'msg' => $e->getMessage().$r_e->getMessage()
|
||
|
];
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
$smsRecord = new SmsRecord();
|
||
|
$smsRecord->mobile = $sms_setting->mobile;
|
||
|
$smsRecord->tpl = $tpl['tpl'];
|
||
|
$smsRecord->content = '';
|
||
|
$smsRecord->ip = \Yii::$app->request->userIP;
|
||
|
$smsRecord->addtime = time();
|
||
|
$smsRecord->save();
|
||
|
return [
|
||
|
'code' => 0,
|
||
|
'msg' => '成功'
|
||
|
];
|
||
|
}
|
||
|
|
||
|
|
||
|
public static function send_text($store_id, $content = null, $mobile)
|
||
|
{
|
||
|
$sms_setting = SmsSetting::findOne(['is_delete' => 0, 'store_id' => $store_id]);
|
||
|
$mobile_cache = \Yii::$app->cache->get('mobile_cache' . $mobile);
|
||
|
if ($mobile_cache) {
|
||
|
return [
|
||
|
'code' => 1,
|
||
|
'msg' => '请勿频繁发送短信',
|
||
|
'data' => $mobile,
|
||
|
];
|
||
|
}
|
||
|
\Yii::$app->cache->set('mobile_cache' . $mobile, true, 60);
|
||
|
if ($sms_setting->status == 0) {
|
||
|
return [
|
||
|
'code' => 1,
|
||
|
'msg' => '短信通知服务未开启'
|
||
|
];
|
||
|
}
|
||
|
if (!$mobile) {
|
||
|
return [
|
||
|
'code' => 1,
|
||
|
'msg' => '请输入手机号'
|
||
|
];
|
||
|
}
|
||
|
$tpl = json_decode($sms_setting->tpl_code, true);
|
||
|
if (!is_array($tpl) || !$tpl['tpl']) {
|
||
|
return [
|
||
|
'code' => 1,
|
||
|
'msg' => '未设置验证码短信'
|
||
|
];
|
||
|
}
|
||
|
$content_sms[$tpl['msg']] = $content;
|
||
|
$res = null;
|
||
|
$resp = null;
|
||
|
|
||
|
try {
|
||
|
$sender = new AliyunSender($sms_setting->AccessKeyId, $sms_setting->AccessKeySecret);
|
||
|
$messageParams = [
|
||
|
'sender' => $sender,
|
||
|
'sign' => $sms_setting->sign,
|
||
|
'tplId' => $tpl['tpl'],
|
||
|
'tplParams' => $content_sms,
|
||
|
'phoneNumber' => $mobile
|
||
|
];
|
||
|
$message = new VerificationCodeMessage($messageParams);
|
||
|
$message->codePointer = &$message->tplParams['code'];
|
||
|
$res = $message->send();
|
||
|
$content_sms[$tpl['msg']] = $message->codePointer;
|
||
|
\Yii::$app->cache->set('code_cache' . $mobile, $message, 600);
|
||
|
} catch (\Exception $e) {
|
||
|
\Yii::warning("阿里云短信调用失败:" . $e->getMessage());
|
||
|
try {
|
||
|
\Yii::$app->cache->delete('mobile_cache' . $mobile);
|
||
|
$sender = new AlidayuSender($sms_setting->AccessKeyId, $sms_setting->AccessKeySecret);
|
||
|
$messageParams = [
|
||
|
'sender' => $sender,
|
||
|
'sign' => $sms_setting->sign,
|
||
|
'tplId' => $tpl['tpl'],
|
||
|
'tplParams' => $content_sms,
|
||
|
'phoneNumber' => $mobile
|
||
|
];
|
||
|
$message = new VerificationCodeMessage($messageParams);
|
||
|
$message->codePointer = &$message->tplParams['code'];
|
||
|
$res = $message->send();
|
||
|
$content_sms[$tpl['msg']] = $message->codePointer;
|
||
|
\Yii::$app->cache->set('code_cache' . $mobile, $message, 600);
|
||
|
} catch (\Exception $r_e) {
|
||
|
\Yii::$app->cache->delete('mobile_cache' . $mobile);
|
||
|
return [
|
||
|
'code' => 2,
|
||
|
'msg' => $r_e->getMessage().$e->getMessage()
|
||
|
];
|
||
|
}
|
||
|
}
|
||
|
if (is_array($content_sms)) {
|
||
|
foreach ($content_sms as $k => $v) {
|
||
|
$content_sms[$k] = strval($v);
|
||
|
}
|
||
|
$content_sms = json_encode($content_sms, JSON_UNESCAPED_UNICODE);
|
||
|
}
|
||
|
$smsRecord = new SmsRecord();
|
||
|
$smsRecord->mobile = $mobile;
|
||
|
$smsRecord->tpl = $tpl['tpl'];
|
||
|
$smsRecord->content = $content_sms;
|
||
|
$smsRecord->ip = \Yii::$app->request->userIP;
|
||
|
$smsRecord->addtime = time();
|
||
|
$smsRecord->save();
|
||
|
return [
|
||
|
'code' => 0,
|
||
|
'msg' => '成功'
|
||
|
];
|
||
|
}
|
||
|
}
|