1
0
mirror of https://gitee.com/koogua/course-tencent-cloud.git synced 2025-07-25 17:31:42 +08:00

1.修复验证码

2.增加第三方登录
This commit is contained in:
xiaochong0302 2020-04-17 18:53:04 +08:00
parent cf5e50f402
commit 3c906cb6c7
40 changed files with 460 additions and 117 deletions

View File

@ -33,8 +33,10 @@ class CleanAuthTokenTask extends Task
*/ */
protected function findAccessTokens() protected function findAccessTokens()
{ {
$expiryTime = strtotime('-30 days');
return AccessTokenModel::query() return AccessTokenModel::query()
->where('expiry_time < :expiry_time:', ['expiry_time' => time()]) ->where('expiry_time < :expiry_time:', ['expiry_time' => $expiryTime])
->execute(); ->execute();
} }
@ -45,8 +47,10 @@ class CleanAuthTokenTask extends Task
*/ */
protected function findRefreshTokens() protected function findRefreshTokens()
{ {
$expiryTime = strtotime('-30 days');
return RefreshTokenModel::query() return RefreshTokenModel::query()
->where('expiry_time < :expiry_time:', ['expiry_time' => time()]) ->where('expiry_time < :expiry_time:', ['expiry_time' => $expiryTime])
->execute(); ->execute();
} }

View File

@ -3,8 +3,8 @@
namespace App\Console\Tasks; namespace App\Console\Tasks;
use App\Models\Trade as TradeModel; use App\Models\Trade as TradeModel;
use App\Services\Payment\Alipay as AlipayService; use App\Services\Pay\Alipay as AlipayService;
use App\Services\Payment\Wxpay as WxpayService; use App\Services\Pay\Wxpay as WxpayService;
use Phalcon\Cli\Task; use Phalcon\Cli\Task;
use Phalcon\Mvc\Model\Resultset; use Phalcon\Mvc\Model\Resultset;
use Phalcon\Mvc\Model\ResultsetInterface; use Phalcon\Mvc\Model\ResultsetInterface;

View File

@ -11,8 +11,8 @@ use App\Repos\Order as OrderRepo;
use App\Repos\Refund as RefundRepo; use App\Repos\Refund as RefundRepo;
use App\Repos\Trade as TradeRepo; use App\Repos\Trade as TradeRepo;
use App\Repos\User as UserRepo; use App\Repos\User as UserRepo;
use App\Services\Payment\Alipay as AlipayService; use App\Services\Pay\Alipay as AlipayService;
use App\Services\Payment\Wxpay as WxpayService; use App\Services\Pay\Wxpay as WxpayService;
use App\Services\Smser\Refund as RefundSmser; use App\Services\Smser\Refund as RefundSmser;
use Phalcon\Mvc\Model\Resultset; use Phalcon\Mvc\Model\Resultset;
use Phalcon\Mvc\Model\ResultsetInterface; use Phalcon\Mvc\Model\ResultsetInterface;
@ -140,7 +140,7 @@ class RefundTask extends Task
} }
if (!$response) { if (!$response) {
throw new \RuntimeException('Payment Refund Failed'); throw new \RuntimeException('Pay Refund Failed');
} }
} }

View File

@ -39,7 +39,6 @@ class SessionController extends \Phalcon\Mvc\Controller
$captcha = $settingService->getSectionSettings('captcha'); $captcha = $settingService->getSectionSettings('captcha');
$this->view->pick('public/login'); $this->view->pick('public/login');
$this->view->setVar('captcha', $captcha); $this->view->setVar('captcha', $captcha);
} }

View File

@ -139,9 +139,9 @@ class SettingController extends Controller
} }
/** /**
* @Route("/payment", name="admin.setting.payment") * @Route("/pay", name="admin.setting.pay")
*/ */
public function paymentAction() public function payAction()
{ {
$settingService = new SettingService(); $settingService = new SettingService();
@ -157,14 +157,43 @@ class SettingController extends Controller
} else { } else {
$alipay = $settingService->getSectionSettings('payment.alipay'); $alipay = $settingService->getSectionSettings('pay.alipay');
$wxpay = $settingService->getSectionSettings('payment.wxpay'); $wxpay = $settingService->getSectionSettings('pay.wxpay');
$this->view->setVar('alipay', $alipay); $this->view->setVar('alipay', $alipay);
$this->view->setVar('wxpay', $wxpay); $this->view->setVar('wxpay', $wxpay);
} }
} }
/**
* @Route("/oauth", name="admin.setting.oauth")
*/
public function oauthAction()
{
$settingService = new SettingService();
if ($this->request->isPost()) {
$section = $this->request->getPost('section');
$data = $this->request->getPost();
$settingService->updateSectionSettings($section, $data);
return $this->jsonSuccess(['msg' => '更新配置成功']);
} else {
$qq = $settingService->getSectionSettings('oauth.qq');
$weibo = $settingService->getSectionSettings('oauth.weibo');
$weixin = $settingService->getSectionSettings('oauth.weixin');
$this->view->setVar('qq', $qq);
$this->view->setVar('weibo', $weibo);
$this->view->setVar('weixin', $weixin);
}
}
/** /**
* @Route("/smser", name="admin.setting.smser") * @Route("/smser", name="admin.setting.smser")
*/ */

