周总批发商场
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.
 
 
 
 
 
 
dianshang/crmeb/app/services/yihaotong/SmsAdminServices.php

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;
}
}