From efaf48186beb842c6c21e6ad8938f02a34dc427f Mon Sep 17 00:00:00 2001 From: luofei <604446095@qq.com> Date: Thu, 6 Jul 2023 13:59:40 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E8=AF=95=E4=BF=A1=E7=94=A8=E8=B4=AD?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=BB=93=E7=AE=97=E5=9B=9E=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/common/model/store/order/PresellOrder.php | 4 ++-- .../model/store/order/StoreGroupOrder.php | 4 ++-- .../store/order/StoreOrderRepository.php | 18 +++++++++++------- app/controller/api/Common.php | 2 +- app/controller/api/store/order/StoreOrder.php | 4 ++-- .../pay/OrderSettlePaySuccessListen.php | 8 +++++--- 6 files changed, 23 insertions(+), 17 deletions(-) diff --git a/app/common/model/store/order/PresellOrder.php b/app/common/model/store/order/PresellOrder.php index 2e281596..1449876a 100644 --- a/app/common/model/store/order/PresellOrder.php +++ b/app/common/model/store/order/PresellOrder.php @@ -82,12 +82,12 @@ class PresellOrder extends BaseModel ]; } - public function getPayParams($return_url = '') + public function getPayParams($return_url = '', $attach = 'presell') { $params = [ 'order_sn' => $this->presell_order_sn, 'pay_price' => $this->pay_price, - 'attach' => 'presell', + 'attach' => $attach, 'body' => '尾款支付' ]; if ($return_url) { diff --git a/app/common/model/store/order/StoreGroupOrder.php b/app/common/model/store/order/StoreGroupOrder.php index ef3b69e2..d4dc07b2 100644 --- a/app/common/model/store/order/StoreGroupOrder.php +++ b/app/common/model/store/order/StoreGroupOrder.php @@ -97,12 +97,12 @@ class StoreGroupOrder extends BaseModel return $params; } - public function getPayParams($return_url = '') + public function getPayParams($return_url = '', $attach = 'order') { $params = [ 'order_sn' => $this->group_order_sn, 'pay_price' => $this->pay_price, - 'attach' => 'order', + 'attach' => $attach, 'body' => '订单支付' ]; if ($return_url) { diff --git a/app/common/repositories/store/order/StoreOrderRepository.php b/app/common/repositories/store/order/StoreOrderRepository.php index b2ca8121..14d3d16d 100644 --- a/app/common/repositories/store/order/StoreOrderRepository.php +++ b/app/common/repositories/store/order/StoreOrderRepository.php @@ -2433,12 +2433,12 @@ class StoreOrderRepository extends BaseRepository /** * 订单结算 * @param $id - * @param $type + * @param $payType * @param $user * @return array * @throws Exception */ - public function settle($id, $type, $user) + public function settle($id, $payType, $user) { /** @var StoreGroupOrderRepository $groupOrderRepository */ $groupOrderRepository = app()->make(StoreGroupOrderRepository::class); @@ -2455,19 +2455,23 @@ class StoreOrderRepository extends BaseRepository $interest = $groupOrder->interest->calculateInterest(); $payMoney = bcadd($groupOrder->interest->total_price, $interest, 2); $result = true; + $type = array_search($payType, StoreOrderRepository::PAY_TYPE); + if (in_array($payType, ['weixin', 'alipay'], true) && request()->isApp()) { + $payType .= 'App'; + } $data = ['type' => $type, 'order_id' => $groupOrder->group_order_id, 'paid' => true]; if ($payMoney > 0) { - if (!in_array($type, ['balance', 'scrcu'])) { + $groupOrder->pay_price = $payMoney; + if (!in_array($payType, ['balance', 'scrcu'])) { if (systemConfig('open_wx_combine')) { - $service = new CombinePayService($type, $groupOrder->getCombinePayParams('order_settle')); + $service = new CombinePayService($payType, $groupOrder->getCombinePayParams('order_settle')); } else { - $service = new PayService($type, $groupOrder->getPayParams($type === 'alipay' ? request()->param('return_url') : '')); + $service = new PayService($payType, $groupOrder->getPayParams($payType === 'alipay' ? request()->param('return_url') : '', 'order_settle')); } $result = $service->pay($user); $data = array_merge($data, $result, ['paid' => false]); } else { - $payTool = PayTool::instance($type); - $groupOrder->pay_price = $payMoney; + $payTool = PayTool::instance($payType); $result = $payTool->pay($groupOrder); } } diff --git a/app/controller/api/Common.php b/app/controller/api/Common.php index ed1c0635..c2c22e88 100644 --- a/app/controller/api/Common.php +++ b/app/controller/api/Common.php @@ -195,7 +195,7 @@ class Common extends BaseController */ public function wechatCombinePayNotify($type) { - if (!in_array($type, ['order', 'presell'], true)) + if (!in_array($type, ['order', 'presell', 'order_settle'], true)) throw new ValidateException('参数错误'); try { return WechatService::create()->handleCombinePayNotify($type); diff --git a/app/controller/api/store/order/StoreOrder.php b/app/controller/api/store/order/StoreOrder.php index fed9d516..7cd38a64 100644 --- a/app/controller/api/store/order/StoreOrder.php +++ b/app/controller/api/store/order/StoreOrder.php @@ -310,9 +310,9 @@ class StoreOrder extends BaseController public function settle() { $id = $this->request->param('id/d'); - $type = $this->request->param('type'); + $payType = $this->request->param('pay_type'); try { - $data = $this->repository->settle($id, $type, $this->request->userInfo()); + $data = $this->repository->settle($id, $payType, $this->request->userInfo()); return app('json')->success('success', $data); } catch (\Exception $e) { return app('json')->fail($e->getMessage()); diff --git a/crmeb/listens/pay/OrderSettlePaySuccessListen.php b/crmeb/listens/pay/OrderSettlePaySuccessListen.php index 08ca1208..f63edbf4 100644 --- a/crmeb/listens/pay/OrderSettlePaySuccessListen.php +++ b/crmeb/listens/pay/OrderSettlePaySuccessListen.php @@ -27,11 +27,13 @@ class OrderSettlePaySuccessListen implements ListenerInterface public function handle($data): void { - $orderSn = $data['order_sn']; - $groupOrder = app()->make(StoreGroupOrderRepository::class)->getWhere(['group_order_sn' => $orderSn]); - if (!$groupOrder || $groupOrder->paid == 1) return; Db::startTrans(); try { + $orderSn = $data['order_sn']; + $groupOrder = app()->make(StoreGroupOrderRepository::class)->getWhere(['group_order_sn' => $orderSn]); + if (!$groupOrder || $groupOrder->paid == 1) { + throw new \Exception('订单不存在或已支付'); + } app()->make(MerchantRepository::class)->computedLockMoney($groupOrder->order); $groupOrder->interest->status = StoreOrderInterest::STATUS_SETTLED; $groupOrder->interest->settle_time = date('Y-m-d H:i:s');