157 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			157 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?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;
 | 
						||
    }
 | 
						||
 | 
						||
}
 |