PayNotify.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. <?php
  2. namespace addons\CloudStockTwo\common\logic\order;
  3. use addons\CloudStockTwo\common\enums\CloudStockTwoEnum;
  4. use addons\CloudStockTwo\common\events\order\FillOrderPaidEvent;
  5. use addons\CloudStockTwo\common\models\CloudStockTwoAgent;
  6. use addons\CloudStockTwo\common\models\CloudStockTwoFillOrder;
  7. use common\enums\StatusEnum;
  8. use common\helpers\ArrayHelper;
  9. class PayNotify
  10. {
  11. /**
  12. * @name:
  13. * @msg: 云库存支付回调
  14. * @param array $trade_info qimall_payment_trade_order 表数据
  15. * @return bool
  16. */
  17. public function notify($trade_info)
  18. {
  19. $t = \Yii::$app->db->beginTransaction();
  20. try {
  21. if (empty($trade_info)) throw new \Exception('传递进来的流水数据为空');
  22. $fill_order = CloudStockTwoFillOrder::find()
  23. // ->where(['trade_id' => $trade_info['trade_id'], 'order_no' => $trade_info['order_no'], 'is_pay' => CloudStockTwoEnum::FILL_STATUS_NOT_PAY])
  24. ->where(['trade_id' => $trade_info['trade_id'], 'order_no' => $trade_info['order_no']])
  25. ->one();
  26. if (empty($fill_order)) throw new \Exception('云库存订单不存在或者已经支付。trade_info => ' . json_encode(ArrayHelper::toArray($trade_info), JSON_UNESCAPED_UNICODE));
  27. $fill_order->is_pay = CloudStockTwoEnum::FILL_STATUS_PAY;
  28. $res = $fill_order->save();
  29. if (false === $res) throw new \Exception($fill_order->getErrorMessage());
  30. $stock_agent = CloudStockTwoAgent::findOne(['user_id'=>$fill_order['user_id'],'status'=>[StatusEnum::DISABLED,StatusEnum::ENABLED]]);
  31. if(!empty($stock_agent)){
  32. $stock_agent->fill_num+=$fill_order['num'];
  33. $stock_agent->save();
  34. }
  35. $t->commit();
  36. // 触发云库存订单支付事件
  37. $event = new FillOrderPaidEvent($fill_order->mall_id);
  38. $data = ['id' => $fill_order->id];
  39. \Yii::$app->services->events->dispatch($event, $data, $event->listeners);
  40. return true;
  41. } catch (\Exception $e) {
  42. $t->rollBack();
  43. $msg = '云库存支付回调处理失败:' . $e->getMessage() . ', file: ' . $e->getFile() . ', line: ' . $e->getLine();
  44. \Yii::error($msg);\Yii::getLogger()->flush(true);
  45. return false;
  46. }
  47. }
  48. }