ufutx.dma/app/Jobs/SendEasySms.php
2026-03-04 14:42:40 +08:00

135 lines
4.4 KiB
PHP

<?php
namespace App\Jobs;
use App\Models\Message;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Log;
use Overtrue\EasySms\EasySms;
use Overtrue\EasySms\Exceptions\NoGatewayAvailableException;
use Overtrue\EasySms\PhoneNumber;
class SendEasySms implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $mobile, $data, $area_code;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($mobile, $data, $area_code=86)
{
$this->mobile = $mobile;
$this->data = $data;
$this->area_code = $area_code;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
Log::info("发送短信");
$err_msg = null;
$batch_id = "";
if (empty($this->mobile)) throw new \Exception("发送短信失败,未获取到手机号信息");
if (config('app.env') == 'production') {
if(isset($this->data['code'])) {//验证码
if ($this->area_code == 86) {
// $err_msg = $this->send();
list($batch_id, $err_msg) = $this->sendMessage();
}else {
list($batch_id, $err_msg) = $this->sendIntel();
}
}else {
list($batch_id, $err_msg) = $this->sendMessage();
}
}else{
$this->data['code'] = '999999';
}
$user_IP = (isset($_SERVER["HTTP_VIA"]) && $_SERVER["HTTP_VIA"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : ($_SERVER["REMOTE_ADDR"]??null);
$user_IP = ($user_IP) ?: ($_SERVER["REMOTE_ADDR"]??null);
Message::create([
'mobile'=>$this->mobile,
'code'=>$this->data['code']??0,
'message'=>$this->data['message'],
'confirmed'=>0,
'ip'=> $user_IP,
'err_msg'=>$err_msg,
"batch_id"=>$batch_id,
]);
}
public function sendMessage()
{
$batch_id = "";
try {
$config = config('easysms');
$easySms = new EasySms($config);
$res = $easySms->send($this->mobile, [
'content' => ($this->data)['message'],
],['luosimao']);
if (isset($res["luosimao"]["result"]["batch_id"])) {
$batch_id = $res["luosimao"]["result"]["batch_id"];
}
$err_msg = null;
}catch (NoGatewayAvailableException $e) {
$error_logs = $e->getExceptions();
$err_msg = $error_logs['luosimao']->getMessage();
}
return [$batch_id, $err_msg];
}
public function send()
{
try {
$config = config('easysms');
$easySms = new EasySms($config);
$easySms->send($this->mobile, [
'content' => "验证码:".($this->data['code']).",用于手机绑定,如非本人操作,请忽略本短信!",
'template' => 'SMS_186360996', // 模板ID
'data' => [
"code" => ($this->data)['code'],
],
],['aliyun']);
$err_msg = null;
}catch (NoGatewayAvailableException $e) {
$error_logs = $e->getExceptions();
$err_msg = $error_logs['aliyun']->getMessage();
}
return $err_msg;
}
public function sendIntel()
{
try {
$config = config('easysms');
$easySms = new EasySms($config);
$phone_number = new PhoneNumber($this->mobile, $this->area_code);
$easySms->send($phone_number, [
'content' => "验证码:".($this->data['code']).",用于手机绑定,如非本人操作,请忽略本短信!",
'template' => 'SMS_463597984', // 模板ID
'data' => [
"code" => ($this->data)['code'],
],
],['aliyun']);
$err_msg = null;
} catch (NoGatewayAvailableException $e) {
$error_logs = $e->getExceptions();
$err_msg = $error_logs['aliyun']->getMessage();
}
$batch_id = "";
return [$batch_id, $err_msg];
}
}