createApp(); $server = $app->getServer(); $message = $server->getRequestMessage(); if (empty($message)){ Db::rollBack(); return $this->response->withStatus(500)->withBody(new SwooleStream(strval(json_encode(['code' => 'ERROR', 'message' => "回调数据为空"], JSON_UNESCAPED_UNICODE)))); } // 验证推送消息签名 $app->getValidator()->validate($app->getRequest()); Log::getInstance()->info("微信支付回调数据:" . json_encode($message,JSON_UNESCAPED_UNICODE)); if (empty($message['out_trade_no'])){ Db::rollBack(); Log::getInstance()->info("微信支付回调数据错误"); return $server->serve(); } dump($message); // 查询订单 $params = array(); $params['inquiry_no'] = $message['out_trade_no']; $order_inquiry = OrderInquiry::getOne($params); if (empty($order_inquiry)){ Db::rollBack(); Log::getInstance()->info("非法订单"); return $server->serve(); } dump(1); // 验证订单状态 if ($order_inquiry['inquiry_status'] != 1){ // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) Db::rollBack(); Log::getInstance()->info("订单状态错误:当前为" . $order_inquiry['inquiry_status']); return $server->serve(); } dump(2); // 支付状态无需验证,如第一次支付失败,会修改支付状态,再次支付时,会出现验证不通过的情况 // 修改支付状态 $data = array(); if ($message['trade_state'] == "SUCCESS"){ // 支付成功 $data['inquiry_pay_status'] = 2; $data['pay_time'] = date('Y-m-d H:i:s',strtotime($message['success_time']));// 支付时间 }elseif($message['trade_state'] == "CLOSED"){ // 已关闭 $data['inquiry_pay_status'] = 6; }elseif($message['trade_state'] == "REVOKED"){ // 已撤销(付款码支付) $data['inquiry_pay_status'] = 7; }elseif($message['trade_state'] == "USERPAYING"){ // 用户支付中(付款码支付) $data['inquiry_pay_status'] = 3; }elseif($message['trade_state'] == "PAYERROR"){ // 支付失败(其他原因,如银行返回失败) $data['inquiry_pay_status'] = 4; } $data['escrow_trade_no'] = $message['transaction_id']; $data['updated_at'] = date('Y-m-d H:i:s',time()); $params = array(); $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; OrderInquiry::edit($params,$data); dump(3); Db::commit(); return $server->serve(); }catch (\Exception $e) { // 验证失败 Db::rollBack(); Log::getInstance()->error("微信支付回调数据验证失败:" . $e->getMessage()); return $this->response->withStatus(500)->withBody(new SwooleStream(strval(json_encode(['code' => 'ERROR', 'message' => $e->getMessage()], JSON_UNESCAPED_UNICODE)))); } } // im回调 public function imCallBack(){ $request_params = $this->request->all(); Log::getInstance()->info(json_encode($request_params,JSON_UNESCAPED_UNICODE)); } }