1
0
mirror of https://gitee.com/koogua/course-tencent-cloud.git synced 2025-06-21 03:17:05 +08:00

公众号功能基本框架

This commit is contained in:
xiaochong0302 2020-12-12 17:01:49 +08:00
parent 069145ed50
commit d60d748c28
11 changed files with 1307 additions and 365 deletions

View File

@ -327,4 +327,29 @@ class SettingController extends Controller
}
}
/**
* @Route("/wechat", name="admin.setting.wechat")
*/
public function wechatAction()
{
$settingService = new SettingService();
if ($this->request->isPost()) {
$section = $this->request->getPost('section', 'string');
$data = $this->request->getPost();
$settingService->updateSettings($section, $data);
return $this->jsonSuccess(['msg' => '更新配置成功']);
} else {
$oa = $settingService->getWeChatOASettings();
$this->view->setVar('oa', $oa);
}
}
}

View File

@ -750,6 +750,12 @@ class AuthNode extends Service
'type' => 'menu',
'route' => 'admin.setting.oauth',
],
[
'id' => '5-1-13',
'title' => '微信公众平台',
'type' => 'menu',
'route' => 'admin.setting.wechat',
],
],
],
],

View File

@ -57,6 +57,16 @@ class Setting extends Service
return $wxpay;
}
public function getWeChatOASettings()
{
$oa = $this->getSettings('wechat.oa');
$oa['auth_url'] = $oa['auth_url'] ?: kg_full_url(['for' => 'home.wechat.oa.auth_callback']);
$oa['notify_url'] = $oa['notify_url'] ?: kg_full_url(['for' => 'home.wechat.oa.notify_callback']);
return $oa;
}
public function getVipSettings()
{
$vipRepo = new VipRepo();

View File

@ -0,0 +1,16 @@
{% extends 'templates/main.volt' %}
{% block content %}
<div class="layui-tab layui-tab-brief">
<ul class="layui-tab-title kg-tab-title">
<li class="layui-this">公众号</li>
</ul>
<div class="layui-tab-content">
<div class="layui-tab-item layui-show">
{{ partial('setting/wechat_oa') }}
</div>
</div>
</div>
{% endblock %}

View File

@ -0,0 +1,53 @@
<form class="layui-form kg-form" method="POST" action="{{ url({'for':'admin.setting.wechat'}) }}">
<div class="layui-form-item">
<label class="layui-form-label">开启公众号</label>
<div class="layui-input-block">
<input type="radio" name="enabled" value="1" title="是" {% if oa.enabled == "1" %}checked="checked"{% endif %}>
<input type="radio" name="enabled" value="0" title="否" {% if oa.enabled == "0" %}checked="checked"{% endif %}>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">App ID</label>
<div class="layui-input-block">
<input class="layui-input" type="text" name="app_id" value="{{ oa.app_id }}" lay-verify="required">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">App Secret</label>
<div class="layui-input-block">
<input class="layui-input" type="text" name="app_secret" value="{{ oa.app_secret }}" lay-verify="required">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">App Token</label>
<div class="layui-input-block">
<input class="layui-input" type="text" name="app_token" value="{{ oa.app_token }}" lay-verify="required">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">Aes Key</label>
<div class="layui-input-block">
<input class="layui-input" type="text" name="aes_key" value="{{ oa.aes_key }}" lay-verify="required">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">授权回调地址</label>
<div class="layui-input-block">
<input class="layui-input" type="text" name="oauth_url" value="{{ oa.auth_url }}" lay-verify="required">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">通知回调地址</label>
<div class="layui-input-block">
<input class="layui-input" type="text" name="notify_url" value="{{ oa.notify_url }}" lay-verify="required">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"></label>
<div class="layui-input-block">
<button class="layui-btn" lay-submit="true" lay-filter="go">提交</button>
<button type="button" class="kg-back layui-btn layui-btn-primary">返回</button>
<input type="hidden" name="section" value="oauth.weixin">
</div>
</div>
</form>

View File

@ -0,0 +1,40 @@
<?php
namespace App\Http\Home\Controllers;
use App\Http\Home\Services\WeChatOfficialAccount as WeChatOAService;
use App\Traits\Response as ResponseTrait;
/**
* @RoutePrefix("/wechat/oa")
*/
class WeChatOfficialAccountController extends \Phalcon\Mvc\Controller
{
use ResponseTrait;
/**
* @Get("/notify", name="home.wechat.oa.verify")
*/
public function verifyAction()
{
$service = new WeChatOAService();
$app = $service->getOfficialAccount();
$response = $app->server->serve();
$response->send();
exit;
}
/**
* @Post("/notify", name="home.wechat.oa.notify")
*/
public function notifyAction()
{
}
}

View File

@ -0,0 +1,17 @@
<?php
namespace App\Http\Home\Services;
use App\Services\WeChat as WeChatService;
class WeChatOfficialAccount extends Service
{
public function getOfficialAccount()
{
$service = new WeChatService();
return $service->getOfficialAccount();
}
}

View File

@ -0,0 +1,79 @@
<?php
namespace App\Models;
use Phalcon\Mvc\Model\Behavior\SoftDelete;
class WeChatSubscribe extends Model
{
/**
* 主键编号
*
* @var int
*/
public $id;
/**
* 用户编号
*
* @var int
*/
public $user_id;
/**
* 开放ID
*
* @var string
*/
public $open_id;
/**
* 删除标识
*
* @var int
*/
public $deleted;
/**
* 创建时间
*
* @var int
*/
public $create_time;
/**
* 更新时间
*
* @var int
*/
public $update_time;
public function getSource(): string
{
return 'kg_wechat_subscribe';
}
public function initialize()
{
parent::initialize();
$this->addBehavior(
new SoftDelete([
'field' => 'deleted',
'value' => 1,
])
);
}
public function beforeCreate()
{
$this->create_time = time();
}
public function beforeUpdate()
{
$this->update_time = time();
}
}

59
app/Services/WeChat.php Normal file
View File

@ -0,0 +1,59 @@
<?php
namespace App\Services;
use EasyWeChat\Factory;
use Phalcon\Logger\Adapter\File as FileLogger;
class WeChat extends Service
{
/**
* @var FileLogger
*/
protected $logger;
public function __construct()
{
$this->logger = $this->getLogger('wechat');
}
public function getOfficialAccount()
{
$settings = $this->getSettings('wechat.oa');
$config = [
'app_id' => $settings['app_id'],
'secret' => $settings['app_secret'],
'token' => $settings['app_token'],
'aes_key' => $settings['aes_key'],
'log' => $this->getLogOptions(),
];
return Factory::officialAccount($config);
}
protected function getLogOptions()
{
$config = $this->getConfig();
$default = $config->get('env') == ENV_DEV ? 'dev' : 'prod';
return [
'default' => $default,
'channels' => [
'dev' => [
'driver' => 'daily',
'path' => log_path('wechat.log'),
'level' => 'debug',
],
'prod' => [
'driver' => 'daily',
'path' => log_path('wechat.log'),
'level' => 'info',
],
]
];
}
}

View File

@ -20,7 +20,8 @@
"aferrandini/phpqrcode": "1.0.1",
"xiaochong0302/ip2region": "^1.0",
"robmorgan/phinx": "^0.12",
"lcobucci/jwt": "^3.3"
"lcobucci/jwt": "^3.3",
"overtrue/wechat": "^4.2"
},
"require-dev": {
"odan/phinx-migrations-generator": "^5.1",

1364
composer.lock generated

File diff suppressed because it is too large Load Diff