mirror of
https://gitee.com/koogua/course-tencent-cloud.git
synced 2025-07-04 16:01:35 +08:00
整理代码
This commit is contained in:
parent
1280283818
commit
30a2b6aee5
@ -34,7 +34,7 @@ class CloseTradeTask extends Task
|
|||||||
*
|
*
|
||||||
* @param TradeModel $trade
|
* @param TradeModel $trade
|
||||||
*/
|
*/
|
||||||
protected function handleAlipayTrade($trade)
|
protected function handleAlipayTrade(TradeModel $trade)
|
||||||
{
|
{
|
||||||
$allowClosed = true;
|
$allowClosed = true;
|
||||||
|
|
||||||
@ -66,7 +66,7 @@ class CloseTradeTask extends Task
|
|||||||
*
|
*
|
||||||
* @param TradeModel $trade
|
* @param TradeModel $trade
|
||||||
*/
|
*/
|
||||||
protected function handleWxpayTrade($trade)
|
protected function handleWxpayTrade(TradeModel $trade)
|
||||||
{
|
{
|
||||||
$allowClosed = true;
|
$allowClosed = true;
|
||||||
|
|
||||||
|
@ -46,25 +46,43 @@ class SyncChapterCounterTask extends Task
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$counterCache = new ChapterCounterCache();
|
||||||
|
|
||||||
$chapterCache = new ChapterCache();
|
$chapterCache = new ChapterCache();
|
||||||
|
|
||||||
$chapterCounterCache = new ChapterCounterCache();
|
$hour = date('H');
|
||||||
|
|
||||||
foreach ($chapters as $chapter) {
|
foreach ($chapters as $chapter) {
|
||||||
|
|
||||||
$counter = $chapterCounterCache->get($chapter->id);
|
if ($hour % 3 == 0) {
|
||||||
|
|
||||||
if ($counter) {
|
$chapter->user_count = $chapterRepo->countUsers($chapter->id);
|
||||||
|
$chapter->lesson_count = $chapterRepo->countLessons($chapter->id);
|
||||||
$chapter->user_count = $counter['user_count'];
|
$chapter->comment_count = $chapterRepo->countComments($chapter->id);
|
||||||
$chapter->lesson_count = $counter['lesson_count'];
|
$chapter->agree_count = $chapterRepo->countAgrees($chapter->id);
|
||||||
$chapter->comment_count = $counter['comment_count'];
|
$chapter->oppose_count = $chapterRepo->countOpposes($chapter->id);
|
||||||
$chapter->agree_count = $counter['agree_count'];
|
|
||||||
$chapter->oppose_count = $counter['oppose_count'];
|
|
||||||
|
|
||||||
$chapter->update();
|
$chapter->update();
|
||||||
|
|
||||||
|
$counterCache->rebuild($chapter->id);
|
||||||
$chapterCache->rebuild($chapter->id);
|
$chapterCache->rebuild($chapter->id);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$counter = $counterCache->get($chapter->id);
|
||||||
|
|
||||||
|
if ($counter) {
|
||||||
|
|
||||||
|
$chapter->user_count = $counter['user_count'];
|
||||||
|
$chapter->lesson_count = $counter['lesson_count'];
|
||||||
|
$chapter->comment_count = $counter['comment_count'];
|
||||||
|
$chapter->agree_count = $counter['agree_count'];
|
||||||
|
$chapter->oppose_count = $counter['oppose_count'];
|
||||||
|
|
||||||
|
$chapter->update();
|
||||||
|
|
||||||
|
$chapterCache->rebuild($chapter->id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,19 +45,34 @@ class SyncCommentCounterTask extends Task
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$cache = new CommentCounterCache();
|
$counterCache = new CommentCounterCache();
|
||||||
|
|
||||||
|
$hour = date('H');
|
||||||
|
|
||||||
foreach ($comments as $comment) {
|
foreach ($comments as $comment) {
|
||||||
|
|
||||||
$counter = $cache->get($comment->id);
|
if ($hour % 3 == 0) {
|
||||||
|
|
||||||
if ($counter) {
|
$comment->reply_count = $commentRepo->countReplies($comment->id);
|
||||||
|
$comment->agree_count = $commentRepo->countAgrees($comment->id);
|
||||||
$comment->reply_count = $counter['reply_count'];
|
$comment->oppose_count = $commentRepo->countOpposes($comment->id);
|
||||||
$comment->agree_count = $counter['agree_count'];
|
|
||||||
$comment->oppose_count = $counter['oppose_count'];
|
|
||||||
|
|
||||||
$comment->update();
|
$comment->update();
|
||||||
|
|
||||||
|
$counterCache->rebuild($comment->id);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$counter = $counterCache->get($comment->id);
|
||||||
|
|
||||||
|
if ($counter) {
|
||||||
|
|
||||||
|
$comment->reply_count = $counter['reply_count'];
|
||||||
|
$comment->agree_count = $counter['agree_count'];
|
||||||
|
$comment->oppose_count = $counter['oppose_count'];
|
||||||
|
|
||||||
|
$comment->update();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,18 +45,32 @@ class SyncConsultCounterTask extends Task
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$cache = new ConsultCounterCache();
|
$counterCache = new ConsultCounterCache();
|
||||||
|
|
||||||
|
$hour = date('H');
|
||||||
|
|
||||||
foreach ($consults as $consult) {
|
foreach ($consults as $consult) {
|
||||||
|
|
||||||
$counter = $cache->get($consult->id);
|
if ($hour % 3 == 0) {
|
||||||
|
|
||||||
if ($counter) {
|
$consult->agree_count = $consultRepo->countAgrees($consult->id);
|
||||||
|
$consult->oppose_count = $consultRepo->countOpposes($consult->id);
|
||||||
$consult->agree_count = $counter['agree_count'];
|
|
||||||
$consult->oppose_count = $counter['oppose_count'];
|
|
||||||
|
|
||||||
$consult->update();
|
$consult->update();
|
||||||
|
|
||||||
|
$counterCache->rebuild($consult->id);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$counter = $counterCache->get($consult->id);
|
||||||
|
|
||||||
|
if ($counter) {
|
||||||
|
|
||||||
|
$consult->agree_count = $counter['agree_count'];
|
||||||
|
$consult->oppose_count = $counter['oppose_count'];
|
||||||
|
|
||||||
|
$consult->update();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,26 +46,43 @@ class SyncCourseCounterTask extends Task
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$courseCounterCache = new CourseCounterCache();
|
$counterCache = new CourseCounterCache();
|
||||||
|
|
||||||
$courseCache = new CourseCache();
|
$courseCache = new CourseCache();
|
||||||
|
|
||||||
|
$hour = date('H');
|
||||||
|
|
||||||
foreach ($courses as $course) {
|
foreach ($courses as $course) {
|
||||||
|
|
||||||
$counter = $courseCounterCache->get($course->id);
|
if ($hour % 3 == 0) {
|
||||||
|
|
||||||
if ($counter) {
|
$course->user_count = $courseRepo->countUsers($course->id);
|
||||||
|
$course->lesson_count = $courseRepo->countLessons($course->id);
|
||||||
$course->user_count = $counter['user_count'];
|
$course->comment_count = $courseRepo->countComments($course->id);
|
||||||
$course->lesson_count = $counter['lesson_count'];
|
$course->consult_count = $courseRepo->countConsults($course->id);
|
||||||
$course->comment_count = $counter['comment_count'];
|
$course->review_count = $courseRepo->countReviews($course->id);
|
||||||
$course->consult_count = $counter['consult_count'];
|
$course->favorite_count = $courseRepo->countFavorites($course->id);
|
||||||
$course->review_count = $counter['review_count'];
|
|
||||||
$course->favorite_count = $counter['favorite_count'];
|
|
||||||
|
|
||||||
$course->update();
|
$course->update();
|
||||||
|
|
||||||
|
$counterCache->rebuild($course->id);
|
||||||
$courseCache->rebuild($course->id);
|
$courseCache->rebuild($course->id);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$counter = $counterCache->get($course->id);
|
||||||
|
|
||||||
|
if ($counter) {
|
||||||
|
|
||||||
|
$course->user_count = $counter['user_count'];
|
||||||
|
$course->lesson_count = $counter['lesson_count'];
|
||||||
|
$course->comment_count = $counter['comment_count'];
|
||||||
|
$course->consult_count = $counter['consult_count'];
|
||||||
|
$course->review_count = $counter['review_count'];
|
||||||
|
$course->favorite_count = $counter['favorite_count'];
|
||||||
|
|
||||||
|
$course->update();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,18 +45,32 @@ class SyncReviewCounterTask extends Task
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$cache = new ReviewCounterCache();
|
$counterCache = new ReviewCounterCache();
|
||||||
|
|
||||||
|
$hour = date('H');
|
||||||
|
|
||||||
foreach ($reviews as $review) {
|
foreach ($reviews as $review) {
|
||||||
|
|
||||||
$counter = $cache->get($review->id);
|
if ($hour % 3 == 0) {
|
||||||
|
|
||||||
if ($counter) {
|
$review->agree_count = $reviewRepo->countAgrees($review->id);
|
||||||
|
$review->oppose_count = $reviewRepo->countOpposes($review->id);
|
||||||
$review->agree_count = $counter['agree_count'];
|
|
||||||
$review->oppose_count = $counter['oppose_count'];
|
|
||||||
|
|
||||||
$review->update();
|
$review->update();
|
||||||
|
|
||||||
|
$counterCache->rebuild($review->id);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$counter = $counterCache->get($review->id);
|
||||||
|
|
||||||
|
if ($counter) {
|
||||||
|
|
||||||
|
$review->agree_count = $counter['agree_count'];
|
||||||
|
$review->oppose_count = $counter['oppose_count'];
|
||||||
|
|
||||||
|
$review->update();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@
|
|||||||
|
|
||||||
<div style="text-align: center">
|
<div style="text-align: center">
|
||||||
{% if order.status == 'pending' %}
|
{% if order.status == 'pending' %}
|
||||||
<button class="kg-close layui-btn layui-bg-green" data-url="{{ url({'for':'admin.order.close','id':item.id}) }}">关闭订单</button>
|
<button class="kg-close layui-btn layui-bg-green" data-url="{{ url({'for':'admin.order.close','id':order.id}) }}">关闭订单</button>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<button class="kg-back layui-btn layui-bg-gray">返回上页</button>
|
<button class="kg-back layui-btn layui-bg-gray">返回上页</button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -53,42 +53,4 @@
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
{{ partial('partials/pager') }}
|
{{ partial('partials/pager') }}
|
||||||
|
|
||||||
<script>
|
|
||||||
|
|
||||||
layui.use(['jquery', 'form', 'layer'], function () {
|
|
||||||
|
|
||||||
var $ = layui.jquery;
|
|
||||||
var form = layui.form;
|
|
||||||
var layer = layui.layer;
|
|
||||||
|
|
||||||
form.on('switch(switch-published)', function (data) {
|
|
||||||
var pageId = $(this).attr('page-id');
|
|
||||||
var checked = $(this).is(':checked');
|
|
||||||
var published = checked ? 1 : 0;
|
|
||||||
var tips = published === 1 ? '确定要发布页面?' : '确定要下架页面?';
|
|
||||||
layer.confirm(tips, function () {
|
|
||||||
$.ajax({
|
|
||||||
type: 'POST',
|
|
||||||
url: '/admin/page/' + pageId + '/update',
|
|
||||||
data: {published: published},
|
|
||||||
success: function (res) {
|
|
||||||
layer.msg(res.msg, {icon: 1});
|
|
||||||
},
|
|
||||||
error: function (xhr) {
|
|
||||||
var json = JSON.parse(xhr.responseText);
|
|
||||||
layer.msg(json.msg, {icon: 2});
|
|
||||||
data.elem.checked = !checked;
|
|
||||||
form.render();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}, function () {
|
|
||||||
data.elem.checked = !checked;
|
|
||||||
form.render();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
</script>
|
|
@ -39,7 +39,7 @@
|
|||||||
|
|
||||||
uploader.on('media_progress', function (info) {
|
uploader.on('media_progress', function (info) {
|
||||||
if (!isNaN(info.percent)) {
|
if (!isNaN(info.percent)) {
|
||||||
var percent = parseInt(100 * info.percent);
|
var percent = Math.ceil(100 * info.percent);
|
||||||
element.progress('upload-progress', percent + '%');
|
element.progress('upload-progress', percent + '%');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -33,8 +33,6 @@
|
|||||||
layui.use(['jquery'], function () {
|
layui.use(['jquery'], function () {
|
||||||
|
|
||||||
var $ = layui.jquery;
|
var $ = layui.jquery;
|
||||||
|
|
||||||
var loopTime = 0;
|
|
||||||
var tradeSn = $('input[name=trade_sn]').val();
|
var tradeSn = $('input[name=trade_sn]').val();
|
||||||
var interval = setInterval(function () {
|
var interval = setInterval(function () {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
@ -54,21 +52,6 @@
|
|||||||
clearInterval(interval);
|
clearInterval(interval);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
loopTime += 5;
|
|
||||||
if (loopTime >= 300) {
|
|
||||||
$.ajax({
|
|
||||||
type: 'POST',
|
|
||||||
url: '/admin/test/alipay/cancel',
|
|
||||||
data: {trade_sn: tradeSn},
|
|
||||||
success: function (res) {
|
|
||||||
},
|
|
||||||
error: function (xhr) {
|
|
||||||
}
|
|
||||||
});
|
|
||||||
$('#error-tips').removeClass('layui-hide');
|
|
||||||
$('#qrcode').addClass('layui-hide');
|
|
||||||
clearInterval(interval);
|
|
||||||
}
|
|
||||||
}, 5000);
|
}, 5000);
|
||||||
|
|
||||||
});
|
});
|
||||||
|
@ -33,8 +33,6 @@
|
|||||||
layui.use(['jquery'], function () {
|
layui.use(['jquery'], function () {
|
||||||
|
|
||||||
var $ = layui.jquery;
|
var $ = layui.jquery;
|
||||||
|
|
||||||
var loopTime = 0;
|
|
||||||
var tradeSn = $('input[name=trade_sn]').val();
|
var tradeSn = $('input[name=trade_sn]').val();
|
||||||
var interval = setInterval(function () {
|
var interval = setInterval(function () {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
@ -54,21 +52,6 @@
|
|||||||
clearInterval(interval);
|
clearInterval(interval);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
loopTime += 5;
|
|
||||||
if (loopTime >= 300) {
|
|
||||||
$.ajax({
|
|
||||||
type: 'POST',
|
|
||||||
url: '/admin/test/wxpay/cancel',
|
|
||||||
data: {trade_sn: tradeSn},
|
|
||||||
success: function (res) {
|
|
||||||
},
|
|
||||||
error: function (xhr) {
|
|
||||||
}
|
|
||||||
});
|
|
||||||
$('#error-tips').removeClass('layui-hide');
|
|
||||||
$('#qrcode').addClass('layui-hide');
|
|
||||||
clearInterval(interval);
|
|
||||||
}
|
|
||||||
}, 5000);
|
}, 5000);
|
||||||
|
|
||||||
});
|
});
|
||||||
|
@ -27,10 +27,10 @@
|
|||||||
|
|
||||||
<div style="text-align: center">
|
<div style="text-align: center">
|
||||||
{% if trade.status == 'pending' %}
|
{% if trade.status == 'pending' %}
|
||||||
<button class="kg-close layui-btn layui-bg-green" trade-id="{{ trade.id }}">关闭交易</button>
|
<button class="kg-close layui-btn layui-bg-green" data-url="{{ url('for':'admin.trade.close','id':trade.id}) }}">关闭交易</button>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if trade.status == 'finished' %}
|
{% if trade.status == 'finished' %}
|
||||||
<button class="kg-refund layui-btn layui-bg-green" trade-id="{{ trade.id }}">申请退款</button>
|
<button class="kg-refund layui-btn layui-bg-green" data-url="{{ url('for':'admin.trade.refund','id':trade.id}) }}">申请退款</button>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<button class="kg-back layui-btn layui-bg-gray">返回上页</button>
|
<button class="kg-back layui-btn layui-bg-gray">返回上页</button>
|
||||||
</div>
|
</div>
|
||||||
@ -110,12 +110,12 @@
|
|||||||
var $ = layui.jquery;
|
var $ = layui.jquery;
|
||||||
|
|
||||||
$('.kg-close').on('click', function () {
|
$('.kg-close').on('click', function () {
|
||||||
var tradeId = $(this).attr('trade-id');
|
var url = $(this).attr('data-url');
|
||||||
var tips = '确定要关闭交易吗?';
|
var tips = '确定要关闭交易吗?';
|
||||||
layer.confirm(tips, function () {
|
layer.confirm(tips, function () {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
url: '/admin/trade/' + tradeId + '/close',
|
url: url,
|
||||||
finished: function (res) {
|
finished: function (res) {
|
||||||
layer.msg(res.msg, {icon: 1});
|
layer.msg(res.msg, {icon: 1});
|
||||||
setTimeout(function () {
|
setTimeout(function () {
|
||||||
@ -133,12 +133,12 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
$('.kg-refund').on('click', function () {
|
$('.kg-refund').on('click', function () {
|
||||||
var tradeId = $(this).attr('trade-id');
|
var url = $(this).attr('data-url');
|
||||||
var tips = '确定要申请退款吗?';
|
var tips = '确定要申请退款吗?';
|
||||||
layer.confirm(tips, function () {
|
layer.confirm(tips, function () {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
url: '/admin/trade/' + tradeId + '/refund',
|
url: url,
|
||||||
success: function (res) {
|
success: function (res) {
|
||||||
layer.msg(res.msg, {icon: 1});
|
layer.msg(res.msg, {icon: 1});
|
||||||
setTimeout(function () {
|
setTimeout(function () {
|
||||||
|
@ -2,8 +2,6 @@
|
|||||||
|
|
||||||
namespace App\Library\Http;
|
namespace App\Library\Http;
|
||||||
|
|
||||||
use App\Exceptions\BadRequest;
|
|
||||||
|
|
||||||
class Request extends \Phalcon\Http\Request
|
class Request extends \Phalcon\Http\Request
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -43,13 +41,13 @@ class Request extends \Phalcon\Http\Request
|
|||||||
{
|
{
|
||||||
$contentType = $this->getContentType();
|
$contentType = $this->getContentType();
|
||||||
|
|
||||||
if (stripos($contentType, 'form')) {
|
if (stripos($contentType, 'json')) {
|
||||||
return parent::getPost($name, $filters, $defaultValue, $notAllowEmpty, $noRecursive);
|
$data = $this->getPut($name, $filters, $defaultValue, $notAllowEmpty, $noRecursive);
|
||||||
} elseif (stripos($contentType, 'json')) {
|
|
||||||
return $this->getPut($name, $filters, $defaultValue, $notAllowEmpty, $noRecursive);
|
|
||||||
} else {
|
} else {
|
||||||
throw new BadRequest('sys.invalid_content_type');
|
$data = parent::getPost($name, $filters, $defaultValue, $notAllowEmpty, $noRecursive);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -6,33 +6,23 @@ 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\Pay as PayService;
|
use App\Services\Pay as PayService;
|
||||||
use Symfony\Component\HttpFoundation\Response as HttpResponse;
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
use Yansongda\Pay\Gateways\Alipay as AlipayGateway;
|
|
||||||
use Yansongda\Pay\Log;
|
use Yansongda\Pay\Log;
|
||||||
use Yansongda\Pay\Pay;
|
|
||||||
use Yansongda\Supports\Collection;
|
use Yansongda\Supports\Collection;
|
||||||
|
|
||||||
class Alipay extends PayService
|
class Alipay extends PayService
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var array
|
* @var \Yansongda\Pay\Gateways\Alipay
|
||||||
*/
|
*/
|
||||||
protected $settings;
|
protected $gateway;
|
||||||
|
|
||||||
public function __construct()
|
public function __construct($gateway = null)
|
||||||
{
|
{
|
||||||
$this->settings = $this->getSectionSettings('pay.alipay');
|
$gateway = $gateway instanceof AlipayGateway ? $gateway : new AlipayGateway();
|
||||||
}
|
|
||||||
|
|
||||||
public function setReturnUrl($returnUrl)
|
$this->gateway = $gateway->getInstance();
|
||||||
{
|
|
||||||
$this->settings['return_url'] = $returnUrl;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function setNotifyUrl($notifyUrl)
|
|
||||||
{
|
|
||||||
$this->settings['notify_url'] = $notifyUrl;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -43,11 +33,9 @@ class Alipay extends PayService
|
|||||||
*/
|
*/
|
||||||
public function scan(TradeModel $trade)
|
public function scan(TradeModel $trade)
|
||||||
{
|
{
|
||||||
$gateway = $this->getGateway();
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
$response = $gateway->scan([
|
$response = $this->gateway->scan([
|
||||||
'out_trade_no' => $trade->sn,
|
'out_trade_no' => $trade->sn,
|
||||||
'total_amount' => $trade->amount,
|
'total_amount' => $trade->amount,
|
||||||
'subject' => $trade->subject,
|
'subject' => $trade->subject,
|
||||||
@ -72,15 +60,13 @@ class Alipay extends PayService
|
|||||||
* 移动端支付
|
* 移动端支付
|
||||||
*
|
*
|
||||||
* @param TradeModel $trade
|
* @param TradeModel $trade
|
||||||
* @return HttpResponse|bool
|
* @return Response|bool
|
||||||
*/
|
*/
|
||||||
public function wap(TradeModel $trade)
|
public function wap(TradeModel $trade)
|
||||||
{
|
{
|
||||||
$gateway = $this->getGateway();
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
return $gateway->wap([
|
return $this->gateway->wap([
|
||||||
'out_trade_no' => $trade->sn,
|
'out_trade_no' => $trade->sn,
|
||||||
'total_amount' => $trade->amount,
|
'total_amount' => $trade->amount,
|
||||||
'subject' => $trade->subject,
|
'subject' => $trade->subject,
|
||||||
@ -101,15 +87,13 @@ class Alipay extends PayService
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 异步通知
|
* 异步通知
|
||||||
* @return HttpResponse|bool
|
* @return Response|bool
|
||||||
*/
|
*/
|
||||||
public function notify()
|
public function notify()
|
||||||
{
|
{
|
||||||
$gateway = $this->getGateway();
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
$data = $gateway->verify();
|
$data = $this->gateway->verify();
|
||||||
|
|
||||||
Log::debug('Alipay Verify Data', $data->all());
|
Log::debug('Alipay Verify Data', $data->all());
|
||||||
|
|
||||||
@ -127,17 +111,11 @@ class Alipay extends PayService
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($data->app_id != $this->settings['app_id']) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$tradeRepo = new TradeRepo();
|
$tradeRepo = new TradeRepo();
|
||||||
|
|
||||||
$trade = $tradeRepo->findBySn($data->out_trade_no);
|
$trade = $tradeRepo->findBySn($data->out_trade_no);
|
||||||
|
|
||||||
if (!$trade) {
|
if (!$trade) return false;
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($data->total_amount != $trade->amount) {
|
if ($data->total_amount != $trade->amount) {
|
||||||
return false;
|
return false;
|
||||||
@ -151,7 +129,7 @@ class Alipay extends PayService
|
|||||||
|
|
||||||
$this->eventsManager->fire('pay:afterPay', $this, $trade);
|
$this->eventsManager->fire('pay:afterPay', $this, $trade);
|
||||||
|
|
||||||
return $gateway->success();
|
return $this->gateway->success();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -163,13 +141,11 @@ class Alipay extends PayService
|
|||||||
*/
|
*/
|
||||||
public function find($outTradeNo, $type = 'wap')
|
public function find($outTradeNo, $type = 'wap')
|
||||||
{
|
{
|
||||||
$gateway = $this->getGateway();
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
$order = ['out_trade_no' => $outTradeNo];
|
$order = ['out_trade_no' => $outTradeNo];
|
||||||
|
|
||||||
$result = $gateway->find($order, $type);
|
$result = $this->gateway->find($order, $type);
|
||||||
|
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
|
|
||||||
@ -192,11 +168,9 @@ class Alipay extends PayService
|
|||||||
*/
|
*/
|
||||||
public function close($outTradeNo)
|
public function close($outTradeNo)
|
||||||
{
|
{
|
||||||
$gateway = $this->getGateway();
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
$response = $gateway->close(['out_trade_no' => $outTradeNo]);
|
$response = $this->gateway->close(['out_trade_no' => $outTradeNo]);
|
||||||
|
|
||||||
$result = $response->code == '10000';
|
$result = $response->code == '10000';
|
||||||
|
|
||||||
@ -221,11 +195,9 @@ class Alipay extends PayService
|
|||||||
*/
|
*/
|
||||||
public function cancel($outTradeNo)
|
public function cancel($outTradeNo)
|
||||||
{
|
{
|
||||||
$gateway = $this->getGateway();
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
$response = $gateway->cancel(['out_trade_no' => $outTradeNo]);
|
$response = $this->gateway->cancel(['out_trade_no' => $outTradeNo]);
|
||||||
|
|
||||||
$result = $response->code == '10000';
|
$result = $response->code == '10000';
|
||||||
|
|
||||||
@ -250,15 +222,13 @@ class Alipay extends PayService
|
|||||||
*/
|
*/
|
||||||
public function refund(RefundModel $refund)
|
public function refund(RefundModel $refund)
|
||||||
{
|
{
|
||||||
$gateway = $this->getGateway();
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
$tradeRepo = new TradeRepo();
|
$tradeRepo = new TradeRepo();
|
||||||
|
|
||||||
$trade = $tradeRepo->findById($refund->trade_id);
|
$trade = $tradeRepo->findById($refund->trade_id);
|
||||||
|
|
||||||
$response = $gateway->refund([
|
$response = $this->gateway->refund([
|
||||||
'out_trade_no' => $trade->sn,
|
'out_trade_no' => $trade->sn,
|
||||||
'out_request_no' => $refund->sn,
|
'out_request_no' => $refund->sn,
|
||||||
'refund_amount' => $refund->amount,
|
'refund_amount' => $refund->amount,
|
||||||
@ -279,36 +249,4 @@ class Alipay extends PayService
|
|||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取 Gateway
|
|
||||||
*
|
|
||||||
* @return AlipayGateway
|
|
||||||
*/
|
|
||||||
public function getGateway()
|
|
||||||
{
|
|
||||||
$config = $this->getDI()->get('config');
|
|
||||||
|
|
||||||
$level = $config->env == ENV_DEV ? 'debug' : 'info';
|
|
||||||
|
|
||||||
$payConfig = [
|
|
||||||
'app_id' => $this->settings['app_id'],
|
|
||||||
'ali_public_key' => $this->settings['public_key'],
|
|
||||||
'private_key' => $this->settings['private_key'],
|
|
||||||
'return_url' => $this->settings['return_url'],
|
|
||||||
'notify_url' => $this->settings['notify_url'],
|
|
||||||
'log' => [
|
|
||||||
'file' => log_path('alipay.log'),
|
|
||||||
'level' => $level,
|
|
||||||
'type' => 'daily',
|
|
||||||
'max_file' => 30,
|
|
||||||
],
|
|
||||||
];
|
|
||||||
|
|
||||||
if ($config->env == ENV_DEV) {
|
|
||||||
$payConfig['mode'] = 'dev';
|
|
||||||
}
|
|
||||||
|
|
||||||
return Pay::alipay($payConfig);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
69
app/Services/Pay/AlipayGateway.php
Normal file
69
app/Services/Pay/AlipayGateway.php
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Services\Pay;
|
||||||
|
|
||||||
|
use App\Services\Service;
|
||||||
|
use Yansongda\Pay\Gateways\Alipay;
|
||||||
|
use Yansongda\Pay\Pay;
|
||||||
|
|
||||||
|
class AlipayGateway extends Service
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $settings;
|
||||||
|
|
||||||
|
public function __construct($options = [])
|
||||||
|
{
|
||||||
|
$defaults = $this->getSectionSettings('pay.alipay');
|
||||||
|
|
||||||
|
$this->settings = array_merge($defaults, $options);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSettings()
|
||||||
|
{
|
||||||
|
return $this->settings;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setReturnUrl($returnUrl)
|
||||||
|
{
|
||||||
|
$this->settings['return_url'] = $returnUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setNotifyUrl($notifyUrl)
|
||||||
|
{
|
||||||
|
$this->settings['notify_url'] = $notifyUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Alipay
|
||||||
|
*/
|
||||||
|
public function getInstance()
|
||||||
|
{
|
||||||
|
$config = $this->getDI()->get('config');
|
||||||
|
|
||||||
|
$level = $config->env == ENV_DEV ? 'debug' : 'info';
|
||||||
|
|
||||||
|
$payConfig = [
|
||||||
|
'app_id' => $this->settings['app_id'],
|
||||||
|
'ali_public_key' => $this->settings['public_key'],
|
||||||
|
'private_key' => $this->settings['private_key'],
|
||||||
|
'return_url' => $this->settings['return_url'],
|
||||||
|
'notify_url' => $this->settings['notify_url'],
|
||||||
|
'log' => [
|
||||||
|
'file' => log_path('alipay.log'),
|
||||||
|
'level' => $level,
|
||||||
|
'type' => 'daily',
|
||||||
|
'max_file' => 30,
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
if ($config->env == ENV_DEV) {
|
||||||
|
$payConfig['mode'] = 'dev';
|
||||||
|
}
|
||||||
|
|
||||||
|
return Pay::alipay($payConfig);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -6,28 +6,24 @@ 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\Pay as PayService;
|
use App\Services\Pay as PayService;
|
||||||
use Symfony\Component\HttpFoundation\Response as HttpResponse;
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
use Yansongda\Pay\Gateways\Wechat as WechatGateway;
|
use Yansongda\Pay\Gateways\Wechat;
|
||||||
use Yansongda\Pay\Log;
|
use Yansongda\Pay\Log;
|
||||||
use Yansongda\Pay\Pay;
|
|
||||||
use Yansongda\Supports\Collection;
|
use Yansongda\Supports\Collection;
|
||||||
|
|
||||||
class Wxpay extends PayService
|
class Wxpay extends PayService
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var array
|
* @var Wechat
|
||||||
*/
|
*/
|
||||||
protected $settings;
|
protected $gateway;
|
||||||
|
|
||||||
public function __construct()
|
public function __construct($gateway = null)
|
||||||
{
|
{
|
||||||
$this->settings = $this->getSectionSettings('pay.wxpay');
|
$gateway = $gateway instanceof WxpayGateway ? $gateway : new WxpayGateway();
|
||||||
}
|
|
||||||
|
|
||||||
public function setNotifyUrl($notifyUrl)
|
$this->gateway = $gateway->getInstance();
|
||||||
{
|
|
||||||
$this->settings['notify_url'] = $notifyUrl;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -38,11 +34,9 @@ class Wxpay extends PayService
|
|||||||
*/
|
*/
|
||||||
public function scan(TradeModel $trade)
|
public function scan(TradeModel $trade)
|
||||||
{
|
{
|
||||||
$gateway = $this->getGateway();
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
$response = $gateway->scan([
|
$response = $this->gateway->scan([
|
||||||
'out_trade_no' => $trade->sn,
|
'out_trade_no' => $trade->sn,
|
||||||
'total_fee' => 100 * $trade->amount,
|
'total_fee' => 100 * $trade->amount,
|
||||||
'body' => $trade->subject,
|
'body' => $trade->subject,
|
||||||
@ -67,15 +61,13 @@ class Wxpay extends PayService
|
|||||||
* 移动端支付
|
* 移动端支付
|
||||||
*
|
*
|
||||||
* @param TradeModel $trade
|
* @param TradeModel $trade
|
||||||
* @return HttpResponse|bool
|
* @return Response|bool
|
||||||
*/
|
*/
|
||||||
public function wap(TradeModel $trade)
|
public function wap(TradeModel $trade)
|
||||||
{
|
{
|
||||||
$gateway = $this->getGateway();
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
return $gateway->wap([
|
return $this->gateway->wap([
|
||||||
'out_trade_no' => $trade->sn,
|
'out_trade_no' => $trade->sn,
|
||||||
'total_fee' => 100 * $trade->amount,
|
'total_fee' => 100 * $trade->amount,
|
||||||
'body' => $trade->subject,
|
'body' => $trade->subject,
|
||||||
@ -97,15 +89,13 @@ class Wxpay extends PayService
|
|||||||
/**
|
/**
|
||||||
* 异步通知
|
* 异步通知
|
||||||
*
|
*
|
||||||
* @return HttpResponse|bool
|
* @return Response|bool
|
||||||
*/
|
*/
|
||||||
public function notify()
|
public function notify()
|
||||||
{
|
{
|
||||||
$gateway = $this->getGateway();
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
$data = $gateway->verify();
|
$data = $this->gateway->verify();
|
||||||
|
|
||||||
Log::debug('Wxpay Verify Data', $data->all());
|
Log::debug('Wxpay Verify Data', $data->all());
|
||||||
|
|
||||||
@ -123,10 +113,6 @@ class Wxpay extends PayService
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($data->mch_id != $this->settings['mch_id']) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$tradeRepo = new TradeRepo();
|
$tradeRepo = new TradeRepo();
|
||||||
|
|
||||||
$trade = $tradeRepo->findBySn($data->out_trade_no);
|
$trade = $tradeRepo->findBySn($data->out_trade_no);
|
||||||
@ -145,7 +131,7 @@ class Wxpay extends PayService
|
|||||||
|
|
||||||
$this->eventsManager->fire('pay:afterPay', $this, $trade);
|
$this->eventsManager->fire('pay:afterPay', $this, $trade);
|
||||||
|
|
||||||
return $gateway->success();
|
return $this->gateway->success();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -157,13 +143,11 @@ class Wxpay extends PayService
|
|||||||
*/
|
*/
|
||||||
public function find($outTradeNo, $type = 'wap')
|
public function find($outTradeNo, $type = 'wap')
|
||||||
{
|
{
|
||||||
$gateway = $this->getGateway();
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
$order = ['out_trade_no' => $outTradeNo];
|
$order = ['out_trade_no' => $outTradeNo];
|
||||||
|
|
||||||
$result = $gateway->find($order, $type);
|
$result = $this->gateway->find($order, $type);
|
||||||
|
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
|
|
||||||
@ -186,11 +170,9 @@ class Wxpay extends PayService
|
|||||||
*/
|
*/
|
||||||
public function close($outTradeNo)
|
public function close($outTradeNo)
|
||||||
{
|
{
|
||||||
$gateway = $this->getGateway();
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
$response = $gateway->close(['out_trade_no' => $outTradeNo]);
|
$response = $this->gateway->close(['out_trade_no' => $outTradeNo]);
|
||||||
|
|
||||||
$result = $response->result_code == 'SUCCESS';
|
$result = $response->result_code == 'SUCCESS';
|
||||||
|
|
||||||
@ -226,15 +208,13 @@ class Wxpay extends PayService
|
|||||||
*/
|
*/
|
||||||
public function refund(RefundModel $refund)
|
public function refund(RefundModel $refund)
|
||||||
{
|
{
|
||||||
$gateway = $this->getGateway();
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
$tradeRepo = new TradeRepo();
|
$tradeRepo = new TradeRepo();
|
||||||
|
|
||||||
$trade = $tradeRepo->findById($refund->trade_id);
|
$trade = $tradeRepo->findById($refund->trade_id);
|
||||||
|
|
||||||
$response = $gateway->refund([
|
$response = $this->gateway->refund([
|
||||||
'out_trade_no' => $trade->sn,
|
'out_trade_no' => $trade->sn,
|
||||||
'out_refund_no' => $refund->sn,
|
'out_refund_no' => $refund->sn,
|
||||||
'total_fee' => 100 * $trade->amount,
|
'total_fee' => 100 * $trade->amount,
|
||||||
@ -256,35 +236,4 @@ class Wxpay extends PayService
|
|||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取 Gateway
|
|
||||||
*
|
|
||||||
* @return WechatGateway
|
|
||||||
*/
|
|
||||||
public function getGateway()
|
|
||||||
{
|
|
||||||
$config = $this->getDI()->get('config');
|
|
||||||
|
|
||||||
$level = $config->env == ENV_DEV ? 'debug' : 'info';
|
|
||||||
|
|
||||||
$payConfig = [
|
|
||||||
'app_id' => $this->settings['app_id'],
|
|
||||||
'mch_id' => $this->settings['mch_id'],
|
|
||||||
'key' => $this->settings['key'],
|
|
||||||
'notify_url' => $this->settings['notify_url'],
|
|
||||||
'log' => [
|
|
||||||
'file' => log_path('wxpay.log'),
|
|
||||||
'level' => $level,
|
|
||||||
'type' => 'daily',
|
|
||||||
'max_file' => 30,
|
|
||||||
],
|
|
||||||
];
|
|
||||||
|
|
||||||
if ($config->env == ENV_DEV) {
|
|
||||||
$payConfig['mode'] = 'dev';
|
|
||||||
}
|
|
||||||
|
|
||||||
return Pay::wechat($payConfig);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
63
app/Services/Pay/WxpayGateway.php
Normal file
63
app/Services/Pay/WxpayGateway.php
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Services\Pay;
|
||||||
|
|
||||||
|
use App\Services\Service as Service;
|
||||||
|
use Yansongda\Pay\Gateways\Wechat;
|
||||||
|
use Yansongda\Pay\Pay;
|
||||||
|
|
||||||
|
class WxpayGateway extends Service
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $settings;
|
||||||
|
|
||||||
|
public function __construct($options = [])
|
||||||
|
{
|
||||||
|
$defaults = $this->getSectionSettings('pay.wxpay');
|
||||||
|
|
||||||
|
$this->settings = array_merge($defaults, $options);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSettings()
|
||||||
|
{
|
||||||
|
return $this->settings;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setNotifyUrl($notifyUrl)
|
||||||
|
{
|
||||||
|
$this->settings['notify_url'] = $notifyUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Wechat
|
||||||
|
*/
|
||||||
|
public function getInstance()
|
||||||
|
{
|
||||||
|
$config = $this->getDI()->get('config');
|
||||||
|
|
||||||
|
$level = $config->env == ENV_DEV ? 'debug' : 'info';
|
||||||
|
|
||||||
|
$payConfig = [
|
||||||
|
'app_id' => $this->settings['app_id'],
|
||||||
|
'mch_id' => $this->settings['mch_id'],
|
||||||
|
'key' => $this->settings['key'],
|
||||||
|
'notify_url' => $this->settings['notify_url'],
|
||||||
|
'log' => [
|
||||||
|
'file' => log_path('wxpay.log'),
|
||||||
|
'level' => $level,
|
||||||
|
'type' => 'daily',
|
||||||
|
'max_file' => 30,
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
if ($config->env == ENV_DEV) {
|
||||||
|
$payConfig['mode'] = 'dev';
|
||||||
|
}
|
||||||
|
|
||||||
|
return Pay::wechat($payConfig);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -16,6 +16,7 @@ layui.use(['jquery', 'form', 'element', 'layer', 'dropdown'], function () {
|
|||||||
var csrfTokenValue = $('meta[name="csrf-token-value"]').attr('content');
|
var csrfTokenValue = $('meta[name="csrf-token-value"]').attr('content');
|
||||||
xhr.setRequestHeader('X-Csrf-Token-Key', csrfTokenKey);
|
xhr.setRequestHeader('X-Csrf-Token-Key', csrfTokenKey);
|
||||||
xhr.setRequestHeader('X-Csrf-Token-Value', csrfTokenValue);
|
xhr.setRequestHeader('X-Csrf-Token-Value', csrfTokenValue);
|
||||||
|
xhr.setRequestHeader('Content-Type', 'application/json');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user