View File

@ -72,7 +72,6 @@ class TestController extends Controller
$obs->stream_code = substr($pushUrl, $position + 1); $obs->stream_code = substr($pushUrl, $position + 1);
$this->view->pick('setting/live_push_test'); $this->view->pick('setting/live_push_test');
$this->view->setVar('code_url', $codeUrl); $this->view->setVar('code_url', $codeUrl);
$this->view->setVar('obs', $obs); $this->view->setVar('obs', $obs);
} }
@ -90,7 +89,6 @@ class TestController extends Controller
$this->view->setRenderLevel(View::LEVEL_ACTION_VIEW); $this->view->setRenderLevel(View::LEVEL_ACTION_VIEW);
$this->view->pick('public/live_player'); $this->view->pick('public/live_player');
$this->view->setVar('m3u8_pull_urls', $m3u8PullUrls); $this->view->setVar('m3u8_pull_urls', $m3u8PullUrls);
$this->view->setVar('flv_pull_urls', $flvPullUrls); $this->view->setVar('flv_pull_urls', $flvPullUrls);
} }
@ -183,8 +181,7 @@ class TestController extends Controller
); );
} }
$this->view->pick('setting/payment_alipay_test'); $this->view->pick('setting/pay_alipay_test');
$this->view->setVar('trade_sn', $trade->sn); $this->view->setVar('trade_sn', $trade->sn);
$this->view->setVar('code_url', $codeUrl); $this->view->setVar('code_url', $codeUrl);
} }
@ -236,8 +233,7 @@ class TestController extends Controller
$this->db->rollback(); $this->db->rollback();
} }
$this->view->pick('setting/payment_wxpay_test'); $this->view->pick('setting/pay_wxpay_test');
$this->view->setVar('trade_sn', $trade->sn); $this->view->setVar('trade_sn', $trade->sn);
$this->view->setVar('code_url', $codeUrl); $this->view->setVar('code_url', $codeUrl);
} }

View File

@ -34,9 +34,7 @@ class VodController extends Controller
$playUrl = $this->request->getQuery('play_url'); $playUrl = $this->request->getQuery('play_url');
$this->view->setRenderLevel(View::LEVEL_ACTION_VIEW); $this->view->setRenderLevel(View::LEVEL_ACTION_VIEW);
$this->view->pick('public/vod_player'); $this->view->pick('public/vod_player');
$this->view->setVar('chapter_id', $chapterId); $this->view->setVar('chapter_id', $chapterId);
$this->view->setVar('play_url', urldecode($playUrl)); $this->view->setVar('play_url', urldecode($playUrl));
} }

View File

