286 lines
11 KiB
PHP
286 lines
11 KiB
PHP
<?php namespace App\Utils;
|
||
|
||
use App\Utils\Str;
|
||
use App\Utils\IP;
|
||
use App\Utils\Common;
|
||
use App\Models\User;
|
||
use App\Http\Response\ResponseJson;
|
||
use Overtrue\EasySms\EasySms;
|
||
|
||
class Messenger
|
||
{
|
||
use ResponseJson;
|
||
|
||
/*
|
||
* 发送邮件
|
||
*/
|
||
/**
|
||
* @param $email
|
||
* @param $subject
|
||
* @param $message
|
||
* @param string $type
|
||
* @return bool|void
|
||
*/
|
||
static public function sendMail($email, $subject, $message, $type = 'invite')
|
||
{
|
||
\Log::info("Mail result: To($email)- Subject($subject) - Body($message)");
|
||
if (\Config::get('messenger.debug')) {
|
||
//$email = \Auth::user()->email;
|
||
$email = \Config::get('messenger.debug_email');
|
||
}
|
||
|
||
$disable = !\Config::get('messenger.enable');
|
||
if ($disable) {
|
||
return;
|
||
}
|
||
|
||
$url = 'http://sendcloud.sohu.com/webapi/mail.send.json';
|
||
//不同于登录SendCloud站点的帐号,您需要登录后台创建发信子帐号,使用子帐号和密码才可以进行邮件的发送。
|
||
$param = array('api_user' => \Config::get('messenger.mailer.api_user_' . $type, 'ufutx_invite'),
|
||
'api_key' => \Config::get('messenger.mailer.api_key'),
|
||
'from' => \Config::get('messenger.mailer.from', 'info@ufutx.com'),
|
||
'fromname' => \Config::get('messenger.mailer.fromname', '友福同享'),
|
||
'to' => $email,
|
||
'subject' => $subject,
|
||
'html' => $message);
|
||
|
||
$query = http_build_query($param);
|
||
$options = array('http' => array(
|
||
'header' => "Content-Type: application/x-www-form-urlencoded\r\n" .
|
||
"Content-Length: " . strlen($query) . "\r\n" .
|
||
"User-Agent:Ufutx/1.0\r\n",
|
||
'method' => 'POST', 'content' => $query));
|
||
if (\Config::get('messenger.proxy_enable')) {
|
||
$options['http']['proxy'] = 'tcp://' . \Config::get('messenger.proxy_host') . ':' . \Config::get('messenger.proxy_port');
|
||
$options['http']['request_fulluri'] = true;
|
||
}
|
||
$context = stream_context_create($options);
|
||
$return = file_get_contents($url, false, $context);
|
||
|
||
$result = json_decode($return);
|
||
|
||
if ($result->message == 'success') {
|
||
return true;
|
||
} else {
|
||
\Log::error('Mailer Failed:' . $return);
|
||
return false;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 发短信
|
||
* @param $mobile
|
||
* @param $message
|
||
* @param $template
|
||
* @param $data
|
||
*/
|
||
static public function sendEasySms($mobile, $message, $template, $data)
|
||
{
|
||
try {
|
||
$easySms = new EasySms(config('sms'));
|
||
$easySms->send($mobile, [
|
||
'content' => $message,
|
||
'template' => $template,
|
||
'data' => $data,
|
||
], ['aliyun']);
|
||
return true;
|
||
} catch (\Exception $e) {
|
||
\Log::error($e->getLastException()->getMessage());
|
||
return false;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 发送短信
|
||
* opt["yunzhixun"]=1,则$message="陈彬,曾荣耀"("接收人,发送人"/"接收人"),云之讯的消息内容,这里不体现。所以message就当作接收人和发送人来用。
|
||
* @param $mobile
|
||
* @param $message
|
||
* @param array $opt
|
||
* @return array
|
||
*/
|
||
static public function sendSMS($mobile, $message, $opt = [])
|
||
{
|
||
\Log::info('Send Message To: (' . $mobile . ')' . $message);
|
||
if (\Config::get('messenger.debug'))
|
||
$mobile = \Config::get('messenger.debug_mobile');
|
||
|
||
$disable = !\Config::get('messenger.enable');
|
||
if ($disable) {
|
||
return ['code' => true,
|
||
'result' => 'disable'];
|
||
}
|
||
$type = Str::isMobile($mobile);
|
||
|
||
if ($type == 2) {
|
||
$mobile = '852' . $mobile;
|
||
} elseif ($type == 4) {
|
||
$mobile = '886' . $mobile;
|
||
} elseif ($type == 3) {
|
||
$mobile = '853' . $mobile;
|
||
}
|
||
|
||
// 默认都用 luosimao 发送,除非设定 luosimao=>0
|
||
$luosimao = !(isset($opt['luosimao']) && $opt['luosimao'] === 0);
|
||
|
||
if ($type == 1) {
|
||
$config = \Config::get('messenger.mainland');
|
||
$url = "http://utf8.sms.webchinese.cn/?smsMob=$mobile&smsText=" . urlencode($message);
|
||
} elseif ($type > 1) {
|
||
$config = \Config::get('messenger.hongkong');
|
||
|
||
$url = "http://api.accessyou.com/sms/sendsms-utf8.php?phone=$mobile&msg=" . urlencode($message);
|
||
} else {
|
||
\Log::error('Unavailable Phone number');
|
||
return ['code' => false,
|
||
'result' => 'invalid phone'];
|
||
}
|
||
|
||
foreach ($config as $key => $value) {
|
||
$url .= '&' . $key . '=' . urlencode($value);
|
||
}
|
||
|
||
// 大陆
|
||
if ($type == 1) {
|
||
if (config('messenger.mainland_vender') == 'gausstel') {
|
||
$gausstel = config('messenger.gausstel');
|
||
$gausstel['to'] = $mobile;
|
||
//自动添加签名。
|
||
$gausstel['content'] = iconv('UTF-8', 'GBK', $message . config('messenger.signature'));
|
||
$url = 'http://gateway.iems.net.cn/GsmsHttp?' . http_build_query($gausstel);
|
||
$ch = curl_init();
|
||
$timeout = 5;
|
||
curl_setopt($ch, CURLOPT_URL, $url);
|
||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
||
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
|
||
if (\Config::get('messenger.proxy_enable')) {
|
||
curl_setopt($ch, CURLOPT_PROXY, 'http://' . \Config::get('messenger.proxy_host'));
|
||
curl_setopt($ch, CURLOPT_PROXYPORT, \Config::get('messenger.proxy_port'));
|
||
}
|
||
|
||
$file_contents = curl_exec($ch);
|
||
curl_close($ch);
|
||
} else { //默认使用luosimao
|
||
$message .= config('messenger.signature');
|
||
$ch = curl_init();
|
||
curl_setopt($ch, CURLOPT_URL, "https://sms-api.luosimao.com/v1/send.json");
|
||
|
||
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
|
||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
|
||
curl_setopt($ch, CURLOPT_HEADER, FALSE);
|
||
|
||
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
|
||
curl_setopt($ch, CURLOPT_USERPWD, 'api:key-' . config('messenger.luosimao.key'));
|
||
|
||
curl_setopt($ch, CURLOPT_POST, TRUE);
|
||
curl_setopt($ch, CURLOPT_POSTFIELDS, array('mobile' => $mobile, 'message' => $message));
|
||
if (\Config::get('messenger.proxy_enable')) {
|
||
curl_setopt($ch, CURLOPT_PROXY, 'http://' . \Config::get('messenger.proxy_host'));
|
||
curl_setopt($ch, CURLOPT_PROXYPORT, \Config::get('messenger.proxy_port'));
|
||
}
|
||
|
||
$res = curl_exec($ch);
|
||
curl_close($ch);
|
||
$result = json_decode($res);
|
||
if (empty($result)) {
|
||
// \Log::info('SMS Failed: '.$result->msg);
|
||
return ['code' => false,
|
||
'result' => $result];
|
||
}
|
||
if ($result->error == 0) {
|
||
return ['code' => true,
|
||
'result' => $result];
|
||
} else {
|
||
\Log::info('SMS Failed: ' . $result->msg);
|
||
return ['code' => false,
|
||
'result' => $result];
|
||
}
|
||
}
|
||
} else {//未指定根据手机区域
|
||
if (function_exists('file_get_contents')) {
|
||
if (\Config::get('messenger.proxy_enable')) {
|
||
$opt = array(
|
||
'http' => array(
|
||
'proxy' => 'tcp://' . \Config::get('messenger.proxy_host') . ':' . \Config::get('messenger.proxy_port'),
|
||
'request_fulluri' => true,
|
||
)
|
||
);
|
||
$context = stream_context_create($opt);
|
||
$file_contents = file_get_contents($url, false, $context);
|
||
} else {
|
||
$file_contents = file_get_contents($url);
|
||
}
|
||
} else {
|
||
$ch = curl_init();
|
||
$timeout = 5;
|
||
curl_setopt($ch, CURLOPT_URL, $url);
|
||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
||
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
|
||
if (\Config::get('messenger.proxy_enable')) {
|
||
curl_setopt($ch, CURLOPT_PROXY, 'http://' . \Config::get('messenger.proxy_host'));
|
||
curl_setopt($ch, CURLOPT_PROXYPORT, \Config::get('messenger.proxy_port'));
|
||
}
|
||
|
||
$file_contents = curl_exec($ch);
|
||
curl_close($ch);
|
||
}
|
||
if (intval($file_contents) > 0) {
|
||
return ['code' => true,
|
||
'result' => $file_contents];
|
||
} else {
|
||
\Log::info('SMS Failed: ' . $file_contents);
|
||
return ['code' => false,
|
||
'result' => $file_contents];
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
/**
|
||
* 螺丝帽批量发送短信
|
||
* *
|
||
* @param $mobile
|
||
* @param $message
|
||
* @param $phone
|
||
* @return array
|
||
*/
|
||
static public function sendSmsBatch($mobile, $message, $phone)
|
||
{
|
||
$message .= config('messenger.signature');
|
||
$ch = curl_init();
|
||
curl_setopt($ch, CURLOPT_URL, "https://sms-api.luosimao.com/v1/send_batch.json");
|
||
|
||
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
|
||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
|
||
curl_setopt($ch, CURLOPT_HEADER, FALSE);
|
||
|
||
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
|
||
curl_setopt($ch, CURLOPT_USERPWD, 'api:key-' . config('messenger.luosimao.key'));
|
||
|
||
curl_setopt($ch, CURLOPT_POST, TRUE);
|
||
curl_setopt($ch, CURLOPT_POSTFIELDS, array('mobile_list' => $mobile, 'message' => $message));
|
||
if (\Config::get('messenger.proxy_enable')) {
|
||
curl_setopt($ch, CURLOPT_PROXY, 'http://' . \Config::get('messenger.proxy_host'));
|
||
curl_setopt($ch, CURLOPT_PROXYPORT, \Config::get('messenger.proxy_port'));
|
||
}
|
||
|
||
$res = curl_exec($ch);
|
||
curl_close($ch);
|
||
$result = json_decode($res);
|
||
if (empty($result)) {
|
||
// \Log::info('SMS Failed: '.$result->msg);
|
||
return ['code' => false,
|
||
'result' => $result];
|
||
}
|
||
if ($result->error == 0) {
|
||
return ['code' => true,
|
||
'result' => $result];
|
||
} else {
|
||
\Log::info('SMS Failed: ' . $result->msg);
|
||
return ['code' => false,
|
||
'result' => $result];
|
||
}
|
||
}
|
||
|
||
}
|
||
|