request->getQueryParams(); $post = $this->request->getParsedBody(); $cookie = $this->request->getCookieParams(); $files = $this->request->getUploadedFiles(); $server = $this->request->getServerParams(); $xml = $this->request->getBody()->getContents(); $app['request'] = new Request($get,$post,[],$cookie,$files,$server,$xml); // 通知回调,进行业务处理 $response = $app->handlePaidNotify(function ($message, $fail) use ($app) { Db::beginTransaction(); try { // 支付失败或者通知失败 if ( empty($message) || $message['return_code'] != 'SUCCESS' || !isset($message['result_code']) || $message['result_code'] != 'SUCCESS' ) { $this->log->event( LogLabel::ORDER_OFFLINE_PAY_NOTIFY_LOG, $message ); Db::rollBack(); return $fail('Unknown error but FAIL'); } // 查询订单 $orderMain = OrderMain::query() ->where(['global_order_id' => $message['out_trade_no'],'type' => OrderType::ONLINE,'state' => OrderState::UNPAID]) ->first(); // 订单不存在 if (empty($orderMain)) { $this->log->event( LogLabel::ORDER_OFFLINE_PAY_NOTIFY_LOG, ['global_order_id_fail' => $message['out_trade_no']] ); Db::rollBack(); return true; } $this->orderOnlineService->doByPaid($orderMain->id); $this->separateAccountsService->orderOnlinePaid($orderMain->id); // 优惠券返券 $this->couponRebateService->couponRebateInTask($orderMain->id); // 喇叭通知,兼容旧音响,MQTT+IOT $res = $this->mqttService->speakToStore($orderMain->id); $res = $this->deviceService->pubMsgToStoreByOrderMainId($orderMain->id); // 公众号模板消息 $res = $this->miniprogramService->sendTemMsgForOnlineOrder($orderMain->id); // 打印订单,自动打印 $res = $this->feiePrintService->feiePrint($orderMain->id); Db::commit(); return true; } catch (Exception $e) { $this->log->event( LogLabel::ORDER_ONLINE_PAY_NOTIFY_LOG, ['exception_fail' => $e->getMessage()] ); Db::rollBack(); return $fail('Exception'); } }); return $this->response ->withHeader('Content-Type', 'text/xml') ->withStatus(200) ->withBody(new SwooleStream($response->getContent())); } public function wxminiOffline() { $config = config('wxpay'); $app = Factory::payment($config); $app['guzzle_handler'] = CoroutineHandler::class; $get = $this->request->getQueryParams(); $post = $this->request->getParsedBody(); $cookie = $this->request->getCookieParams(); $files = $this->request->getUploadedFiles(); $server = $this->request->getServerParams(); $xml = $this->request->getBody()->getContents(); $app['request'] = new Request($get,$post,[],$cookie,$files,$server,$xml); // 通知回调,进行业务处理 $response = $app->handlePaidNotify(function ($message, $fail) use ($app) { Db::beginTransaction(); try { // 支付失败或者通知失败 if ( empty($message) || $message['return_code'] != 'SUCCESS' || !isset($message['result_code']) || $message['result_code'] != 'SUCCESS' ) { $this->log->event( LogLabel::ORDER_OFFLINE_PAY_NOTIFY_LOG, $message ); Db::rollBack(); return $fail('Unknown error but FAIL'); } // 查询订单 $orderMain = OrderMain::query() ->where([ 'global_order_id' => $message['out_trade_no'], 'type' => OrderType::OFFLINE, 'state' => OrderState::UNPAID ]) ->first(); // 订单不存在 if (empty($orderMain)) { $this->log->event( LogLabel::ORDER_OFFLINE_PAY_NOTIFY_LOG, ['global_order_id_fail' => $message['out_trade_no']] ); Db::rollBack(); return true; } $orderPaid = $this->orderOfflineService->doPaid($orderMain->id); $separate = $this->separateAccountsService->orderOfflinePaid($orderMain->id); // 喇叭通知,兼容旧音响,MQTT+IOT $res = $this->mqttService->speakToStore($orderMain->id); $res = $this->deviceService->pubMsgToStoreByOrderMainId($orderMain->id); // 公众号模板消息 $res = $this->miniprogramService->sendTemMsgForOfflineOrder($orderMain->id); Db::commit(); return true; } catch (Exception $e) { $this->log->event( LogLabel::ORDER_OFFLINE_PAY_NOTIFY_LOG, ['exception_fail' => $e->getMessage()] ); Db::rollBack(); return $fail('Exception'); } }); return $this->response ->withHeader('Content-Type', 'text/xml') ->withStatus(200) ->withBody(new SwooleStream($response->getContent())); } }