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.
294 lines
11 KiB
294 lines
11 KiB
<?php |
|
/** |
|
* Created by PhpStorm. |
|
* User: Administrator |
|
* Date: 2017/8/3 |
|
* Time: 14:58 |
|
*/ |
|
|
|
namespace app\extensions; |
|
|
|
|
|
use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest; |
|
use Aliyun\Core\DefaultAcsClient; |
|
use Aliyun\Core\Profile\DefaultProfile; |
|
use app\models\SmsRecord; |
|
use app\models\SmsSetting; |
|
use Hejiang\Sms\Exceptions\SmsException; |
|
use Hejiang\Sms\Messages\TemplateMessage; |
|
use Hejiang\Sms\Messages\VerificationCodeMessage; |
|
use Hejiang\Sms\Senders\AliyunSender; |
|
use yii\helpers\ArrayHelper; |
|
use yii\helpers\VarDumper; |
|
|
|
require_once __DIR__ . '/alidayu/TopSdk.php'; |
|
|
|
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 { |
|
$c = new \TopClient(); |
|
$c->appkey = $sms_setting->AccessKeyId; |
|
$c->secretKey = $sms_setting->AccessKeySecret; |
|
$req = new \AlibabaAliqinFcSmsNumSendRequest; |
|
$req->setSmsType("normal"); |
|
$req->setSmsFreeSignName($sms_setting->sign); |
|
$req->setSmsParam(json_encode($content_sms, JSON_UNESCAPED_UNICODE)); |
|
$req->setRecNum($mobile); |
|
$req->setSmsTemplateCode($sms_setting->tpl); |
|
$resp = $c->execute($req); |
|
} catch (\Exception $e) { |
|
\Yii::warning("阿里大鱼调用失败:" . $e->getMessage()); |
|
return [ |
|
'code' => 1, |
|
'msg' => $e->getMessage() |
|
]; |
|
} |
|
} |
|
} |
|
if ($res || $resp) { |
|
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' => '成功' |
|
]; |
|
} else { |
|
return [ |
|
'code' => 1, |
|
'msg' => $res->Message . $resp->sub_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 { |
|
$c = new \TopClient(); |
|
$c->appkey = $sms_setting->AccessKeyId; |
|
$c->secretKey = $sms_setting->AccessKeySecret; |
|
$req = new \AlibabaAliqinFcSmsNumSendRequest; |
|
$req->setSmsType("normal"); |
|
$req->setSmsFreeSignName($sms_setting->sign); |
|
$req->setRecNum($mobile); |
|
$req->setSmsTemplateCode($tpl['tpl']); |
|
$resp = $c->execute($req); |
|
} catch (\Exception $e) { |
|
// \Yii::warning("阿里大鱼调用失败:" . $e->getMessage()); |
|
return [ |
|
'code' => 1, |
|
'msg' => $e->getMessage() |
|
]; |
|
|
|
} |
|
} |
|
// $msg = $resp ? json_encode($resp, JSON_UNESCAPED_UNICODE) : ($res ? json_encode($res, JSON_UNESCAPED_UNICODE) : ""); |
|
// \Yii::trace("短信发送结果:" . $msg); |
|
} |
|
if ($res || ($resp && $resp->code == 0)) { |
|
$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' => '成功' |
|
]; |
|
} else { |
|
return [ |
|
'code' => 1, |
|
'msg' => $res->Message . $resp->sub_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 { |
|
$c = new \TopClient(); |
|
$c->appkey = $sms_setting->AccessKeyId; |
|
$c->secretKey = $sms_setting->AccessKeySecret; |
|
$req = new \AlibabaAliqinFcSmsNumSendRequest; |
|
$req->setSmsType("normal"); |
|
$req->setSmsFreeSignName($sms_setting->sign); |
|
$req->setRecNum($mobile); |
|
$req->setSmsTemplateCode($tpl['tpl']); |
|
$resp = $c->execute($req); |
|
} catch (\Exception $e) { |
|
// \Yii::warning("阿里大鱼调用失败:" . $e->getMessage()); |
|
\Yii::$app->cache->delete('mobile_cache' . $mobile); |
|
return [ |
|
'code' => 2, |
|
'msg' => $e->getMessage() |
|
]; |
|
|
|
} |
|
} |
|
if ($res || ($resp && $resp->code == 0)) { |
|
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' => '成功' |
|
]; |
|
} else { |
|
\Yii::$app->cache->delete('mobile_cache' . $mobile); |
|
return [ |
|
'code' => 2, |
|
'msg' => $resp->sub_msg |
|
]; |
|
} |
|
} |
|
} |