mirror of
https://gitee.com/koogua/course-tencent-cloud.git
synced 2025-06-21 03:17:05 +08:00
公众号功能基本框架
This commit is contained in:
parent
069145ed50
commit
d60d748c28
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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',
|
||||
],
|
||||
],
|
||||
],
|
||||
],
|
||||
|
@ -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();
|
||||
|
16
app/Http/Admin/Views/setting/wechat.volt
Normal file
16
app/Http/Admin/Views/setting/wechat.volt
Normal 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 %}
|
53
app/Http/Admin/Views/setting/wechat_oa.volt
Normal file
53
app/Http/Admin/Views/setting/wechat_oa.volt
Normal 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>
|
@ -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()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
}
|
17
app/Http/Home/Services/WeChatOfficialAccount.php
Normal file
17
app/Http/Home/Services/WeChatOfficialAccount.php
Normal 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();
|
||||
}
|
||||
|
||||
}
|
79
app/Models/WeChatSubscribe.php
Normal file
79
app/Models/WeChatSubscribe.php
Normal 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
59
app/Services/WeChat.php
Normal 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',
|
||||
],
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
}
|
@ -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
1364
composer.lock
generated
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user