OrderHook.php 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. <?php
  2. declare(strict_types=1);
  3. namespace SixShop\Lakala\Hook;
  4. use app\event\OrderDetailResponseEvent;
  5. use app\model\Order;
  6. use SixShop\Core\Attribute\Hook;
  7. use SixShop\Lakala\Enum\WechatOrderStateEnum;
  8. use SixShop\Payment\Model\ExtensionPaymentModel;
  9. use SixShop\Wechat\Service\ExpressService;
  10. class OrderHook
  11. {
  12. public function __construct(private ExpressService $expressService)
  13. {
  14. }
  15. /**
  16. * 拉卡拉订单信息
  17. */
  18. #[Hook(OrderDetailResponseEvent::class)]
  19. public function orderInfo(OrderDetailResponseEvent $event): void
  20. {
  21. $order = $event->getOrderModel();
  22. if ($order->payment_method == 'lakala' && $order->shipping_status == 1) {
  23. $payment = ExtensionPaymentModel::where([
  24. 'order_id' => $order->id,
  25. 'biz_type' => 1,
  26. 'pay_type' => 'lakala'
  27. ])->findOrEmpty();
  28. if (!$payment->isEmpty()) {
  29. $wechatTransactionID = $payment['payment_result']['acc_trade_no'];
  30. $orderInfo = $this->expressService->queryOrder($wechatTransactionID);
  31. $orderState = WechatOrderStateEnum::from($orderInfo['order_state']);
  32. $order->setAttr('lakala', [
  33. 'wechat_transaction_id' => $wechatTransactionID,
  34. 'wechat_order_state' => $orderState,
  35. 'openid' => $payment['payment_result']['acc_resp_fields']['user_id'],
  36. ]);
  37. if ($orderState == WechatOrderStateEnum::TRADE_COMPLETED && $order->order_status == 30) {
  38. // 订单完成
  39. Order::update([
  40. 'order_status' => 40,
  41. 'confirm_time' => date('Y-m-d H:i:s'),
  42. 'finish_time' => date('Y-m-d H:i:s'),
  43. ], ['id' => $order->id]);
  44. $order->setAttr('order_status', 40);
  45. $order->setAttr('confirm_time', date('Y-m-d H:i:s'));
  46. $order->setAttr('finish_time', date('Y-m-d H:i:s'));
  47. $order->setAttr('status_text', '已完成');
  48. }
  49. }
  50. }
  51. }
  52. }