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.
156 lines
4.9 KiB
156 lines
4.9 KiB
<?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\yihaotong;
|
|
|
|
|
|
use app\dao\system\config\SystemConfigDao;
|
|
use app\services\BaseServices;
|
|
use crmeb\exceptions\AdminException;
|
|
use crmeb\services\CacheService;
|
|
use crmeb\services\HttpService;
|
|
use crmeb\services\sms\Sms;
|
|
|
|
/**
|
|
* 短信平台注册登陆
|
|
* Class SmsAdminServices
|
|
* @package app\services\message\sms
|
|
*/
|
|
class SmsAdminServices extends BaseServices
|
|
{
|
|
/**
|
|
* 构造方法
|
|
* SmsAdminServices constructor.
|
|
* @param SystemConfigDao $dao
|
|
*/
|
|
public function __construct(SystemConfigDao $dao)
|
|
{
|
|
$this->dao = $dao;
|
|
}
|
|
|
|
/**
|
|
* 更新短信配置
|
|
* @param string $account
|
|
* @param string $password
|
|
* @return mixed
|
|
*/
|
|
public function updateSmsConfig(string $account, string $password)
|
|
{
|
|
return $this->transaction(function () use ($account, $password) {
|
|
$this->dao->update('sms_account', ['value' => json_encode($account)], 'menu_name');
|
|
$this->dao->update('sms_token', ['value' => json_encode($password)], 'menu_name');
|
|
CacheService::clear();
|
|
});
|
|
}
|
|
|
|
/**
|
|
* 注册短信平台
|
|
* @param string $account
|
|
* @param string $password
|
|
* @param string $url
|
|
* @param string $phone
|
|
* @param int $code
|
|
* @param string $sign
|
|
* @return bool
|
|
*/
|
|
public function register(string $account, string $password, string $url, string $phone, string $code, string $sign)
|
|
{
|
|
/** @var Sms $sms */
|
|
$sms = app()->make(Sms::class, ['yihaotong']);
|
|
$status = $sms->register($account, md5(trim($password)), $url, $phone, $code, $sign);
|
|
if ($status['status'] == 400) {
|
|
throw new AdminException(400462, ['msg' => $status['msg']]);
|
|
}
|
|
$this->updateSmsConfig($account, $password);
|
|
return $status;
|
|
}
|
|
|
|
/**
|
|
* 发送验证码
|
|
* @param string $phone
|
|
* @return mixed
|
|
*/
|
|
public function captcha(string $phone)
|
|
{
|
|
/** @var Sms $sms */
|
|
$sms = app()->make(Sms::class, ['yihaotong']);
|
|
//TODO
|
|
$res = json_decode(HttpService::getRequest($sms->getSmsUrl(), compact('phone')), true);
|
|
if (!isset($res['status']) && $res['status'] !== 200) {
|
|
throw new AdminException(400462, ['msg' => $res['data']['message'] ?? $res['msg']]);
|
|
}
|
|
return $res['data']['message'] ?? $res['msg'];
|
|
}
|
|
|
|
/**
|
|
* 短信登陆
|
|
* @param string $account
|
|
* @param string $token
|
|
* @return bool
|
|
* @throws \Psr\SimpleCache\InvalidArgumentException
|
|
*/
|
|
public function login(string $account, string $token)
|
|
{
|
|
/** @var Sms $sms */
|
|
$sms = app()->make(Sms::class, [
|
|
'yihaotong', [
|
|
'sms_account' => $account,
|
|
'sms_token' => $token,
|
|
'site_url' => sys_config('site_url')
|
|
]
|
|
]);
|
|
|
|
$this->updateSmsConfig($account, $token);
|
|
|
|
//添加公共短信模板
|
|
$templateList = $sms->publictemp([]);
|
|
if ($templateList['status'] != 400) {
|
|
if ($templateList['data']['data']) {
|
|
foreach ($templateList['data']['data'] as $v) {
|
|
if ($v['is_have'] == 0)
|
|
$sms->use($v['id'], $v['templateid']);
|
|
}
|
|
}
|
|
CacheService::set('sms_account', $account);
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获取当前登陆的短信账号信息
|
|
* @return mixed
|
|
*/
|
|
public function getSmsData()
|
|
{
|
|
$account = sys_config('sms_account');
|
|
$sms = app()->make(Sms::class, ['yihaotong', [
|
|
'sms_account' => $account,
|
|
'sms_token' => sys_config('sms_token'),
|
|
'site_url' => sys_config('site_url')
|
|
]]);
|
|
$countInfo = $sms->count();
|
|
if ($countInfo['status'] == 400) {
|
|
$info['number'] = 0;
|
|
$info['total_number'] = 0;
|
|
} else {
|
|
$info['number'] = $countInfo['data']['number'];
|
|
$info['total_number'] = $countInfo['data']['send_total'];
|
|
}
|
|
/** @var SmsRecordServices $service */
|
|
$service = app()->make(SmsRecordServices::class);
|
|
$info['record_number'] = $service->count(['uid' => $account]);
|
|
$info['sms_account'] = $account;
|
|
return $info;
|
|
}
|
|
|
|
}
|
|
|