PayNotify.php 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. <?php
  2. namespace addons\CloudStock\common\logic\order;
  3. use addons\CloudStock\common\enums\CloudStockEnum;
  4. use addons\CloudStock\common\events\order\FillOrderPaidEvent;
  5. use addons\CloudStock\common\models\CloudStockAgent;
  6. use addons\CloudStock\common\models\CloudStockFillOrder;
  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 = CloudStockFillOrder::find()
  23. // ->where(['trade_id' => $trade_info['trade_id'], 'order_no' => $trade_info['order_no'], 'is_pay' => CloudStockEnum::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 = CloudStockEnum::FILL_STATUS_PAY;
  28. $fill_order->payment_type = $trade_info['pay_type'];
  29. $res = $fill_order->save();
  30. if (false === $res) throw new \Exception($fill_order->getErrorMessage());
  31. $stock_agent = CloudStockAgent::findOne(['user_id'=>$fill_order['user_id'],'status'=>[StatusEnum::DISABLED,StatusEnum::ENABLED]]);
  32. if(!empty($stock_agent)){
  33. $stock_agent->fill_num+=$fill_order['num'];
  34. $stock_agent->save();
  35. }
  36. $t->commit();
  37. // 触发云库存订单支付事件
  38. $event = new FillOrderPaidEvent($fill_order->mall_id);
  39. $data = ['id' => $fill_order->id];
  40. \Yii::$app->services->events->dispatch($event, $data, $event->listeners);
  41. return true;
  42. } catch (\Exception $e) {
  43. $t->rollBack();
  44. $msg = '云库存支付回调处理失败:' . $e->getMessage() . ', file: ' . $e->getFile() . ', line: ' . $e->getLine();
  45. \Yii::error($msg);\Yii::getLogger()->flush(true);
  46. return false;
  47. }
  48. }
  49. }