| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- <?php
- namespace addons\CloudStock\common\logic\order;
- use addons\CloudStock\common\enums\CloudStockEnum;
- use addons\CloudStock\common\events\order\FillOrderPaidEvent;
- use addons\CloudStock\common\models\CloudStockAgent;
- use addons\CloudStock\common\models\CloudStockFillOrder;
- use common\enums\StatusEnum;
- use common\helpers\ArrayHelper;
- class PayNotify
- {
- /**
- * @name:
- * @msg: 云库存支付回调
- * @param array $trade_info qimall_payment_trade_order 表数据
- * @return bool
- */
- public function notify($trade_info)
- {
- $t = \Yii::$app->db->beginTransaction();
- try {
- if (empty($trade_info)) throw new \Exception('传递进来的流水数据为空');
- $fill_order = CloudStockFillOrder::find()
- // ->where(['trade_id' => $trade_info['trade_id'], 'order_no' => $trade_info['order_no'], 'is_pay' => CloudStockEnum::FILL_STATUS_NOT_PAY])
- ->where(['trade_id' => $trade_info['trade_id'], 'order_no' => $trade_info['order_no']])
- ->one();
- if (empty($fill_order)) throw new \Exception('云库存订单不存在或者已经支付。trade_info => ' . json_encode(ArrayHelper::toArray($trade_info), JSON_UNESCAPED_UNICODE));
- $fill_order->is_pay = CloudStockEnum::FILL_STATUS_PAY;
- $fill_order->payment_type = $trade_info['pay_type'];
- $res = $fill_order->save();
- if (false === $res) throw new \Exception($fill_order->getErrorMessage());
- $stock_agent = CloudStockAgent::findOne(['user_id'=>$fill_order['user_id'],'status'=>[StatusEnum::DISABLED,StatusEnum::ENABLED]]);
- if(!empty($stock_agent)){
- $stock_agent->fill_num+=$fill_order['num'];
- $stock_agent->save();
- }
- $t->commit();
- // 触发云库存订单支付事件
- $event = new FillOrderPaidEvent($fill_order->mall_id);
- $data = ['id' => $fill_order->id];
- \Yii::$app->services->events->dispatch($event, $data, $event->listeners);
- return true;
- } catch (\Exception $e) {
- $t->rollBack();
- $msg = '云库存支付回调处理失败:' . $e->getMessage() . ', file: ' . $e->getFile() . ', line: ' . $e->getLine();
- \Yii::error($msg);\Yii::getLogger()->flush(true);
- return false;
- }
- }
- }
|