@ -6,9 +6,9 @@ use App\Models\Order as OrderModel;
use App\Models\Trade as TradeModel; use App\Models\Trade as TradeModel;
use App\Repos\Order as OrderRepo; use App\Repos\Order as OrderRepo;
use App\Repos\Trade as TradeRepo; use App\Repos\Trade as TradeRepo;
use App\Services\Payment\Alipay as AlipayService; use App\Services\Pay\Alipay as AlipayService;
class AlipayTest extends PaymentTest class AlipayTest extends PayTest
{ {
protected $channel = TradeModel::CHANNEL_ALIPAY; protected $channel = TradeModel::CHANNEL_ALIPAY;

View File

@ -679,10 +679,16 @@ class AuthNode extends Service
'id' => '5-1-9', 'id' => '5-1-9',
'label' => '支付设置', 'label' => '支付设置',
'type' => 'menu', 'type' => 'menu',
'route' => 'admin.setting.payment', 'route' => 'admin.setting.pay',
], ],
[ [
'id' => '5-1-10', 'id' => '5-1-10',
'label' => '登录设置',
'type' => 'menu',
'route' => 'admin.setting.oauth',
],
[
'id' => '5-1-11',
'label' => '会员设置', 'label' => '会员设置',
'type' => 'menu', 'type' => 'menu',
'route' => 'admin.setting.vip', 'route' => 'admin.setting.vip',

View File

@ -6,7 +6,7 @@ use App\Models\Order as OrderModel;
use App\Models\Trade as TradeModel; use App\Models\Trade as TradeModel;
use App\Services\Auth\Admin as AdminAuth; use App\Services\Auth\Admin as AdminAuth;
abstract class PaymentTest extends Service abstract class PayTest extends Service
{ {
/** /**

View File

@ -3,9 +3,9 @@
namespace App\Http\Admin\Services; namespace App\Http\Admin\Services;
use App\Models\Trade as TradeModel; use App\Models\Trade as TradeModel;
use App\Services\Payment\Wxpay as WxpayService; use App\Services\Pay\Wxpay as WxpayService;
class WxpayTest extends PaymentTest class WxpayTest extends PayTest
{ {
protected $channel = TradeModel::CHANNEL_WXPAY; protected $channel = TradeModel::CHANNEL_WXPAY;

View File

@ -57,12 +57,14 @@
$('#captcha-btn')[0], $('#captcha-btn')[0],
$('#captcha-btn').attr('app-id'), $('#captcha-btn').attr('app-id'),
function (res) { function (res) {
if (res.ret === 0) {
$('input[name=ticket]').val(res.ticket); $('input[name=ticket]').val(res.ticket);
$('input[name=rand]').val(res.randstr); $('input[name=rand]').val(res.randstr);
$('#captcha-btn').remove(); $('#captcha-btn').remove();
$('#submit-btn').removeAttr('disabled'); $('#submit-btn').removeAttr('disabled');
$('#verify-tips').removeClass('layui-hide'); $('#verify-tips').removeClass('layui-hide');
} }
}
); );
}); });

View File

@ -37,16 +37,16 @@
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label"><i class="layui-icon layui-icon-vercode"></i></label> <label class="layui-form-label"><i class="layui-icon layui-icon-vercode"></i></label>
<div class="layui-input-inline" style="width:200px;"> <div class="layui-input-inline" style="width:200px;">
<span id="captcha-btn" class="layui-btn layui-btn-primary layui-btn-fluid">前台验证</span> <span id="front-verify-btn" class="layui-btn layui-btn-primary layui-btn-fluid" app-id="{{ captcha.app_id }}">前台验证</span>
<span id="frontend-verify-tips" class="kg-btn-verify layui-btn layui-btn-primary layui-btn-fluid layui-btn-disabled layui-hide"><i class="layui-icon layui-icon-ok"></i>前台验证成功</span> <span id="front-verify-tips" class="kg-btn-verify layui-btn layui-btn-primary layui-btn-fluid layui-btn-disabled layui-hide"><i class="layui-icon layui-icon-ok"></i>前台验证成功</span>
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label"><i class="layui-icon layui-icon-vercode"></i></label> <label class="layui-form-label"><i class="layui-icon layui-icon-vercode"></i></label>
<div class="layui-input-inline" style="width:200px;"> <div class="layui-input-inline" style="width:200px;">
<span id="verify-submit-btn" class="layui-btn layui-btn-primary layui-btn-fluid" disabled="true" lay-submit="true" lay-filter="backend-verify">后台验证</span> <span id="back-verify-btn" class="layui-btn layui-btn-primary layui-btn-fluid" disabled="true" lay-submit="true" lay-filter="back-verify">后台验证</span>
<span id="backend-verify-tips" class="kg-btn-verify layui-btn layui-btn-primary layui-btn-fluid layui-btn-disabled layui-hide"><i class="layui-icon layui-icon-ok"></i>后台验证成功</span> <span id="back-verify-tips" class="kg-btn-verify layui-btn layui-btn-primary layui-btn-fluid layui-btn-disabled layui-hide"><i class="layui-icon layui-icon-ok"></i>后台验证成功</span>
<input type="hidden" name="ticket"> <input type="hidden" name="ticket">
<input type="hidden" name="rand"> <input type="hidden" name="rand">
</div> </div>
@ -65,25 +65,29 @@
var layer = layui.layer; var layer = layui.layer;
var captcha = new TencentCaptcha( var captcha = new TencentCaptcha(
$('#captcha-btn')[0], $('#front-verify-btn')[0],
$('input[name=app_id]').val(), $('#front-verify-btn').attr('app-id'),
function (res) { function (res) {
if (res.ret === 0) {
$('input[name=ticket]').val(res.ticket); $('input[name=ticket]').val(res.ticket);
$('input[name=rand]').val(res.randstr); $('input[name=rand]').val(res.randstr);
$('#captcha-btn').remove(); $('#front-verify-btn').remove();
$('#verify-submit-btn').removeAttr('disabled'); $('#back-verify-btn').removeAttr('disabled');
$('#frontend-verify-tips').removeClass('layui-hide'); $('#front-verify-tips').removeClass('layui-hide');
}
} }
); );
form.on('submit(backend-verify)', function (data) { form.on('submit(back-verify)', function (data) {
$.ajax({ $.ajax({
type: 'POST', type: 'POST',
url: data.form.action, url: data.form.action,
data: data.field, data: data.field,
success: function (res) { success: function (res) {
$('#verify-submit-btn').remove(); if (res.code === 0) {
$('#backend-verify-tips').removeClass('layui-hide'); $('#back-verify-btn').remove();
$('#back-verify-tips').removeClass('layui-hide');
}
layer.msg(res.msg, {icon: 1}); layer.msg(res.msg, {icon: 1});
}, },
error: function (xhr) { error: function (xhr) {

View File

@ -0,0 +1,18 @@
<div class="layui-tab layui-tab-brief">
<ul class="layui-tab-title kg-tab-title">
<li class="layui-this">QQ登录</li>
<li>微博登录</li>
<li>微信登录</li>
</ul>
<div class="layui-tab-content">
<div class="layui-tab-item layui-show">
{{ partial('setting/oauth_qq') }}
</div>
<div class="layui-tab-item">
{{ partial('setting/oauth_weibo') }}
</div>
<div class="layui-tab-item">
{{ partial('setting/oauth_weixin') }}
</div>
</div>
</div>

View File

@ -0,0 +1,67 @@
<form class="layui-form kg-form" method="POST" action="{{ url({'for':'admin.setting.oauth'}) }}">
<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 qq.enabled == "1" %}checked{% endif %}>
<input type="radio" name="enabled" value="0" title="否" {% if qq.enabled == "0" %}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="{{ qq.app_id }}" lay-verify="required">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">App Key</label>
<div class="layui-input-block">
<input class="layui-input" type="text" name="app_secret" value="{{ qq.app_secret }}" lay-verify="required">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">Redirect Uri</label>
<div class="layui-input-block">
<input class="layui-input" type="text" name="redirect_uri" value="{{ qq.redirect_uri }}" 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.qq">
</div>
</div>
</form>
<form class="layui-form kg-form">
<fieldset class="layui-elem-field layui-field-title">
<legend>登录测试</legend>
</fieldset>
<div class="layui-form-item">
<label class="layui-form-label"></label>
<div class="layui-input-inline">
<span id="qq-login-btn" class="layui-btn layui-btn-primary layui-btn-fluid">QQ登录</span>
</div>
</div>
</form>
<script>
layui.use(['jquery', 'layer'], function () {
var $ = layui.jquery;
var layer = layui.layer;
});
</script>

View File

@ -0,0 +1,67 @@
<form class="layui-form kg-form" method="POST" action="{{ url({'for':'admin.setting.oauth'}) }}">
<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 weibo.enabled == "1" %}checked{% endif %}>
<input type="radio" name="enabled" value="0" title="否" {% if weibo.enabled == "0" %}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="{{ weibo.app_id }}" lay-verify="required">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">App Key</label>
<div class="layui-input-block">
<input class="layui-input" type="text" name="app_secret" value="{{ weibo.app_secret }}" lay-verify="required">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">Redirect Uri</label>
<div class="layui-input-block">
<input class="layui-input" type="text" name="redirect_uri" value="{{ weibo.redirect_uri }}" 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.weibo">
</div>
</div>
</form>
<form class="layui-form kg-form">
<fieldset class="layui-elem-field layui-field-title">
<legend>登录测试</legend>
</fieldset>
<div class="layui-form-item">
<label class="layui-form-label"></label>
<div class="layui-input-inline">
<span id="qq-login-btn" class="layui-btn layui-btn-primary layui-btn-fluid">微博登录</span>
</div>
</div>
</form>
<script>
layui.use(['jquery', 'layer'], function () {
var $ = layui.jquery;
var layer = layui.layer;
});
</script>

View File

@ -0,0 +1,67 @@
<form class="layui-form kg-form" method="POST" action="{{ url({'for':'admin.setting.oauth'}) }}">
<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 weixin.enabled == "1" %}checked{% endif %}>
<input type="radio" name="enabled" value="0" title="否" {% if weixin.enabled == "0" %}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="{{ weixin.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="{{ weixin.app_secret }}" lay-verify="required">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">Redirect Uri</label>
<div class="layui-input-block">
<input class="layui-input" type="text" name="redirect_uri" value="{{ weixin.redirect_uri }}" 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>
<form class="layui-form kg-form">
<fieldset class="layui-elem-field layui-field-title">
<legend>登录测试</legend>
</fieldset>
<div class="layui-form-item">
<label class="layui-form-label"></label>
<div class="layui-input-inline">
<span id="qq-login-btn" class="layui-btn layui-btn-primary layui-btn-fluid">微信登录</span>
</div>
</div>
</form>
<script>
layui.use(['jquery', 'layer'], function () {
var $ = layui.jquery;
var layer = layui.layer;
});
</script>

View File

@ -5,10 +5,10 @@
</ul> </ul>
<div class="layui-tab-content"> <div class="layui-tab-content">
<div class="layui-tab-item layui-show"> <div class="layui-tab-item layui-show">
{{ partial('setting/payment_alipay') }} {{ partial('setting/pay_alipay') }}
</div> </div>
<div class="layui-tab-item"> <div class="layui-tab-item">
{{ partial('setting/payment_wxpay') }} {{ partial('setting/pay_wxpay') }}
</div> </div>
</div> </div>
</div> </div>

View File

@ -1,4 +1,4 @@
<form class="layui-form kg-form" method="POST" action="{{ url({'for':'admin.setting.payment'}) }}"> <form class="layui-form kg-form" method="POST" action="{{ url({'for':'admin.setting.pay'}) }}">
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">开启支付</label> <label class="layui-form-label">开启支付</label>
@ -25,16 +25,14 @@
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">Private Key</label> <label class="layui-form-label">Private Key</label>
<div class="layui-input-block"> <div class="layui-input-block">
<textarea class="layui-textarea" name="private_key" <textarea class="layui-textarea" name="private_key" lay-verify="required">{{ alipay.private_key }}</textarea>
lay-verify="required">{{ alipay.private_key }}</textarea>
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">Notify Url</label> <label class="layui-form-label">Notify Url</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input class="layui-input" type="text" name="notify_url" value="{{ alipay.notify_url }}" <input class="layui-input" type="text" name="notify_url" value="{{ alipay.notify_url }}" lay-verify="required">
lay-verify="required">
</div> </div>
</div> </div>
@ -43,7 +41,7 @@
<div class="layui-input-block"> <div class="layui-input-block">
<button class="layui-btn" lay-submit="true" lay-filter="go">提交</button> <button class="layui-btn" lay-submit="true" lay-filter="go">提交</button>
<button type="button" class="kg-back layui-btn layui-btn-primary">返回</button> <button type="button" class="kg-back layui-btn layui-btn-primary">返回</button>
<input type="hidden" name="section" value="payment.alipay"> <input type="hidden" name="section" value="pay.alipay">
</div> </div>
</div> </div>

View File

@ -1,4 +1,4 @@
<form class="layui-form kg-form" method="POST" action="{{ url({'for':'admin.setting.payment'}) }}"> <form class="layui-form kg-form" method="POST" action="{{ url({'for':'admin.setting.pay'}) }}">
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">开启支付</label> <label class="layui-form-label">开启支付</label>
@ -41,7 +41,7 @@
<div class="layui-input-block"> <div class="layui-input-block">
<button class="layui-btn" lay-submit="true" lay-filter="go">提交</button> <button class="layui-btn" lay-submit="true" lay-filter="go">提交</button>
<button type="button" class="kg-back layui-btn layui-btn-primary">返回</button> <button type="button" class="kg-back layui-btn layui-btn-primary">返回</button>
<input type="hidden" name="section" value="payment.wxpay"> <input type="hidden" name="section" value="pay.wxpay">
</div> </div>
</div> </div>

View File

@ -0,0 +1,63 @@
<?php
namespace App\Http\Web\Controllers;
use App\Traits\Response as ResponseTrait;
/**
* @RoutePrefix("/oauth")
*/
class OAuthController extends \Phalcon\Mvc\Controller
{
use ResponseTrait;
/**
* @Get("/qq/connect", name="web.oauth.qq.connect")
*/
public function qqConnectAction()
{
}
/**
* @Get("/qq/callback", name="web.oauth.qq.callback")
*/
public function qqCallbackAction()
{
}
/**
* @Get("/weibo/connect", name="web.oauth.weibo.connect")
*/
public function weiboConnectAction()
{
}
/**
* @Get("/weibo/callback", name="web.oauth.weibo.callback")
*/
public function weiboCallbackAction()
{
}
/**
* @Get("/weixin/connect", name="web.oauth.weixin.connect")
*/
public function weixinConnectAction()
{
}
/**
* @Get("/weixin/callback", name="web.oauth.weixin.callback")
*/
public function weixinCallbackAction()
{
}
}

View File

@ -2,17 +2,20 @@
namespace App\Http\Web\Controllers; namespace App\Http\Web\Controllers;
use App\Services\Payment\Alipay as AlipayService; use App\Services\Pay\Alipay as AlipayService;
use App\Services\Payment\Wxpay as WxpayService; use App\Services\Pay\Wxpay as WxpayService;
use App\Traits\Response as ResponseTrait; use App\Traits\Response as ResponseTrait;
class PaymentController extends \Phalcon\Mvc\Controller /**
* @RoutePrefix("/pay")
*/
class PayController extends \Phalcon\Mvc\Controller
{ {
use ResponseTrait; use ResponseTrait;
/** /**
* @Post("/alipay/notify", name="web.alipay.notify") * @Post("/alipay/notify", name="web.pay.alipay.notify")
*/ */
public function alipayNotifyAction() public function alipayNotifyAction()
{ {
@ -28,7 +31,7 @@ class PaymentController extends \Phalcon\Mvc\Controller
} }
/** /**
* @Post("/wxpay/notify", name="web.wxpay.notify") * @Post("/wxpay/notify", name="web.pay.wxpay.notify")
*/ */
public function wxpayNotifyAction() public function wxpayNotifyAction()
{ {
@ -44,7 +47,7 @@ class PaymentController extends \Phalcon\Mvc\Controller
} }
/** /**
* @Post("/alipay/status", name="web.alipay.status") * @Post("/alipay/status", name="web.pay.alipay.status")
*/ */
public function alipayStatusAction() public function alipayStatusAction()
{ {
@ -58,7 +61,7 @@ class PaymentController extends \Phalcon\Mvc\Controller
} }
/** /**
* @Post("/wxpay/status", name="web.wxpay.status") * @Post("/wxpay/status", name="web.pay.wxpay.status")
*/ */
public function wxpayStatusAction() public function wxpayStatusAction()
{ {

View File

@ -9,15 +9,15 @@ abstract class OAuth
protected $appId; protected $appId;
protected $appSecret; protected $appSecret;
protected $appCallback; protected $redirectUri;
protected $accessToken; protected $accessToken;
protected $openId; protected $openId;
public function __construct($appId, $appSecret, $appCallback) public function __construct($appId, $appSecret, $redirectUri)
{ {
$this->appId = $appId; $this->appId = $appId;
$this->appSecret = $appSecret; $this->appSecret = $appSecret;
$this->appCallback = $appCallback; $this->redirectUri = $redirectUri;
} }
public function httpGet($uri, $params = [], $headers = []) public function httpGet($uri, $params = [], $headers = [])

View File

@ -16,7 +16,7 @@ class QQ extends OAuth
{ {
$params = [ $params = [
'client_id' => $this->appId, 'client_id' => $this->appId,
'redirect_uri' => $this->appCallback, 'redirect_uri' => $this->redirectUri,
'response_type' => 'code', 'response_type' => 'code',
'scope' => '', 'scope' => '',
]; ];
@ -30,7 +30,7 @@ class QQ extends OAuth
'code' => $code, 'code' => $code,
'client_id' => $this->appId, 'client_id' => $this->appId,
'client_secret' => $this->appSecret, 'client_secret' => $this->appSecret,
'redirect_uri' => $this->appCallback, 'redirect_uri' => $this->redirectUri,
'grant_type' => 'authorization_code', 'grant_type' => 'authorization_code',
'state' => 'ok', 'state' => 'ok',
]; ];

View File

@ -15,7 +15,7 @@ class WeiBo extends OAuth
{ {
$params = [ $params = [
'client_id' => $this->appId, 'client_id' => $this->appId,
'redirect_uri' => $this->appCallback, 'redirect_uri' => $this->redirectUri,
'response_type' => 'code', 'response_type' => 'code',
]; ];
@ -28,7 +28,7 @@ class WeiBo extends OAuth
'code' => $code, 'code' => $code,
'client_id' => $this->appId, 'client_id' => $this->appId,
'client_secret' => $this->appSecret, 'client_secret' => $this->appSecret,
'redirect_uri' => $this->appCallback, 'redirect_uri' => $this->redirectUri,
'grant_type' => 'authorization_code', 'grant_type' => 'authorization_code',
]; ];

View File

@ -15,7 +15,7 @@ class WeiXin extends OAuth
{ {
$params = [ $params = [
'appid' => $this->appId, 'appid' => $this->appId,
'redirect_uri' => $this->appCallback, 'redirect_uri' => $this->redirectUri,
'response_type' => 'code', 'response_type' => 'code',
'scope' => 'snsapi_login', 'scope' => 'snsapi_login',
'state' => 'dev', 'state' => 'dev',

View File

@ -8,7 +8,7 @@ use App\Models\Trade as TradeModel;
use App\Repos\Order as OrderRepo; use App\Repos\Order as OrderRepo;
use Phalcon\Events\Event; use Phalcon\Events\Event;
class Payment extends Listener class Pay extends Listener
{ {
protected $logger; protected $logger;

View File

@ -111,10 +111,10 @@ class ChapterInfo extends Service
'summary' => $chapter->summary, 'summary' => $chapter->summary,
'course' => $course, 'course' => $course,
'play_urls' => $playUrls, 'play_urls' => $playUrls,
'user_count' => $chapter->user_count,
'agree_count' => $chapter->agree_count, 'agree_count' => $chapter->agree_count,
'oppose_count' => $chapter->oppose_count, 'oppose_count' => $chapter->oppose_count,
'comment_count' => $chapter->comment_count, 'comment_count' => $chapter->comment_count,
'user_count' => $chapter->user_count,
]; ];
} }
@ -146,10 +146,10 @@ class ChapterInfo extends Service
'play_urls' => $playUrls, 'play_urls' => $playUrls,
'start_time' => $live->start_time, 'start_time' => $live->start_time,
'end_time' => $live->end_time, 'end_time' => $live->end_time,
'user_count' => $chapter->user_count,
'agree_count' => $chapter->agree_count, 'agree_count' => $chapter->agree_count,
'oppose_count' => $chapter->oppose_count, 'oppose_count' => $chapter->oppose_count,
'comment_count' => $chapter->comment_count, 'comment_count' => $chapter->comment_count,
'user_count' => $chapter->user_count,
]; ];
} }
@ -167,10 +167,10 @@ class ChapterInfo extends Service
'summary' => $chapter->summary, 'summary' => $chapter->summary,
'course' => $course, 'course' => $course,
'content' => $read->content, 'content' => $read->content,
'user_count' => $chapter->user_count,
'agree_count' => $chapter->agree_count, 'agree_count' => $chapter->agree_count,
'oppose_count' => $chapter->oppose_count, 'oppose_count' => $chapter->oppose_count,
'comment_count' => $chapter->comment_count, 'comment_count' => $chapter->comment_count,
'user_count' => $chapter->user_count,
]; ];
} }

View File

@ -0,0 +1,41 @@
<?php
namespace App\Services\Frontend\My;
use App\Models\User as UserModel;
use App\Services\Frontend\Service;
class UserInfo extends Service
{
public function getUser()
{
$user = $this->getLoginUser();
return $this->handleUser($user);
}
protected function handleUser(UserModel $user)
{
$user->avatar = kg_ci_img_url($user->avatar);
return [
'id' => $user->id,
'name' => $user->name,
'avatar' => $user->avatar,
'title' => $user->title,
'about' => $user->about,
'location' => $user->location,
'gender' => $user->gender,
'vip' => $user->vip,
'locked' => $user->locked,
'vip_expiry_time' => $user->vip_expiry_time,
'lock_expiry_time' => $user->lock_expiry_time,
'edu_role' => $user->edu_role,
'admin_role' => $user->admin_role,
'notice_count' => $user->notice_count,
'msg_count' => $user->msg_count,
];
}
}

View File

@ -5,8 +5,8 @@ namespace App\Services\Frontend\Order;
use App\Models\Trade as TradeModel; use App\Models\Trade as TradeModel;
use App\Services\Frontend\OrderTrait; use App\Services\Frontend\OrderTrait;
use App\Services\Frontend\Service; use App\Services\Frontend\Service;
use App\Services\Payment\Alipay as AlipayService; use App\Services\Pay\Alipay as AlipayService;
use App\Services\Payment\Wxpay as WxPayService; use App\Services\Pay\Wxpay as WxPayService;
use App\Validators\Trade as TradeValidator; use App\Validators\Trade as TradeValidator;
class OrderTrade extends Service class OrderTrade extends Service

View File

@ -18,15 +18,9 @@ class TeacherInfo extends Service
return $this->handleUser($user); return $this->handleUser($user);
} }
/** protected function handleUser(UserModel $user)
* @param UserModel $user
* @return array
*/
protected function handleUser($user)
{ {
$user->avatar = kg_ci_img_url($user->avatar); $user->avatar = kg_ci_img_url($user->avatar);
$user->vip = $user->vip == 1;
$user->locked = $user->locked == 1;
return [ return [
'id' => $user->id, 'id' => $user->id,
@ -38,12 +32,6 @@ class TeacherInfo extends Service
'gender' => $user->gender, 'gender' => $user->gender,
'vip' => $user->vip, 'vip' => $user->vip,
'locked' => $user->locked, 'locked' => $user->locked,
'vip_expiry_time' => $user->vip_expiry_time,
'lock_expiry_time' => $user->lock_expiry_time,
'edu_role' => $user->edu_role,
'admin_role' => $user->admin_role,
'notice_count' => $user->notice_count,
'msg_count' => $user->msg_count,
]; ];
} }

