1
0
mirror of https://gitee.com/koogua/course-tencent-cloud.git synced 2025-06-22 11:41:27 +08:00
2020-12-02 15:09:50 +08:00

134 lines
3.3 KiB
PHP

<?php
namespace App\Http\Api\Services;
use App\Models\Client as ClientModel;
use App\Models\Trade as TradeModel;
use App\Services\Logic\OrderTrait;
use App\Services\Logic\Trade\TradeInfo;
use App\Services\Logic\TradeTrait;
use App\Services\Pay\Alipay;
use App\Services\Pay\Wxpay;
use App\Validators\Client as ClientValidator;
use App\Validators\Trade as TradeValidator;
class Trade extends Service
{
use OrderTrait;
use TradeTrait;
public function createH5Trade()
{
$post = $this->request->getPost();
$validator = new ClientValidator();
$platform = $this->getPlatform();
$validator->checkH5Platform($platform);
$order = $this->checkOrderBySn($post['order_sn']);
$user = $this->getLoginUser();
$validator = new TradeValidator();
$channel = $validator->checkChannel($post['channel']);
$trade = new TradeModel();
$trade->subject = $order->subject;
$trade->amount = $order->amount;
$trade->channel = $channel;
$trade->order_id = $order->id;
$trade->owner_id = $user->id;
$trade->create();
$redirect = '';
if ($trade->channel == TradeModel::CHANNEL_ALIPAY) {
$alipay = new Alipay();
$response = $alipay->wap($trade);
$redirect = $response ? $response->getTargetUrl() : '';
} elseif ($trade->channel == TradeModel::CHANNEL_WXPAY) {
$wxpay = new Wxpay();
$response = $wxpay->wap($trade);
$redirect = $response ? $response->getTargetUrl() : '';
}
$payment = ['redirect' => $redirect];
return [
'trade' => $this->handleTradeInfo($trade->sn),
'payment' => $payment,
];
}
public function createMpTrade()
{
$post = $this->request->getPost();
$validator = new ClientValidator();
$platform = $this->getPlatform();
$platform = $validator->checkMpPlatform($platform);
$order = $this->checkOrderBySn($post['order_sn']);
$user = $this->getLoginUser();
$channel = TradeModel::CHANNEL_WXPAY;
if ($platform == ClientModel::TYPE_MP_ALIPAY) {
$channel = TradeModel::CHANNEL_ALIPAY;
} elseif ($platform == ClientModel::TYPE_MP_WEIXIN) {
$channel = TradeModel::CHANNEL_WXPAY;
}
$trade = new TradeModel();
$trade->subject = $order->subject;
$trade->amount = $order->amount;
$trade->channel = $channel;
$trade->order_id = $order->id;
$trade->owner_id = $user->id;
$trade->create();
$response = null;
if ($post['channel'] == TradeModel::CHANNEL_ALIPAY) {
$alipay = new Alipay();
$buyerId = '';
$response = $alipay->mini($trade, $buyerId);
} elseif ($post['channel'] == TradeModel::CHANNEL_WXPAY) {
$wxpay = new Wxpay();
$openId = '';
$response = $wxpay->mini($trade, $openId);
}
return $response;
}
public function createAppTrade()
{
}
protected function getPlatform()
{
return $this->request->getHeader('X-Platform');
}
protected function handleTradeInfo($sn)
{
$service = new TradeInfo();
return $service->handle($sn);
}
}