101 lines
3.2 KiB
PHP
101 lines
3.2 KiB
PHP
<?php
|
||
|
||
namespace app\api\controller\bargain;
|
||
|
||
use app\api\controller\Controller;
|
||
use app\api\model\bargain\Task as TaskModel;
|
||
use app\api\model\bargain\Setting as SettingModel;
|
||
use app\api\service\order\Checkout as CheckoutModel;
|
||
use app\common\enum\order\OrderSource as OrderSourceEnum;
|
||
|
||
class Order extends Controller
|
||
{
|
||
/* @var \app\api\model\User $user */
|
||
private $user;
|
||
|
||
/**
|
||
* 构造方法
|
||
* @throws \app\common\exception\BaseException
|
||
* @throws \think\exception\DbException
|
||
*/
|
||
public function _initialize()
|
||
{
|
||
parent::_initialize();
|
||
// 用户信息
|
||
$this->user = $this->getUser();
|
||
}
|
||
|
||
/**
|
||
* 砍价订单结算
|
||
* @return array
|
||
* @throws \app\common\exception\BaseException
|
||
* @throws \think\Exception
|
||
* @throws \think\db\exception\DataNotFoundException
|
||
* @throws \think\db\exception\ModelNotFoundException
|
||
* @throws \think\exception\DbException
|
||
* @throws \Exception
|
||
*/
|
||
public function checkout()
|
||
{
|
||
// 实例化结算台服务
|
||
$Checkout = new CheckoutModel;
|
||
// 订单结算api参数
|
||
$params = $Checkout->setParam($this->getParam([
|
||
'task_id' => 0
|
||
]));
|
||
// 获取砍价任务详情
|
||
$task = TaskModel::detail($params['task_id']);
|
||
// 获取砍价商品信息
|
||
$goodsList = $task->getTaskGoods($params['task_id']);
|
||
if ($goodsList === false) {
|
||
return $this->renderError($task->getError());
|
||
}
|
||
// 设置订单来源
|
||
$Checkout->setOrderSource([
|
||
'source' => OrderSourceEnum::BARGAIN,
|
||
'source_id' => $params['task_id'],
|
||
]);
|
||
// 砍价商品不参与 等级折扣和优惠券折扣
|
||
$Checkout->setCheckoutRule([
|
||
'is_user_grade' => false,
|
||
'is_coupon' => false,
|
||
'is_use_points' => false,
|
||
'is_dealer' => SettingModel::getIsDealer(),
|
||
]);
|
||
// 获取订单结算信息
|
||
$orderInfo = $Checkout->onCheckout($this->user, $goodsList);
|
||
if ($this->request->isGet()) {
|
||
return $this->renderSuccess($orderInfo);
|
||
}
|
||
// submit:订单结算提交
|
||
if ($Checkout->hasError()) {
|
||
return $this->renderError($Checkout->getError());
|
||
}
|
||
// 创建订单
|
||
if (!$Checkout->createOrder($orderInfo)) {
|
||
return $this->renderError($Checkout->getError() ?: '订单创建失败');
|
||
}
|
||
// 订单创建后将砍价任务结束
|
||
$task->setTaskEnd();
|
||
// 构建微信支付请求
|
||
$payment = $Checkout->onOrderPayment();
|
||
// 支付状态提醒
|
||
$message = ['success' => '支付成功', 'error' => '订单未支付'];
|
||
return $this->renderSuccess([
|
||
'order_id' => $Checkout->model['order_id'], // 订单id
|
||
'pay_type' => $params['pay_type'], // 支付方式
|
||
'payment' => $payment // 微信支付参数
|
||
], $message);
|
||
}
|
||
|
||
/**
|
||
* 订单结算提交的参数
|
||
* @param array $define
|
||
* @return array
|
||
*/
|
||
private function getParam($define = [])
|
||
{
|
||
return array_merge($define, $this->request->param());
|
||
}
|
||
|
||
} |