mirror of
https://gitee.com/koogua/course-tencent-cloud.git
synced 2025-07-23 16:36:38 +08:00
1.修复验证码
2.增加第三方登录
This commit is contained in:
parent
cf5e50f402
commit
3c906cb6c7
@ -33,8 +33,10 @@ class CleanAuthTokenTask extends Task
|
||||
*/
|
||||
protected function findAccessTokens()
|
||||
{
|
||||
$expiryTime = strtotime('-30 days');
|
||||
|
||||
return AccessTokenModel::query()
|
||||
->where('expiry_time < :expiry_time:', ['expiry_time' => time()])
|
||||
->where('expiry_time < :expiry_time:', ['expiry_time' => $expiryTime])
|
||||
->execute();
|
||||
}
|
||||
|
||||
@ -45,8 +47,10 @@ class CleanAuthTokenTask extends Task
|
||||
*/
|
||||
protected function findRefreshTokens()
|
||||
{
|
||||
$expiryTime = strtotime('-30 days');
|
||||
|
||||
return RefreshTokenModel::query()
|
||||
->where('expiry_time < :expiry_time:', ['expiry_time' => time()])
|
||||
->where('expiry_time < :expiry_time:', ['expiry_time' => $expiryTime])
|
||||
->execute();
|
||||
}
|
||||
|
||||
|
@ -3,8 +3,8 @@
|
||||
namespace App\Console\Tasks;
|
||||
|
||||
use App\Models\Trade as TradeModel;
|
||||
use App\Services\Payment\Alipay as AlipayService;
|
||||
use App\Services\Payment\Wxpay as WxpayService;
|
||||
use App\Services\Pay\Alipay as AlipayService;
|
||||
use App\Services\Pay\Wxpay as WxpayService;
|
||||
use Phalcon\Cli\Task;
|
||||
use Phalcon\Mvc\Model\Resultset;
|
||||
use Phalcon\Mvc\Model\ResultsetInterface;
|
||||
|
@ -11,8 +11,8 @@ use App\Repos\Order as OrderRepo;
|
||||
use App\Repos\Refund as RefundRepo;
|
||||
use App\Repos\Trade as TradeRepo;
|
||||
use App\Repos\User as UserRepo;
|
||||
use App\Services\Payment\Alipay as AlipayService;
|
||||
use App\Services\Payment\Wxpay as WxpayService;
|
||||
use App\Services\Pay\Alipay as AlipayService;
|
||||
use App\Services\Pay\Wxpay as WxpayService;
|
||||
use App\Services\Smser\Refund as RefundSmser;
|
||||
use Phalcon\Mvc\Model\Resultset;
|
||||
use Phalcon\Mvc\Model\ResultsetInterface;
|
||||
@ -140,7 +140,7 @@ class RefundTask extends Task
|
||||
}
|
||||
|
||||
if (!$response) {
|
||||
throw new \RuntimeException('Payment Refund Failed');
|
||||
throw new \RuntimeException('Pay Refund Failed');
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -39,7 +39,6 @@ class SessionController extends \Phalcon\Mvc\Controller
|
||||
$captcha = $settingService->getSectionSettings('captcha');
|
||||
|
||||
$this->view->pick('public/login');
|
||||
|
||||
$this->view->setVar('captcha', $captcha);
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
|
||||
@ -157,14 +157,43 @@ class SettingController extends Controller
|
||||
|
||||
} else {
|
||||
|
||||
$alipay = $settingService->getSectionSettings('payment.alipay');
|
||||
$wxpay = $settingService->getSectionSettings('payment.wxpay');
|
||||
$alipay = $settingService->getSectionSettings('pay.alipay');
|
||||
$wxpay = $settingService->getSectionSettings('pay.wxpay');
|
||||
|
||||
$this->view->setVar('alipay', $alipay);
|
||||
$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")
|
||||
*/
|
||||
|
@ -72,7 +72,6 @@ class TestController extends Controller
|
||||
$obs->stream_code = substr($pushUrl, $position + 1);
|
||||
|
||||
$this->view->pick('setting/live_push_test');
|
||||
|
||||
$this->view->setVar('code_url', $codeUrl);
|
||||
$this->view->setVar('obs', $obs);
|
||||
}
|
||||
@ -90,7 +89,6 @@ class TestController extends Controller
|
||||
$this->view->setRenderLevel(View::LEVEL_ACTION_VIEW);
|
||||
|
||||
$this->view->pick('public/live_player');
|
||||
|
||||
$this->view->setVar('m3u8_pull_urls', $m3u8PullUrls);
|
||||
$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('code_url', $codeUrl);
|
||||
}
|
||||
@ -236,8 +233,7 @@ class TestController extends Controller
|
||||
$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('code_url', $codeUrl);
|
||||
}
|
||||
|
@ -34,9 +34,7 @@ class VodController extends Controller
|
||||
$playUrl = $this->request->getQuery('play_url');
|
||||
|
||||
$this->view->setRenderLevel(View::LEVEL_ACTION_VIEW);
|
||||
|
||||
$this->view->pick('public/vod_player');
|
||||
|
||||
$this->view->setVar('chapter_id', $chapterId);
|
||||
$this->view->setVar('play_url', urldecode($playUrl));
|
||||
}
|
||||
|
@ -6,9 +6,9 @@ use App\Models\Order as OrderModel;
|
||||
use App\Models\Trade as TradeModel;
|
||||
use App\Repos\Order as OrderRepo;
|
||||
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;
|
||||
|
@ -679,10 +679,16 @@ class AuthNode extends Service
|
||||
'id' => '5-1-9',
|
||||
'label' => '支付设置',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.setting.payment',
|
||||
'route' => 'admin.setting.pay',
|
||||
],
|
||||
[
|
||||
'id' => '5-1-10',
|
||||
'label' => '登录设置',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.setting.oauth',
|
||||
],
|
||||
[
|
||||
'id' => '5-1-11',
|
||||
'label' => '会员设置',
|
||||
'type' => 'menu',
|
||||
'route' => 'admin.setting.vip',
|
||||
|
@ -6,7 +6,7 @@ use App\Models\Order as OrderModel;
|
||||
use App\Models\Trade as TradeModel;
|
||||
use App\Services\Auth\Admin as AdminAuth;
|
||||
|
||||
abstract class PaymentTest extends Service
|
||||
abstract class PayTest extends Service
|
||||
{
|
||||
|
||||
/**
|
@ -3,9 +3,9 @@
|
||||
namespace App\Http\Admin\Services;
|
||||
|
||||
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;
|
||||
|
@ -57,11 +57,13 @@
|
||||
$('#captcha-btn')[0],
|
||||
$('#captcha-btn').attr('app-id'),
|
||||
function (res) {
|
||||
$('input[name=ticket]').val(res.ticket);
|
||||
$('input[name=rand]').val(res.randstr);
|
||||
$('#captcha-btn').remove();
|
||||
$('#submit-btn').removeAttr('disabled');
|
||||
$('#verify-tips').removeClass('layui-hide');
|
||||
if (res.ret === 0) {
|
||||
$('input[name=ticket]').val(res.ticket);
|
||||
$('input[name=rand]').val(res.randstr);
|
||||
$('#captcha-btn').remove();
|
||||
$('#submit-btn').removeAttr('disabled');
|
||||
$('#verify-tips').removeClass('layui-hide');
|
||||
}
|
||||
}
|
||||
);
|
||||
});
|
||||
|
@ -37,16 +37,16 @@
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label"><i class="layui-icon layui-icon-vercode"></i></label>
|
||||
<div class="layui-input-inline" style="width:200px;">
|
||||
<span id="captcha-btn" class="layui-btn layui-btn-primary layui-btn-fluid">前台验证</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-btn" class="layui-btn layui-btn-primary layui-btn-fluid" app-id="{{ captcha.app_id }}">前台验证</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 class="layui-form-item">
|
||||
<label class="layui-form-label"><i class="layui-icon layui-icon-vercode"></i></label>
|
||||
<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="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-btn" class="layui-btn layui-btn-primary layui-btn-fluid" disabled="true" lay-submit="true" lay-filter="back-verify">后台验证</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="rand">
|
||||
</div>
|
||||
@ -65,25 +65,29 @@
|
||||
var layer = layui.layer;
|
||||
|
||||
var captcha = new TencentCaptcha(
|
||||
$('#captcha-btn')[0],
|
||||
$('input[name=app_id]').val(),
|
||||
$('#front-verify-btn')[0],
|
||||
$('#front-verify-btn').attr('app-id'),
|
||||
function (res) {
|
||||
$('input[name=ticket]').val(res.ticket);
|
||||
$('input[name=rand]').val(res.randstr);
|
||||
$('#captcha-btn').remove();
|
||||
$('#verify-submit-btn').removeAttr('disabled');
|
||||
$('#frontend-verify-tips').removeClass('layui-hide');
|
||||
if (res.ret === 0) {
|
||||
$('input[name=ticket]').val(res.ticket);
|
||||
$('input[name=rand]').val(res.randstr);
|
||||
$('#front-verify-btn').remove();
|
||||
$('#back-verify-btn').removeAttr('disabled');
|
||||
$('#front-verify-tips').removeClass('layui-hide');
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
form.on('submit(backend-verify)', function (data) {
|
||||
form.on('submit(back-verify)', function (data) {
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: data.form.action,
|
||||
data: data.field,
|
||||
success: function (res) {
|
||||
$('#verify-submit-btn').remove();
|
||||
$('#backend-verify-tips').removeClass('layui-hide');
|
||||
if (res.code === 0) {
|
||||
$('#back-verify-btn').remove();
|
||||
$('#back-verify-tips').removeClass('layui-hide');
|
||||
}
|
||||
layer.msg(res.msg, {icon: 1});
|
||||
},
|
||||
error: function (xhr) {
|
||||
|
18
app/Http/Admin/Views/setting/oauth.volt
Normal file
18
app/Http/Admin/Views/setting/oauth.volt
Normal 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>
|
67
app/Http/Admin/Views/setting/oauth_qq.volt
Normal file
67
app/Http/Admin/Views/setting/oauth_qq.volt
Normal 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>
|
67
app/Http/Admin/Views/setting/oauth_weibo.volt
Normal file
67
app/Http/Admin/Views/setting/oauth_weibo.volt
Normal 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>
|
67
app/Http/Admin/Views/setting/oauth_weixin.volt
Normal file
67
app/Http/Admin/Views/setting/oauth_weixin.volt
Normal 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>
|
@ -5,10 +5,10 @@
|
||||
</ul>
|
||||
<div class="layui-tab-content">
|
||||
<div class="layui-tab-item layui-show">
|
||||
{{ partial('setting/payment_alipay') }}
|
||||
{{ partial('setting/pay_alipay') }}
|
||||
</div>
|
||||
<div class="layui-tab-item">
|
||||
{{ partial('setting/payment_wxpay') }}
|
||||
{{ partial('setting/pay_wxpay') }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@ -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">
|
||||
<label class="layui-form-label">开启支付</label>
|
||||
@ -25,16 +25,14 @@
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">Private Key</label>
|
||||
<div class="layui-input-block">
|
||||
<textarea class="layui-textarea" name="private_key"
|
||||
lay-verify="required">{{ alipay.private_key }}</textarea>
|
||||
<textarea class="layui-textarea" name="private_key" lay-verify="required">{{ alipay.private_key }}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">Notify Url</label>
|
||||
<div class="layui-input-block">
|
||||
<input class="layui-input" type="text" name="notify_url" value="{{ alipay.notify_url }}"
|
||||
lay-verify="required">
|
||||
<input class="layui-input" type="text" name="notify_url" value="{{ alipay.notify_url }}" lay-verify="required">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -43,7 +41,7 @@
|
||||
<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="payment.alipay">
|
||||
<input type="hidden" name="section" value="pay.alipay">
|
||||
</div>
|
||||
</div>
|
||||
|
@ -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">
|
||||
<label class="layui-form-label">开启支付</label>
|
||||
@ -41,7 +41,7 @@
|
||||
<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="payment.wxpay">
|
||||
<input type="hidden" name="section" value="pay.wxpay">
|
||||
</div>
|
||||
</div>
|
||||
|
63
app/Http/Web/Controllers/OAuthController.php
Normal file
63
app/Http/Web/Controllers/OAuthController.php
Normal 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()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -2,17 +2,20 @@
|
||||
|
||||
namespace App\Http\Web\Controllers;
|
||||
|
||||
use App\Services\Payment\Alipay as AlipayService;
|
||||
use App\Services\Payment\Wxpay as WxpayService;
|
||||
use App\Services\Pay\Alipay as AlipayService;
|
||||
use App\Services\Pay\Wxpay as WxpayService;
|
||||
use App\Traits\Response as ResponseTrait;
|
||||
|
||||
class PaymentController extends \Phalcon\Mvc\Controller
|
||||
/**
|
||||
* @RoutePrefix("/pay")
|
||||
*/
|
||||
class PayController extends \Phalcon\Mvc\Controller
|
||||
{
|
||||
|
||||
use ResponseTrait;
|
||||
|
||||
/**
|
||||
* @Post("/alipay/notify", name="web.alipay.notify")
|
||||
* @Post("/alipay/notify", name="web.pay.alipay.notify")
|
||||
*/
|
||||
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()
|
||||
{
|
||||
@ -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()
|
||||
{
|
||||
@ -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()
|
||||
{
|
@ -9,15 +9,15 @@ abstract class OAuth
|
||||
|
||||
protected $appId;
|
||||
protected $appSecret;
|
||||
protected $appCallback;
|
||||
protected $redirectUri;
|
||||
protected $accessToken;
|
||||
protected $openId;
|
||||
|
||||
public function __construct($appId, $appSecret, $appCallback)
|
||||
public function __construct($appId, $appSecret, $redirectUri)
|
||||
{
|
||||
$this->appId = $appId;
|
||||
$this->appSecret = $appSecret;
|
||||
$this->appCallback = $appCallback;
|
||||
$this->redirectUri = $redirectUri;
|
||||
}
|
||||
|
||||
public function httpGet($uri, $params = [], $headers = [])
|
||||
|
@ -16,7 +16,7 @@ class QQ extends OAuth
|
||||
{
|
||||
$params = [
|
||||
'client_id' => $this->appId,
|
||||
'redirect_uri' => $this->appCallback,
|
||||
'redirect_uri' => $this->redirectUri,
|
||||
'response_type' => 'code',
|
||||
'scope' => '',
|
||||
];
|
||||
@ -30,7 +30,7 @@ class QQ extends OAuth
|
||||
'code' => $code,
|
||||
'client_id' => $this->appId,
|
||||
'client_secret' => $this->appSecret,
|
||||
'redirect_uri' => $this->appCallback,
|
||||
'redirect_uri' => $this->redirectUri,
|
||||
'grant_type' => 'authorization_code',
|
||||
'state' => 'ok',
|
||||
];
|
||||
|
@ -15,7 +15,7 @@ class WeiBo extends OAuth
|
||||
{
|
||||
$params = [
|
||||
'client_id' => $this->appId,
|
||||
'redirect_uri' => $this->appCallback,
|
||||
'redirect_uri' => $this->redirectUri,
|
||||
'response_type' => 'code',
|
||||
];
|
||||
|
||||
@ -28,7 +28,7 @@ class WeiBo extends OAuth
|
||||
'code' => $code,
|
||||
'client_id' => $this->appId,
|
||||
'client_secret' => $this->appSecret,
|
||||
'redirect_uri' => $this->appCallback,
|
||||
'redirect_uri' => $this->redirectUri,
|
||||
'grant_type' => 'authorization_code',
|
||||
];
|
||||
|
||||
|
@ -15,7 +15,7 @@ class WeiXin extends OAuth
|
||||
{
|
||||
$params = [
|
||||
'appid' => $this->appId,
|
||||
'redirect_uri' => $this->appCallback,
|
||||
'redirect_uri' => $this->redirectUri,
|
||||
'response_type' => 'code',
|
||||
'scope' => 'snsapi_login',
|
||||
'state' => 'dev',
|
||||
|
@ -8,7 +8,7 @@ use App\Models\Trade as TradeModel;
|
||||
use App\Repos\Order as OrderRepo;
|
||||
use Phalcon\Events\Event;
|
||||
|
||||
class Payment extends Listener
|
||||
class Pay extends Listener
|
||||
{
|
||||
|
||||
protected $logger;
|
@ -111,10 +111,10 @@ class ChapterInfo extends Service
|
||||
'summary' => $chapter->summary,
|
||||
'course' => $course,
|
||||
'play_urls' => $playUrls,
|
||||
'user_count' => $chapter->user_count,
|
||||
'agree_count' => $chapter->agree_count,
|
||||
'oppose_count' => $chapter->oppose_count,
|
||||
'comment_count' => $chapter->comment_count,
|
||||
'user_count' => $chapter->user_count,
|
||||
];
|
||||
}
|
||||
|
||||
@ -146,10 +146,10 @@ class ChapterInfo extends Service
|
||||
'play_urls' => $playUrls,
|
||||
'start_time' => $live->start_time,
|
||||
'end_time' => $live->end_time,
|
||||
'user_count' => $chapter->user_count,
|
||||
'agree_count' => $chapter->agree_count,
|
||||
'oppose_count' => $chapter->oppose_count,
|
||||
'comment_count' => $chapter->comment_count,
|
||||
'user_count' => $chapter->user_count,
|
||||
];
|
||||
}
|
||||
|
||||
@ -167,10 +167,10 @@ class ChapterInfo extends Service
|
||||
'summary' => $chapter->summary,
|
||||
'course' => $course,
|
||||
'content' => $read->content,
|
||||
'user_count' => $chapter->user_count,
|
||||
'agree_count' => $chapter->agree_count,
|
||||
'oppose_count' => $chapter->oppose_count,
|
||||
'comment_count' => $chapter->comment_count,
|
||||
'user_count' => $chapter->user_count,
|
||||
];
|
||||
}
|
||||
|
||||
|
41
app/Services/Frontend/My/UserInfo.php
Normal file
41
app/Services/Frontend/My/UserInfo.php
Normal 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,
|
||||
];
|
||||
}
|
||||
|
||||
}
|
@ -5,8 +5,8 @@ namespace App\Services\Frontend\Order;
|
||||
use App\Models\Trade as TradeModel;
|
||||
use App\Services\Frontend\OrderTrait;
|
||||
use App\Services\Frontend\Service;
|
||||
use App\Services\Payment\Alipay as AlipayService;
|
||||
use App\Services\Payment\Wxpay as WxPayService;
|
||||
use App\Services\Pay\Alipay as AlipayService;
|
||||
use App\Services\Pay\Wxpay as WxPayService;
|
||||
use App\Validators\Trade as TradeValidator;
|
||||
|
||||
class OrderTrade extends Service
|
||||
|
@ -18,15 +18,9 @@ class TeacherInfo extends Service
|
||||
return $this->handleUser($user);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param UserModel $user
|
||||
* @return array
|
||||
*/
|
||||
protected function handleUser($user)
|
||||
protected function handleUser(UserModel $user)
|
||||
{
|
||||
$user->avatar = kg_ci_img_url($user->avatar);
|
||||
$user->vip = $user->vip == 1;
|
||||
$user->locked = $user->locked == 1;
|
||||
|
||||
return [
|
||||
'id' => $user->id,
|
||||
@ -38,12 +32,6 @@ class TeacherInfo extends Service
|
||||
'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,
|
||||
];
|
||||
}
|
||||
|
||||
|
@ -18,15 +18,9 @@ class UserInfo extends Service
|
||||
return $this->handleUser($user);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param UserModel $user
|
||||
* @return array
|
||||
*/
|
||||
protected function handleUser($user)
|
||||
protected function handleUser(UserModel $user)
|
||||
{
|
||||
$user->avatar = kg_ci_img_url($user->avatar);
|
||||
$user->vip = $user->vip == 1;
|
||||
$user->locked = $user->locked == 1;
|
||||
|
||||
return [
|
||||
'id' => $user->id,
|
||||
@ -38,12 +32,6 @@ class UserInfo extends Service
|
||||
'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,
|
||||
];
|
||||
}
|
||||
|
||||
|
@ -6,7 +6,7 @@ use App\Models\Refund as RefundModel;
|
||||
use App\Models\Trade as TradeModel;
|
||||
use App\Repos\Trade as TradeRepo;
|
||||
|
||||
abstract class Payment extends Service
|
||||
abstract class Pay extends Service
|
||||
{
|
||||
|
||||
/**
|
@ -1,16 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Payment;
|
||||
namespace App\Services\Pay;
|
||||
|
||||
use App\Models\Refund as RefundModel;
|
||||
use App\Models\Trade as TradeModel;
|
||||
use App\Repos\Trade as TradeRepo;
|
||||
use App\Services\Payment;
|
||||
use App\Services\Pay as AppPay;
|
||||
use Yansongda\Pay\Log;
|
||||
use Yansongda\Pay\Pay;
|
||||
use Yansongda\Supports\Collection;
|
||||
|
||||
class Alipay extends Payment
|
||||
class Alipay extends AppPay
|
||||
{
|
||||
|
||||
/**
|
||||
@ -25,8 +25,7 @@ class Alipay extends Payment
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->settings = $this->getSectionSettings('payment.alipay');
|
||||
|
||||
$this->settings = $this->getSectionSettings('pay.alipay');
|
||||
$this->gateway = $this->getGateway();
|
||||
}
|
||||
|
||||
@ -108,7 +107,7 @@ class Alipay extends Payment
|
||||
|
||||
$trade->channel_sn = $data->trade_no;
|
||||
|
||||
$this->eventsManager->fire('payment:afterPay', $this, $trade);
|
||||
$this->eventsManager->fire('pay:afterPay', $this, $trade);
|
||||
|
||||
return $this->gateway->success();
|
||||
}
|
@ -1,17 +1,17 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Payment;
|
||||
namespace App\Services\Pay;
|
||||
|
||||
use App\Models\Refund as RefundModel;
|
||||
use App\Models\Trade as TradeModel;
|
||||
use App\Repos\Trade as TradeRepo;
|
||||
use App\Services\Payment;
|
||||
use App\Services\Pay as AppPay;
|
||||
use Yansongda\Pay\Gateways\Wechat;
|
||||
use Yansongda\Pay\Log;
|
||||
use Yansongda\Pay\Pay;
|
||||
use Yansongda\Supports\Collection;
|
||||
|
||||
class Wxpay extends Payment
|
||||
class Wxpay extends AppPay
|
||||
{
|
||||
|
||||
/**
|
||||
@ -26,8 +26,7 @@ class Wxpay extends Payment
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->settings = $this->getSectionSettings('payment.wxpay');
|
||||
|
||||
$this->settings = $this->getSectionSettings('pay.wxpay');
|
||||
$this->gateway = $this->getGateway();
|
||||
}
|
||||
|
||||
@ -107,7 +106,7 @@ class Wxpay extends Payment
|
||||
|
||||
$trade->channel_sn = $data->transaction_id;
|
||||
|
||||
$this->eventsManager->fire('payment:afterPay', $this, $trade);
|
||||
$this->eventsManager->fire('pay:afterPay', $this, $trade);
|
||||
|
||||
return $this->gateway->success();
|
||||
}
|
@ -1,11 +1,11 @@
|
||||
<?php
|
||||
|
||||
use App\Listeners\Payment;
|
||||
use App\Listeners\Pay;
|
||||
use App\Listeners\Profiler;
|
||||
use App\Listeners\UserDailyCounter;
|
||||
|
||||
return [
|
||||
'db' => Profiler::class,
|
||||
'payment' => Payment::class,
|
||||
'pay' => Pay::class,
|
||||
'userDailyCounter' => UserDailyCounter::class,
|
||||
];
|
@ -1,3 +1,7 @@
|
||||
.layui-badge, .layui-badge-rim, .layui-badge-dot {
|
||||
padding-bottom: 1px;
|
||||
}
|
||||
|
||||
.kg-body {
|
||||
padding: 15px;
|
||||
}
|
||||
|
@ -0,0 +1,3 @@
|
||||
.layui-badge, .layui-badge-rim, .layui-badge-dot {
|
||||
padding-bottom: 1px;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user