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