1
0
mirror of https://gitee.com/koogua/course-tencent-cloud.git synced 2025-06-17 07:45:29 +08:00
course-tencent-cloud/app/Console/Tasks/CloseTradeTask.php
2019-12-13 00:10:10 +08:00

95 lines
2.1 KiB
PHP

<?php
namespace App\Console\Tasks;
use App\Models\Trade as TradeModel;
use App\Services\Alipay as AlipayService;
use Phalcon\Cli\Task;
class CloseTradeTask extends Task
{
public function mainAction()
{
$trades = $this->findTrades();
if ($trades->count() == 0) {
return;
}
foreach ($trades as $trade) {
if ($trade->channel == TradeModel::CHANNEL_ALIPAY) {
$this->closeAlipayTrade($trade);
} elseif ($trade->channel == TradeModel::CHANNEL_WXPAY) {
$this->closeWxpayTrade($trade);
}
}
}
/**
* 关闭支付宝交易
*
* @param TradeModel $trade
*/
protected function closeAlipayTrade($trade)
{
$service = new AlipayService();
$alyOrder = $service->findOrder($trade->sn);
if ($alyOrder) {
if ($alyOrder->trade_status == 'WAIT_BUYER_PAY') {
$service->closeOrder($trade->sn);
}
}
$trade->status = TradeModel::STATUS_CLOSED;
$trade->update();
}
/**
* 关闭微信交易
*
* @param TradeModel $trade
*/
protected function closeWxpayTrade($trade)
{
$service = new WxpayService();
$wxOrder = $service->findOrder($trade->sn);
if ($wxOrder) {
if ($wxOrder->trade_state == 'NOTPAY') {
$service->closeOrder($trade->sn);
}
}
$trade->status = TradeModel::STATUS_CLOSED;
$trade->update();
}
/**
* 查找待关闭交易
*
* @param integer $limit
* @return \Phalcon\Mvc\Model\ResultsetInterface
*/
protected function findTrades($limit = 5)
{
$status = TradeModel::STATUS_PENDING;
$createdAt = time() - 15 * 60;
$trades = TradeModel::query()
->where('status = :status:', ['status' => $status])
->andWhere('created_at < :created_at:', ['created_at' => $createdAt])
->limit($limit)
->execute();
return $trades;
}
}