增加了订单主表,修改了所有订单相关,支付相关代码

This commit is contained in:
2024-04-08 14:51:28 +08:00
parent c0f6fbca06
commit 944ab44305
21 changed files with 2044 additions and 742 deletions
+232 -252
View File
@@ -16,6 +16,7 @@ use App\Model\Coupon;
use App\Model\DetectionProject;
use App\Model\Hospital;
use App\Model\MessageIm;
use App\Model\Order;
use App\Model\OrderDetection;
use App\Model\OrderDetectionCase;
use App\Model\OrderDetectionRefund;
@@ -46,6 +47,7 @@ use App\Services\ImService;
use App\Services\InquiryService;
use App\Services\MessagePush;
use App\Services\OrderPrescriptionService;
use App\Services\OrderService;
use App\Services\UserCouponService;
use App\Services\UserService;
use App\Utils\Log;
@@ -88,19 +90,27 @@ class CallBackController extends AbstractController
return $this->response->withStatus(500)->withBody(new SwooleStream(strval(json_encode(['code' => 'ERROR', 'message' => "问诊微信支付回调数据为空"], JSON_UNESCAPED_UNICODE))));
}
Log::getInstance()->info("问诊微信支付回调数据:" . json_encode($message->toArray(), JSON_UNESCAPED_UNICODE));
Log::getInstance("CallBack-wxPayInquirySuccess")->info(json_encode($message->toArray(), JSON_UNESCAPED_UNICODE));
if (empty($message['out_trade_no'])) {
Log::getInstance()->info("问诊微信支付回调数据处理失败,缺少外部订单号");
Log::getInstance("CallBack-wxPayInquirySuccess")->error("问诊微信支付回调数据处理失败,缺少外部订单号");
return $server->serve();
}
} catch (\Exception $e) {
// 验证失败
Log::getInstance("CallBack-wxPayInquirySuccess")->error($e->getMessage());
return $this->wxPayErrorReturn($e->getMessage());
}
Db::beginTransaction();
try {
// 查询订单
$params = array();
$params['inquiry_no'] = $message['out_trade_no'];
$order_inquiry = OrderInquiry::getOne($params);
if (empty($order_inquiry)) {
Log::getInstance()->info("问诊微信支付回调数据处理失败,无订单数据");
Db::rollBack();
Log::getInstance("CallBack-wxPayInquirySuccess")->error("无订单数据");
return $server->serve();
}
@@ -109,60 +119,89 @@ class CallBackController extends AbstractController
$params['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
$order_inquiry_case = OrderInquiryCase::getOne($params);
if (empty($order_inquiry_case)){
Log::getInstance()->info("问诊微信支付回调数据处理失败,患者病例错误");
Db::rollBack();
Log::getInstance("CallBack-wxPayInquirySuccess")->error("患者病例错误");
return $server->serve();
}
// 验证订单状态
if ($order_inquiry['inquiry_status'] != 1) {
// 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消)
Log::getInstance()->info("问诊微信支付回调数据处理失败,订单状态当前为" . $order_inquiry['inquiry_status']);
Db::rollBack();
Log::getInstance("CallBack-wxPayInquirySuccess")->error("订单状态当前为" . $order_inquiry['inquiry_status']);
return $server->serve();
}
// 支付状态无需验证,如第一次支付失败,会修改支付状态,再次支付时,会出现验证不通过的情况
// 修改支付状态
$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']));// 支付时间
$pay_status = 2;
$pay_time = date('Y-m-d H:i:s', strtotime($message['success_time']));// 支付时间
if ($order_inquiry['inquiry_type'] == 1 || $order_inquiry['inquiry_type'] == 3) {
// 专家-公益
$data['inquiry_status'] = 3;// 3:待接诊
$inquiry_status = 3;// 3:待接诊
} elseif ($order_inquiry['inquiry_type'] == 2 || $order_inquiry['inquiry_type'] == 4) {
// 快速-购药
$data['inquiry_status'] = 2;// 2:待分配
$inquiry_status = 2;// 2:待分配
}
} elseif ($message['trade_state'] == "CLOSED") {
// 已关闭
$data['inquiry_pay_status'] = 6;
$pay_status = 6;
} elseif ($message['trade_state'] == "REVOKED") {
// 已撤销(付款码支付)
$data['inquiry_pay_status'] = 7;
$pay_status = 7;
} elseif ($message['trade_state'] == "USERPAYING") {
// 用户支付中(付款码支付)
$data['inquiry_pay_status'] = 3;
$pay_status = 3;
} elseif ($message['trade_state'] == "PAYERROR") {
// 支付失败(其他原因,如银行返回失败)
$data['inquiry_pay_status'] = 4;
$pay_status = 4;
}else{
Db::rollBack();
return $server->serve();
}
// 修改问诊订单表
$data = array();
if (isset($inquiry_status)){
$data['inquiry_status'] = $inquiry_status;
}
$data['inquiry_pay_status'] = $pay_status;
if (isset($pay_time)){
$data['pay_time'] = $pay_time;
}
$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);
// 修改订单表
$data = array();
$data['pay_status'] = $pay_status;
if (isset($pay_time)){
$data['pay_time'] = $pay_time;
}
$data['escrow_trade_no'] = $message['transaction_id'];
$data['updated_at'] = date('Y-m-d H:i:s', time());
$params = array();
$params['order_no'] = $order_inquiry['inquiry_no'];
Order::edit($params,$data);
Db::commit();
} catch (\Exception $e) {
// 验证失败
Log::getInstance()->error("问诊微信支付回调数据处理失败:" . $e->getMessage());
Db::rollBack();
Log::getInstance("CallBack-wxPayInquirySuccess")->error($e->getMessage());
return $this->wxPayErrorReturn($e->getMessage());
}
Log::getInstance()->info("问诊微信支付回调数据处理成功");
Log::getInstance()->info("问诊微信支付回调数据处理成功,开始分配医生/发送问诊消息");
Log::getInstance("CallBack-wxPayInquirySuccess")->info("成功");
Log::getInstance("CallBack-wxPayInquirySuccess")->info("分配医生/发送问诊消息");
try {
if ($message['trade_state'] == "SUCCESS") {
@@ -179,21 +218,21 @@ class CallBackController extends AbstractController
$producer = $this->container->get(Producer::class);
$res = $producer->produce($message);
if (!$res) {
Log::getInstance()->info("加入分配医生队列失败");
Log::getInstance("CallBack-wxPayInquirySuccess")->error("加入分配医生队列失败");
return $server->serve();
}
Log::getInstance()->info("加入分配医生队列成功");
Log::getInstance("CallBack-wxPayInquirySuccess")->info("加入分配医生队列成功");
} elseif ($order_inquiry['inquiry_type'] == 1 || $order_inquiry['inquiry_type'] == 3) {
// 专家-公益,发送im消息
Log::getInstance()->info("开始发送im消息");
Log::getInstance("CallBack-wxPayInquirySuccess")->info("开始发送im消息");
// 获取订单医生数据
$params = array();
$params['doctor_id'] = $order_inquiry['doctor_id'];
$user_doctor = UserDoctor::getOne($params);
if (empty($user_doctor)) {
Log::getInstance()->info("医生数据错误");
Log::getInstance("CallBack-wxPayInquirySuccess")->error("医生数据错误");
return $server->serve();
}
@@ -217,16 +256,16 @@ class CallBackController extends AbstractController
$producer = $this->container->get(Producer::class);
$producer->produce($message);
Log::getInstance()->info("发送im消息成功");
Log::getInstance("CallBack-wxPayInquirySuccess")->info("发送im消息成功");
}
}
} catch (\Exception $e) {
// 验证失败
Log::getInstance()->error("问诊微信支付回调数据处理成功,分配医生/发送问诊消息失败:" . $e->getMessage());
Log::getInstance("CallBack-wxPayInquirySuccess")->error("问诊微信支付回调数据处理成功,分配医生/发送问诊消息失败:" . $e->getMessage());
return $server->serve();
}
Log::getInstance()->info("问诊微信支付回调处理成功");
Log::getInstance("CallBack-wxPayInquirySuccess")->info("问诊微信支付回调处理成功");
return $server->serve();
}
@@ -240,8 +279,6 @@ class CallBackController extends AbstractController
*/
public function wxPayInquiryRefundCallBack(): ResponseInterface
{
Db::beginTransaction();
try {
// 处理支付结果事件
$WechatPay = new WechatPay(1, 1);
@@ -251,119 +288,73 @@ class CallBackController extends AbstractController
// 获取解密消息
$message = $server->getDecryptedMessage();
if (empty($message)) {
Db::rollBack();
return $this->response->withStatus(500)->withBody(new SwooleStream(strval(json_encode(['code' => 'ERROR', 'message' => "回调数据为空"], JSON_UNESCAPED_UNICODE))));
}
Log::getInstance("CallBackController-wxPayInquiryRefundCallBack")->info("微信退款回调数据:" . json_encode($message->toArray(), JSON_UNESCAPED_UNICODE));
Log::getInstance("CallBack-wxPayInquiryRefund")->info(json_encode($message->toArray(), JSON_UNESCAPED_UNICODE));
if (empty($message['out_trade_no'])) {
Log::getInstance("CallBackController-wxPayInquiryRefundCallBack")->info("微信退款回调数据错误");
Log::getInstance("CallBack-wxPayInquiryRefund")->error("微信退款回调数据错误");
return $server->serve();
}
} catch (\Exception $e) {
// 验证失败
Log::getInstance("CallBack-wxPayInquiryRefund")->error($e->getMessage());
return $this->wxPayErrorReturn($e->getMessage());
}
Db::beginTransaction();
try {
// 验证订单数据
$params = array();
$params['inquiry_no'] = $message['out_trade_no'];
$order_inquiry = OrderInquiry::getOne($params);
if (empty($order_inquiry)) {
Log::getInstance("CallBackController-wxPayInquiryRefundCallBack")->info("非法订单");
Db::rollBack();
Log::getInstance("CallBack-wxPayInquiryRefund")->error("非法订单");
return $server->serve();
}
// 验证订单状态
if ($order_inquiry['inquiry_status'] == 1) {
// 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消)
Log::getInstance("CallBackController-wxPayInquiryRefundCallBack")->info("订单状态错误:当前为" . $order_inquiry['inquiry_status']);
Db::rollBack();
Log::getInstance("CallBack-wxPayInquiryRefund")->error("订单状态错误:当前为" . $order_inquiry['inquiry_status']);
return $server->serve();
}
// 验证订单退款状态
if ($order_inquiry['inquiry_refund_status'] == 3) {
// 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭)
Log::getInstance("CallBackController-wxPayInquiryRefundCallBack")->info("订单退款状态错误:当前为" . $order_inquiry['inquiry_refund_status']);
Db::rollBack();
Log::getInstance("CallBack-wxPayInquiryRefund")->error("订单退款状态错误:当前为" . $order_inquiry['inquiry_refund_status']);
return $server->serve();
}
// 验证订单支付状态
if (in_array($order_inquiry['inquiry_pay_status'], [1, 3, 4, 5, 6, 7])) {
// 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款)
Log::getInstance("CallBackController-wxPayInquiryRefundCallBack")->info("订单支付状态错误:当前为" . $order_inquiry['inquiry_pay_status']);
Db::rollBack();
Log::getInstance("CallBack-wxPayInquiryRefund")->error("订单支付状态错误:当前为" . $order_inquiry['inquiry_pay_status']);
return $server->serve();
}
// 退款状态
if ($message['refund_status'] == "SUCCESS") {
// 退款成功
$inquiry_refund_status = 3;
} elseif ($message['refund_status'] == "CLOSED") {
// 退款关闭
$inquiry_refund_status = 5;
} elseif ($message['refund_status'] == "ABNORMAL") {
// 退款异常
$inquiry_refund_status = 6;
}
if (empty($inquiry_refund_status)) {
// 错误,无退款状态
Log::getInstance("CallBackController-wxPayInquiryRefundCallBack")->info("订单支付状态错误:未接收到退款状态");
return $this->wxPayErrorReturn("退款状态错误");
}
// 修改订单
$data = array();
$data['inquiry_refund_status'] = $inquiry_refund_status;
$params = array();
$params['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
OrderInquiry::edit($params, $data);
// 修改退款订单
$data = array();
$data['inquiry_refund_status'] = $inquiry_refund_status;
$data['success_time'] = $message['success_time'];
$params = array();
$params['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
OrderInquiryRefund::edit($params, $data);
// 恢复优惠卷
if ($inquiry_refund_status == 3) {
if (!empty($order_inquiry['coupon_amount_total']) && $order_inquiry['coupon_amount_total'] > 0) {
// 获取该订单全部优惠卷数据
$params = array();
$params['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
$order_inquiry_coupons = OrderInquiryCoupon::getList($params);
if (!empty($order_inquiry_coupons)){
$userCouponService = new UserCouponService();
foreach ($order_inquiry_coupons as $order_inquiry_coupon){
// 退还优惠卷
$userCouponService->returnUserCoupon($order_inquiry_coupon['user_coupon_id']);
try {
// 发送站内消息-优惠卷退还
$MessagePush = new MessagePush($order_inquiry['user_id']);
$MessagePush->patientRefundCoupon($order_inquiry_coupon['coupon_name']);
}catch (\Throwable $e){
Log::getInstance("CallBackController-wxPayInquiryRefundCallBack")->error("推送消息失败:" . $e->getMessage());
}
}
}
}
}
// 处理退款回调结果
$OrderService = new OrderService();
$OrderService->orderRefundResult($order_inquiry['inquiry_no'],$message['refund_status'],$message['success_time']);
Db::commit();
} catch (\Exception $e) {
// 验证失败
Db::rollBack();
Log::getInstance()->error("微信支付回调数据验证失败:" . $e->getMessage());
Log::getInstance("CallBack-wxPayInquiryRefund")->error("微信支付回调数据验证失败:" . $e->getMessage());
return $this->wxPayErrorReturn($e->getMessage());
}
Log::getInstance()->info("微信退款回调处理成功,推送消息");
Log::getInstance("CallBack-wxPayInquiryRefund")->info("微信退款回调处理成功,推送消息");
// 发送推送消息
if ($inquiry_refund_status == 3) {
if ($message['refund_status'] == "SUCCESS") {
try {
// 发送站内、订阅、短信消息-问诊服务退款成功
$MessagePush = new MessagePush($order_inquiry['user_id'], $order_inquiry['order_inquiry_id']);
@@ -372,7 +363,7 @@ class CallBackController extends AbstractController
$MessagePush->refundInquirySuccess($order_inquiry['cancel_reason']);
} catch (\Exception $e) {
// 验证失败
Log::getInstance()->error("微信退款回调处理成功,推送消息失败:" . $e->getMessage());
Log::getInstance("CallBack-wxPayInquiryRefund")->error("微信退款回调处理成功,推送消息失败:" . $e->getMessage());
return $server->serve();
}
}
@@ -399,19 +390,19 @@ class CallBackController extends AbstractController
return $this->response->withStatus(500)->withBody(new SwooleStream(strval(json_encode(['code' => 'ERROR', 'message' => "药品微信支付回调数据为空"], JSON_UNESCAPED_UNICODE))));
}
Log::getInstance()->info("药品微信支付回调数据:" . json_encode($message->toArray(), JSON_UNESCAPED_UNICODE));
Log::getInstance("CallBack-wxPayProductSuccess")->info(json_encode($message->toArray(), JSON_UNESCAPED_UNICODE));
if (empty($message['out_trade_no'])) {
Log::getInstance()->info("药品微信支付回调数据处理失败,缺少外部订单号");
Log::getInstance("CallBack-wxPayProductSuccess")->error("缺少外部订单号");
return $server->serve();
}
} catch (\Exception $e) {
// 验证失败
Log::getInstance()->error("药品微信支付回调数据处理失败:" . $e->getMessage());
Log::getInstance("CallBack-wxPayProductSuccess")->error($e->getMessage());
return $this->wxPayErrorReturn($e->getMessage());
}
Log::getInstance()->info("药品微信支付回调数据验证成功,执行数据库操作");
Log::getInstance("CallBack-wxPayProductSuccess")->info("药品微信支付回调数据验证成功,执行数据库操作");
Db::beginTransaction();
@@ -422,7 +413,7 @@ class CallBackController extends AbstractController
$order_product = OrderProduct::getOne($params);
if (empty($order_product)) {
Db::rollBack();
Log::getInstance()->info("药品微信支付回调数据处理失败,无订单数据");
Log::getInstance("CallBack-wxPayProductSuccess")->error("无订单数据");
return $server->serve();
}
@@ -430,34 +421,44 @@ class CallBackController extends AbstractController
if ($order_product['order_product_status'] != 1) {
Db::rollBack();
// 订单状态(1:待支付 2:待发货 3:已发货 4:已签收 5:已取消)
Log::getInstance()->info("药品微信支付回调数据处理失败,订单状态当前为" . $order_product['order_product_status']);
Log::getInstance("CallBack-wxPayProductSuccess")->error("药品微信支付回调数据处理失败,订单状态当前为" . $order_product['order_product_status']);
return $server->serve();
}
// 支付状态无需验证,如第一次支付失败,会修改支付状态,再次支付时,会出现验证不通过的情况
// 修改支付状态
$data = array();
// 处理支付状态
if ($message['trade_state'] == "SUCCESS") {
// 支付成功
$data['order_product_status'] = 2;
$data['pay_status'] = 2;// 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款)
$data['pay_time'] = date('Y-m-d H:i:s', strtotime($message['success_time']));// 支付时间
$order_product_status = 2;
$pay_status = 2;// 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款)
$pay_time = date('Y-m-d H:i:s', strtotime($message['success_time']));// 支付时间
} elseif ($message['trade_state'] == "CLOSED") {
// 已关闭
$data['pay_status'] = 6;
$pay_status = 6;
} elseif ($message['trade_state'] == "REVOKED") {
// 已撤销(付款码支付)
$data['pay_status'] = 7;
$pay_status = 7;
} elseif ($message['trade_state'] == "USERPAYING") {
// 用户支付中(付款码支付)
$data['pay_status'] = 3;
$pay_status = 3;
} elseif ($message['trade_state'] == "PAYERROR") {
// 支付失败(其他原因,如银行返回失败)
$data['pay_status'] = 4;
$pay_status = 4;
} else {
Db::rollBack();
return $server->serve();
}
// 修改药品订单表
$data = array();
if (isset($order_product_status)){
$data['order_product_status'] = $order_product_status;
}
if (isset($pay_time)){
$data['pay_time'] = $pay_time;
}
$data['pay_status'] = $pay_status;
$data['escrow_trade_no'] = $message['transaction_id'];
$data['updated_at'] = date('Y-m-d H:i:s', time());
@@ -465,24 +466,37 @@ class CallBackController extends AbstractController
$params['order_product_id'] = $order_product['order_product_id'];
OrderProduct::edit($params, $data);
// 修改订单表
$data = array();
$data['pay_status'] = $pay_status;
if (isset($pay_time)){
$data['pay_time'] = $pay_time;
}
$data['escrow_trade_no'] = $message['transaction_id'];
$data['updated_at'] = date('Y-m-d H:i:s', time());
$params = array();
$params['order_no'] = $order_product['order_product_no'];
Order::edit($params,$data);
// 获取订单商品订单列表
$params = array();
$params['order_product_id'] = $order_product['order_product_id'];
$order_product_item = OrderProductItem::getList($params);
if (empty($order_product_item)) {
Db::rollBack();
Log::getInstance()->info("药品微信支付回调数据处理失败,未查询到对应订单商品订单列表");
Log::getInstance("CallBack-wxPayProductSuccess")->error("未查询到对应订单商品订单列表");
return $server->serve();
}
Db::commit();
} catch (\Exception $e) {
Db::rollBack();
Log::getInstance()->error("药品微信支付回调数据处理失败:" . $e->getMessage());
Log::getInstance("CallBack-wxPayProductSuccess")->error("药品微信支付回调数据处理失败:" . $e->getMessage());
return $this->wxPayErrorReturn($e->getMessage());
}
Log::getInstance()->error("药品微信支付回调数据处理成功");
Log::getInstance("CallBack-wxPayProductSuccess")->error("药品微信支付回调数据处理成功");
try {
// 再次发放优惠卷数据
@@ -514,10 +528,10 @@ class CallBackController extends AbstractController
$producer = $this->container->get(Producer::class);
$res = $producer->produce($message);
if (!$res) {
Log::getInstance()->error("再次发放优惠卷失败");
Log::getInstance("CallBack-wxPayProductSuccess")->error("再次发放优惠卷失败");
}
Log::getInstance()->info("再次发放优惠卷成功");
Log::getInstance("CallBack-wxPayProductSuccess")->info("再次发放优惠卷成功");
}
}
}
@@ -525,7 +539,7 @@ class CallBackController extends AbstractController
}
}
}catch (\Throwable $e){
Log::getInstance()->error("药品微信支付回调数据处理失败:" . $e->getMessage());
Log::getInstance("CallBack-wxPayProductSuccess")->error("药品微信支付回调数据处理失败:" . $e->getMessage());
}
return $server->serve();
}
@@ -539,8 +553,6 @@ class CallBackController extends AbstractController
*/
public function wxPayProductRefundCallBack(): ResponseInterface
{
Db::beginTransaction();
try {
// 处理支付结果事件
$WechatPay = new WechatPay(1, 2);
@@ -554,20 +566,27 @@ class CallBackController extends AbstractController
return $this->response->withStatus(500)->withBody(new SwooleStream(strval(json_encode(['code' => 'ERROR', 'message' => "回调数据为空"], JSON_UNESCAPED_UNICODE))));
}
Log::getInstance("CallBackController-wxPayProductRefundCallBack")->info("微信退款回调数据:" . json_encode($message->toArray(), JSON_UNESCAPED_UNICODE));
Log::getInstance("CallBack-wxPayProductRefund")->info(json_encode($message->toArray(), JSON_UNESCAPED_UNICODE));
if (empty($message['out_trade_no'])) {
Log::getInstance("CallBackController-wxPayProductRefundCallBack")->info("药品微信退款回调数据处理失败,缺少外部订单号");
Log::getInstance("CallBack-wxPayProductRefund")->error("缺少外部订单号");
return $server->serve();
}
} catch (\Exception $e) {
// 验证失败
Log::getInstance("CallBack-wxPayProductRefund")->error($e->getMessage());
return $this->wxPayErrorReturn($e->getMessage());
}
Db::beginTransaction();
try {
// 查询药品订单
$params = array();
$params['order_product_no'] = $message['out_trade_no'];
$order_product = OrderProduct::getOne($params);
if (empty($order_product)) {
Db::rollBack();
Log::getInstance("CallBackController-wxPayProductRefundCallBack")->info("药品微信退款回调数据处理失败,无订单数据");
Log::getInstance("CallBack-wxPayProductRefund")->error("无订单数据");
return $server->serve();
}
@@ -577,100 +596,47 @@ class CallBackController extends AbstractController
$user_patient = UserPatient::getOne($params);
if (empty($user_patient)) {
Db::rollBack();
Log::getInstance("CallBackController-wxPayProductRefundCallBack")->info("药品微信退款回调数据处理失败,无患者数据");
Log::getInstance("CallBack-wxPayProductRefund")->info("无患者数据");
return $server->serve();
}
// 验证订单状态
if ($order_product['order_product_status'] == 1) {
// 订单状态(1:待支付 2:待发货 3:已发货 4:已签收 5:已取消)
Log::getInstance("CallBackController-wxPayProductRefundCallBack")->info("药品微信退款回调数据处理失败,订单状态错误:当前为" . $order_product['order_product_status']);
Db::rollBack();
Log::getInstance("CallBack-wxPayProductRefund")->error("药品微信退款回调数据处理失败,订单状态错误:当前为" . $order_product['order_product_status']);
return $server->serve();
}
// 验证订单退款状态
if ($order_product['refund_status'] == 3) {
// 商品订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭)
Log::getInstance("CallBackController-wxPayProductRefundCallBack")->info("药品微信退款回调数据处理失败,订单退款状态为" . $order_product['refund_status']);
Db::rollBack();
Log::getInstance("CallBack-wxPayProductRefund")->error("药品微信退款回调数据处理失败,订单退款状态为" . $order_product['refund_status']);
return $server->serve();
}
// 验证订单支付状态
if (in_array($order_product['pay_status'], [1, 3, 4, 5, 6, 7])) {
// 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款)
Log::getInstance("CallBackController-wxPayProductRefundCallBack")->error("药品微信退款回调数据处理失败:订单未支付");
Db::rollBack();
Log::getInstance("CallBack-wxPayProductRefund")->error("订单未支付");
return $server->serve();
}
// 退款状态
if ($message['refund_status'] == "SUCCESS") {
// 退款成功
$refund_status = 3;
} elseif ($message['refund_status'] == "CLOSED") {
// 退款关闭
$refund_status = 5;
} elseif ($message['refund_status'] == "ABNORMAL") {
// 退款异常
$refund_status = 6;
}
if (empty($refund_status)) {
// 错误,无退款状态
Log::getInstance("CallBackController-wxPayProductRefundCallBack")->error("药品微信退款回调数据处理失败:订单未支付");
return $this->wxPayErrorReturn("退款状态错误");
}
// 修改订单
$data = array();
$data['refund_status'] = $refund_status;
$params = array();
$params['order_product_id'] = $order_product['order_product_id'];
OrderProduct::edit($params, $data);
// 修改退款订单
$data = array();
$data['product_refund_status'] = $refund_status;
$data['success_time'] = $message['success_time'];
$params = array();
$params['order_product_id'] = $order_product['order_product_id'];
OrderProductRefund::edit($params, $data);
// 恢复优惠卷
if ($refund_status == 3) {
if (!empty($order_product['coupon_amount_total']) && $order_product['coupon_amount_total'] > 0) {
// 获取该订单全部优惠卷数据
$params = array();
$params['order_product_id'] = $order_product['order_product_id'];
$order_product_coupons = OrderProductCoupon::getList($params);
if (!empty($order_product_coupons)){
$userCouponService = new UserCouponService();
foreach ($order_product_coupons as $order_product_coupon){
// 退还优惠卷
$userCouponService->returnUserCoupon($order_product_coupon['user_coupon_id']);
// 发送站内消息-优惠卷退还
try {
$MessagePush = new MessagePush($user_patient['user_id']);
$MessagePush->patientRefundCoupon($order_product_coupon['coupon_name']);
}catch (\Throwable $e){
Log::getInstance("CallBackController-wxPayProductRefundCallBack")->error("推送消息失败:" . $e->getMessage());
}
}
}
}
}
// 处理退款回调结果
$OrderService = new OrderService();
$OrderService->orderRefundResult($order_product['order_product_no'],$message['refund_status'],$message['success_time']);
Db::commit();
} catch (\Exception $e) {
// 验证失败
Db::rollBack();
Log::getInstance("CallBackController-wxPayProductRefundCallBack")->error("药品微信退款回调数据处理失败:" . $e->getMessage());
Log::getInstance("CallBack-wxPayProductRefund")->error("药品微信退款回调数据处理失败:" . $e->getMessage());
return $this->wxPayErrorReturn($e->getMessage());
}
Log::getInstance("CallBackController-wxPayProductRefundCallBack")->info("药品微信退款回调数据处理成功");
Log::getInstance("CallBack-wxPayProductRefund")->info("药品微信退款回调数据处理成功");
// 发送推送消息
try {
@@ -685,11 +651,10 @@ class CallBackController extends AbstractController
}
} catch (\Exception $e) {
// 验证失败
Log::getInstance("CallBackController-wxPayProductRefundCallBack")->error("微信退款回调处理成功,推送消息失败:" . $e->getMessage());
Log::getInstance("CallBack-wxPayProductRefund")->error("微信退款回调处理成功,推送消息失败:" . $e->getMessage());
return $server->serve();
}
// 告知处方平台
return $server->serve();
}
@@ -1159,54 +1124,75 @@ class CallBackController extends AbstractController
return $this->response->withStatus(500)->withBody(new SwooleStream(strval(json_encode(['code' => 'ERROR', 'message' => "问诊微信支付回调数据为空"], JSON_UNESCAPED_UNICODE))));
}
Log::getInstance()->info("检测微信支付回调数据:" . json_encode($message->toArray(), JSON_UNESCAPED_UNICODE));
Log::getInstance("CallBack-xPayDetectionSuccess")->info(json_encode($message->toArray(), JSON_UNESCAPED_UNICODE));
if (empty($message['out_trade_no'])) {
Log::getInstance()->info("检测微信支付回调数据处理失败,缺少外部订单号");
Log::getInstance("CallBack-xPayDetectionSuccess")->error("缺少外部订单号");
return $server->serve();
}
}catch (\Throwable $e){
// 验证失败
Log::getInstance("CallBack-xPayDetectionSuccess")->error($e->getMessage());
return $this->wxPayErrorReturn($e->getMessage());
}
Db::beginTransaction();
try {
// 查询订单
$params = array();
$params['detection_no'] = $message['out_trade_no'];
$order_detection = OrderDetection::getOne($params);
if (empty($order_detection)) {
Log::getInstance()->info("检测微信支付回调数据处理失败,无订单数据");
Db::rollBack();
Log::getInstance("CallBack-xPayDetectionSuccess")->info("无订单数据");
return $server->serve();
}
// 验证订单状态
if ($order_detection['detection_status'] != 1) {
// 检测订单状态(1:待支付 2:待绑定 3:检测中 4:检测完成 5:已取消)
Log::getInstance()->info("检测微信支付回调数据处理失败,订单状态当前为" . $order_detection['detection_status']);
Db::rollBack();
Log::getInstance("CallBack-xPayDetectionSuccess")->error("检测微信支付回调数据处理失败,订单状态当前为" . $order_detection['detection_status']);
return $server->serve();
}
// 支付状态无需验证,如第一次支付失败,会修改支付状态,再次支付时,会出现验证不通过的情况
// 修改支付状态
$data = array();
// 处理支付状态
if ($message['trade_state'] == "SUCCESS") {
// 支付成功
$data['detection_pay_status'] = 2;
$data['pay_time'] = date('Y-m-d H:i:s', strtotime($message['success_time']));// 支付时间
$data['detection_status'] = 2;// 2:待绑定
$pay_status = 2;
$pay_time = date('Y-m-d H:i:s', strtotime($message['success_time']));// 支付时间
$detection_status = 2;// 2:待绑定
if (empty($message['amount'])){
Log::getInstance()->error("检测微信支付回调数据处理失败:无支付金额");
return $this->wxPayErrorReturn("检测微信支付回调数据处理失败:无支付金额");
Db::rollBack();
Log::getInstance("CallBack-xPayDetectionSuccess")->error("无支付金额");
return $this->wxPayErrorReturn("无支付金额");
}
} elseif ($message['trade_state'] == "CLOSED") {
// 已关闭
$data['detection_pay_status'] = 6;
$pay_status = 6;
} elseif ($message['trade_state'] == "REVOKED") {
// 已撤销(付款码支付)
$data['detection_pay_status'] = 7;
$pay_status = 7;
} elseif ($message['trade_state'] == "USERPAYING") {
// 用户支付中(付款码支付)
$data['detection_pay_status'] = 3;
$pay_status = 3;
} elseif ($message['trade_state'] == "PAYERROR") {
// 支付失败(其他原因,如银行返回失败)
$data['detection_pay_status'] = 4;
$pay_status = 4;
} else {
Db::rollBack();
return $server->serve();
}
$data = array();
$data['detection_pay_status'] = $pay_status;
if (isset($detection_status)){
$data['detection_status'] = $detection_status;
}
if (isset($pay_time)){
$data['pay_time'] = $pay_time;
}
$data['escrow_trade_no'] = $message['transaction_id'];
@@ -1215,13 +1201,29 @@ class CallBackController extends AbstractController
$params = array();
$params['order_detection_id'] = $order_detection['order_detection_id'];
OrderDetection::editOrderDetection($params, $data);
// 修改订单表
$data = array();
$data['pay_status'] = $pay_status;
if (isset($pay_time)){
$data['pay_time'] = $pay_time;
}
$data['escrow_trade_no'] = $message['transaction_id'];
$data['updated_at'] = date('Y-m-d H:i:s', time());
$params = array();
$params['order_no'] = $order_detection['detection_no'];
Order::edit($params,$data);
Db::commit();
} catch (\Exception $e) {
// 验证失败
Log::getInstance()->error("问诊微信支付回调数据处理失败:" . $e->getMessage());
Db::rollBack();
Log::getInstance("CallBack-xPayDetectionSuccess")->error("问诊微信支付回调数据处理失败:" . $e->getMessage());
return $this->wxPayErrorReturn($e->getMessage());
}
Log::getInstance()->info("检测微信支付回调处理成功");
Log::getInstance("CallBack-xPayDetectionSuccess")->info("检测微信支付回调处理成功");
return $server->serve();
}
@@ -1235,8 +1237,6 @@ class CallBackController extends AbstractController
*/
public function wxPayDetectionRefundCallBack(): ResponseInterface
{
Db::beginTransaction();
try {
// 处理支付结果事件
$WechatPay = new WechatPay(1, 1);
@@ -1250,87 +1250,67 @@ class CallBackController extends AbstractController
return $this->response->withStatus(500)->withBody(new SwooleStream(strval(json_encode(['code' => 'ERROR', 'message' => "回调数据为空"], JSON_UNESCAPED_UNICODE))));
}
Log::getInstance()->info("微信退款回调数据:" . json_encode($message->toArray(), JSON_UNESCAPED_UNICODE));
Log::getInstance("CallBack-wxPayDetectionRefund")->info(json_encode($message->toArray(), JSON_UNESCAPED_UNICODE));
if (empty($message['out_trade_no'])) {
Log::getInstance()->info("微信退款回调数据错误");
Log::getInstance("CallBack-wxPayDetectionRefund")->error("缺少外部订单号");
return $server->serve();
}
} catch (\Exception $e) {
// 验证失败
Log::getInstance("CallBack-wxPayDetectionRefund")->error($e->getMessage());
return $this->wxPayErrorReturn($e->getMessage());
}
Db::beginTransaction();
try {
// 验证订单数据
$params = array();
$params['detection_no'] = $message['out_trade_no'];
$order_detection = OrderDetection::getOne($params);
if (empty($order_detection)) {
Log::getInstance()->info("非法订单");
Db::rollBack();
Log::getInstance("CallBack-wxPayDetectionRefund")->error("非法订单");
return $server->serve();
}
// 验证订单状态
if ($order_detection['detection_status'] == 1) {
// 检测订单状态(1:待支付 2:待绑定 3:检测中 4:检测完成 5:已取消)
Log::getInstance()->info("订单状态错误:当前为" . $order_detection['detection_status']);
Db::rollBack();
Log::getInstance("CallBack-wxPayDetectionRefund")->error("订单状态错误:当前为" . $order_detection['detection_status']);
return $server->serve();
}
// 验证订单退款状态
if ($order_detection['detection_refund_status'] == 3) {
// 检测订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常)
Log::getInstance()->info("订单退款状态错误:当前为" . $order_detection['detection_refund_status']);
Db::rollBack();
Log::getInstance("CallBack-wxPayDetectionRefund")->error("订单退款状态错误:当前为" . $order_detection['detection_refund_status']);
return $server->serve();
}
// 验证订单支付状态
if (in_array($order_detection['detection_pay_status'], [1, 3, 4, 5, 6, 7])) {
// 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款)
Log::getInstance()->info("订单支付状态错误:当前为" . $order_detection['detection_pay_status']);
Db::rollBack();
Log::getInstance("CallBack-wxPayDetectionRefund")->error("订单支付状态错误:当前为" . $order_detection['detection_pay_status']);
return $server->serve();
}
// 退款状态
if ($message['refund_status'] == "SUCCESS") {
// 退款成功
$detection_refund_status = 3;
} elseif ($message['refund_status'] == "CLOSED") {
// 退款关闭
$detection_refund_status = 5;
} elseif ($message['refund_status'] == "ABNORMAL") {
// 退款异常
$detection_refund_status = 6;
}
if (empty($detection_refund_status)) {
// 错误,无退款状态
Log::getInstance()->error("队列执行失败原因:订单未支付");
return $this->wxPayErrorReturn("退款状态错误");
}
// 修改订单
$data = array();
$data['detection_refund_status'] = $detection_refund_status;
$params = array();
$params['order_detection_id'] = $order_detection['order_detection_id'];
OrderDetection::editOrderDetection($params, $data);
// 修改退款订单
$data = array();
$data['detection_refund_status'] = $detection_refund_status;
$data['success_time'] = $message['success_time'];
$params = array();
$params['order_detection_id'] = $order_detection['order_detection_id'];
OrderDetectionRefund::edit($params, $data);
// 处理退款回调结果
$OrderService = new OrderService();
$OrderService->orderRefundResult($order_detection['detection_no'],$message['refund_status'],$message['success_time']);
Db::commit();
} catch (\Exception $e) {
// 验证失败
Db::rollBack();
Log::getInstance()->error("微信支付回调数据验证失败:" . $e->getMessage());
Log::getInstance("CallBack-wxPayDetectionRefund")->error("微信支付回调数据验证失败:" . $e->getMessage());
return $this->wxPayErrorReturn($e->getMessage());
}
Log::getInstance()->info("微信退款回调处理成功");
Log::getInstance("CallBack-wxPayDetectionRefund")->info("微信退款回调处理成功");
return $server->serve();
}