View File

@ -18,15 +18,9 @@ class UserInfo extends Service
return $this->handleUser($user); return $this->handleUser($user);
} }
/** protected function handleUser(UserModel $user)
* @param UserModel $user
* @return array
*/
protected function handleUser($user)
{ {
$user->avatar = kg_ci_img_url($user->avatar); $user->avatar = kg_ci_img_url($user->avatar);
$user->vip = $user->vip == 1;
$user->locked = $user->locked == 1;
return [ return [
'id' => $user->id, 'id' => $user->id,
@ -38,12 +32,6 @@ class UserInfo extends Service
'gender' => $user->gender, 'gender' => $user->gender,
'vip' => $user->vip, 'vip' => $user->vip,
'locked' => $user->locked, 'locked' => $user->locked,
'vip_expiry_time' => $user->vip_expiry_time,
'lock_expiry_time' => $user->lock_expiry_time,
'edu_role' => $user->edu_role,
'admin_role' => $user->admin_role,
'notice_count' => $user->notice_count,
'msg_count' => $user->msg_count,
]; ];
} }

View File

@ -6,7 +6,7 @@ use App\Models\Refund as RefundModel;
use App\Models\Trade as TradeModel; use App\Models\Trade as TradeModel;
use App\Repos\Trade as TradeRepo; use App\Repos\Trade as TradeRepo;
abstract class Payment extends Service abstract class Pay extends Service
{ {
/** /**

View File

@ -1,16 +1,16 @@
<?php <?php
namespace App\Services\Payment; namespace App\Services\Pay;
use App\Models\Refund as RefundModel; use App\Models\Refund as RefundModel;
use App\Models\Trade as TradeModel; use App\Models\Trade as TradeModel;
use App\Repos\Trade as TradeRepo; use App\Repos\Trade as TradeRepo;
use App\Services\Payment; use App\Services\Pay as AppPay;
use Yansongda\Pay\Log; use Yansongda\Pay\Log;
use Yansongda\Pay\Pay; use Yansongda\Pay\Pay;
use Yansongda\Supports\Collection; use Yansongda\Supports\Collection;
class Alipay extends Payment class Alipay extends AppPay
{ {
/** /**
@ -25,8 +25,7 @@ class Alipay extends Payment
public function __construct() public function __construct()
{ {
$this->settings = $this->getSectionSettings('payment.alipay'); $this->settings = $this->getSectionSettings('pay.alipay');
$this->gateway = $this->getGateway(); $this->gateway = $this->getGateway();
} }
@ -108,7 +107,7 @@ class Alipay extends Payment
$trade->channel_sn = $data->trade_no; $trade->channel_sn = $data->trade_no;
$this->eventsManager->fire('payment:afterPay', $this, $trade); $this->eventsManager->fire('pay:afterPay', $this, $trade);
return $this->gateway->success(); return $this->gateway->success();
} }

View File

@ -1,17 +1,17 @@
<?php <?php
namespace App\Services\Payment; namespace App\Services\Pay;
use App\Models\Refund as RefundModel; use App\Models\Refund as RefundModel;
use App\Models\Trade as TradeModel; use App\Models\Trade as TradeModel;
use App\Repos\Trade as TradeRepo; use App\Repos\Trade as TradeRepo;
use App\Services\Payment; use App\Services\Pay as AppPay;
use Yansongda\Pay\Gateways\Wechat; use Yansongda\Pay\Gateways\Wechat;
use Yansongda\Pay\Log; use Yansongda\Pay\Log;
use Yansongda\Pay\Pay; use Yansongda\Pay\Pay;
use Yansongda\Supports\Collection; use Yansongda\Supports\Collection;
class Wxpay extends Payment class Wxpay extends AppPay
{ {
/** /**
@ -26,8 +26,7 @@ class Wxpay extends Payment
public function __construct() public function __construct()
{ {
$this->settings = $this->getSectionSettings('payment.wxpay'); $this->settings = $this->getSectionSettings('pay.wxpay');
$this->gateway = $this->getGateway(); $this->gateway = $this->getGateway();
} }
@ -107,7 +106,7 @@ class Wxpay extends Payment
$trade->channel_sn = $data->transaction_id; $trade->channel_sn = $data->transaction_id;
$this->eventsManager->fire('payment:afterPay', $this, $trade); $this->eventsManager->fire('pay:afterPay', $this, $trade);
return $this->gateway->success(); return $this->gateway->success();
} }

View File

@ -1,11 +1,11 @@
<?php <?php
use App\Listeners\Payment; use App\Listeners\Pay;
use App\Listeners\Profiler; use App\Listeners\Profiler;
use App\Listeners\UserDailyCounter; use App\Listeners\UserDailyCounter;
return [ return [
'db' => Profiler::class, 'db' => Profiler::class,
'payment' => Payment::class, 'pay' => Pay::class,
'userDailyCounter' => UserDailyCounter::class, 'userDailyCounter' => UserDailyCounter::class,
]; ];

View File

@ -1,3 +1,7 @@
.layui-badge, .layui-badge-rim, .layui-badge-dot {
padding-bottom: 1px;
}
.kg-body { .kg-body {
padding: 15px; padding: 15px;
} }

View File

@ -0,0 +1,3 @@
.layui-badge, .layui-badge-rim, .layui-badge-dot {
padding-bottom: 1px;
}