2025-03-13 09:24:48 +08:00

199 lines
6.5 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\services\message\notice;
use app\jobs\notice\SmsJob;
use app\jobs\TaskJob;
use app\services\message\NoticeService;
use app\services\kefu\service\StoreServiceServices;
use app\services\message\SystemNotificationServices;
use app\services\serve\ServeServices;
use crmeb\exceptions\ApiException;
use crmeb\services\CacheService;
use think\facade\Log;
/**
* 短信发送消息列表
* Created by PhpStorm.
* User: xurongyao <763569752@qq.com>
* Date: 2021/9/22 1:23 PM
*/
class SmsService extends NoticeService
{
/**
* 短信类型
* @var string[]
*/
private $smsType = ['yihaotong', 'aliyun', 'tencent'];
/**
* 发送短信消息
* @param $phone
* @param array $data
* @return bool|void
*/
public function sendSms($phone, array $data)
{
try {
if ($this->noticeInfo['is_sms'] == 1) {
try {
$this->send(true, $phone, $data, $this->noticeInfo['mark']);
return true;
} catch (\Throwable $e) {
Log::error('发送短信失败,失败原因:' . $e->getMessage());
}
}
} catch (\Exception $e) {
Log::error($e->getMessage());
return true;
}
}
/**
* 发送短信
* @param bool $switch
* @param $phone
* @param array $data
* @param string $mark
* @return bool
*/
public function send(bool $switch, $phone, array $data, string $mark)
{
if ($switch && $phone) {
//获取发送短信驱动类型
$type = $this->smsType[sys_config('sms_type', 0)];
if ($type == 'tencent') {
$data = $this->handleTencent($mark, $data);
}
$smsMake = app()->make(ServeServices::class)->sms($type);
$smsId = $mark == 'verify_code' ? app()->make(SystemNotificationServices::class)->value(['mark' => 'verify_code'], 'sms_id') : $this->noticeInfo['sms_id'];
//发送短信
$res = $smsMake->send($phone, $smsId, $data);
if ($res === false) {
throw new ApiException($smsMake->getError());
}
return true;
} else {
return false;
}
}
/**
* 退款发送管理员消息任务
* @param $order
* @return bool
*/
public function sendAdminRefund($order)
{
if ($this->noticeInfo['is_sms'] == 1) {
/** @var StoreServiceServices $StoreServiceServices */
$StoreServiceServices = app()->make(StoreServiceServices::class);
$adminList = $StoreServiceServices->getStoreServiceOrderNotice();
foreach ($adminList as $item) {
$data = ['order_id' => $order['order_id'], 'admin_name' => $item['nickname']];
$this->sendSms($item['phone'], $data);
}
}
return true;
}
/**
* 用户确认收货管理员短信提醒
* @param $switch
* @param $adminList
* @param $order
* @return bool
*/
public function sendAdminConfirmTakeOver($order)
{
if ($this->noticeInfo['is_sms'] == 1) {
/** @var StoreServiceServices $StoreServiceServices */
$StoreServiceServices = app()->make(StoreServiceServices::class);
$adminList = $StoreServiceServices->getStoreServiceOrderNotice();
foreach ($adminList as $item) {
$data = ['order_id' => $order['order_id'], 'admin_name' => $item['nickname']];
$this->sendSms($item['phone'], $data);
}
}
return true;
}
/**
* 下单成功给客服管理员发送短信
* @param $switch
* @param $adminList
* @param $order
* @return bool
*/
public function sendAdminPaySuccess($order)
{
if ($this->noticeInfo['is_sms'] == 1) {
/** @var StoreServiceServices $StoreServiceServices */
$StoreServiceServices = app()->make(StoreServiceServices::class);
$adminList = $StoreServiceServices->getStoreServiceOrderNotice();
foreach ($adminList as $item) {
$data = ['order_id' => $order['order_id'], 'admin_name' => $item['nickname']];
$this->sendSms($item['phone'], $data);
}
}
return true;
}
/**
* 处理腾讯云参数
* @param $mark
* @param $data
* @return array
*/
public function handleTencent($mark, $data)
{
$result = [];
switch ($mark) {
case 'verify_code':
$result = [(string)$data['code'], (string)$data['time']];
break;
case 'send_order_refund_no_status':
case 'order_pay_false':
$result = [$data['order_id']];
break;
case 'price_revision':
$result = [$data['order_id'], (string)$data['pay_price']];
break;
case 'order_pay_success':
$result = [(string)$data['pay_price'], $data['order_id']];
break;
case 'order_take':
$result = [$data['order_id'], $data['store_name']];
break;
case 'send_order_apply_refund':
case 'admin_pay_success_code':
case 'send_admin_confirm_take_over':
$result = [$data['admin_name'], $data['order_id']];
break;
case 'order_deliver_success':
case 'order_postage_success':
$result = [$data['nickname'], $data['store_name'], $data['order_id']];
break;
case 'order_refund':
$result = [$data['order_id'], $data['refund_price']];
break;
case 'recharge_success':
$result = [$data['price'], $data['now_money']];
break;
}
return $result;
}
}