response->format = Response::FORMAT_RAW; $content = file_get_contents('php://input'); $callback = new Callback(); $callback->content = $content; $callback->type = 'eplpay_order'; $callback->save(); $data = json_decode($content, true); if(!isset($data['payState']) || $data['payState'] == '01'){ //支付失败 return Json::encode([ 'returnCode' => '0001', 'returnMsg' => '支付失败' ]); } $t = \Yii::$app->db->beginTransaction(); try { $out_trade_no = $data['outTradeNo']; $paymentProductOrder = PaymentProductOrder::find()->where([ 'pay_order_no' => $out_trade_no ])->one(); if($paymentProductOrder){ // 产品订单 $data['pay_order_no'] = $out_trade_no; $data['order_no'] = $paymentProductOrder->order_no; $data['transaction_id'] =$data['transactionNo']; $data['pay_type'] = 2; $productOrderPayForm = new ProductOrderSubmitForm(); $order = $productOrderPayForm->paid($data); $order_type=1; } else { // 挂号订单 $PaymentRegister=PaymentRegister::find()->where([ 'pay_order_no' => $out_trade_no ])->one(); if (!$PaymentRegister){ throw new Exception('订单不存在'); } $data['order_no']= $PaymentRegister->order_no; $data['transaction_id'] =$data['transactionNo']; $data['pay_type'] = 2; $RegisterSubmitForm = new RegisterSubmitForm(); $order = $RegisterSubmitForm->paid($data); $order_type=2; } // 增加流水记录 $fundWater = new FundWater(); $fundWater->store_id = $order->store_id; // 入账 $fundWater->type = 'enter'; // 入账 $fundWater->order_type = $order_type; $fundWater->order_id = $order->id; $fundWater->user_id = $order->user_id; $fundWater->service_user_id = $order_type==1?$order->su_id:$order->service_user_id; $fundWater->order_no = $order->order_no; $fundWater->price = $order_type==1 ? $order->total_pay_price : $order->price; $fundWater->pay_type = 2; //易票联 $fundWater->saveOrFail(); $callback->status = 1; $callback->save(); $t->commit(); } catch (Exception $e){ $t->rollBack(); $callback->message = $e->getMessage(); $callback->save(); return Json::encode([ 'returnCode' => '0001', 'returnMsg' => '通信失败' ]); } return Json::encode([ 'returnCode' => '0000', 'returnMsg' => '通信成功' ]); } /** * 退款回调 */ public function actionRefundNotify() { Yii::$app->response->format = Response::FORMAT_RAW; $content = file_get_contents('php://input'); $callback = new Callback(); $callback->content = $content; $callback->type = 'eplpay_refund'; $callback->save(); $data = json_decode($content, true); $t = \Yii::$app->db->beginTransaction(); try { $out_trade_no = $data['outTradeNo']; $out_refund_no = $data['outRefundNo']; $paymentProductOrder = PaymentProductOrder::find()->where([ 'pay_order_no' => $out_trade_no, ])->one(); if ($paymentProductOrder){//产品订单 if ($paymentProductOrder->is_pay!=1){ throw new Exception('支付订单不存在'); } $order = ProductOrder::find()->where([ 'order_no' => $paymentProductOrder->order_no, ])->one(); if(!$order || $order->is_pay!=1){ throw new Exception('订单不存在'); } $order_type = 1; $refund = ProductOrderRefund::find()->where(['refund_no'=>$out_refund_no])->one();//退款订单 $payment_refund = PaymentProductRefund::find()->where(['refund_no'=>$out_refund_no])->one(); } else { //挂号订单 $PaymentRegister=PaymentRegister::find()->where([ 'pay_order_no' => $out_trade_no ])->one(); if (!$PaymentRegister || $PaymentRegister->is_pay!=1){ throw new \yii\db\Exception('支付订单不存在'); } $order = Register::find()->where([ 'order_no' => $PaymentRegister->order_no, ])->one(); if(!$order || $order->is_pay!=1){ throw new Exception('订单不存在'); } $order_type = 2; $refund= RegisterRefund::find()->where(['refund_no'=>$out_refund_no])->one();//退款订单 $payment_refund= PaymentRegisterRefund::find()->where(['refund_no'=>$out_refund_no])->one(); } if(!$refund || !$payment_refund){ throw new Exception('退款订单不存在'); } if(isset($data['payState']) && $data['payState'] == '00'){ if ($order_type == 1){ //产品订单 $order->refund_status =3;//已退款 $order->status = ProductOrderEnum::REFUND;//已退款 $order->refund_time = time(); $order->save(); if($order->order_type ==1){//处方订单 $prescription = $order->prescription; $prescription->refund_status = 2;//已退款 $prescription->save(); //药品库存回滚 $DrugRollBackForm = new DrugRollBackForm(); $DrugRollBackForm->rollBack($order->p_id); }else{ //药品库存回滚 $DrugRollBackForm = new DrugRollBackForm(); $DrugRollBackForm->rollBack($order->id, $order->order_type); } // 退款分账结算更新 \Yii::$app->queue->delay(0)->push(new ProductOrderRefundJob([ 'orderId' => $order->id ])); if($order->is_online){ //平台订单状态同步 \Yii::$app->queue->delay(0)->push(new ProductOrderSyncPlatformJob([ 'orderId' => $order->id, 'status' => 3 ])); } }else{ //分账状态更新 $ledgerForm = new LedgerForm(); $ledgerForm->order_id = $order->id; $ledgerForm->status = 2; $ledgerForm->update('register'); } $refund->is_refund = 1; $refund->refund_time = date('Y-m-d H:i:s', strtotime($data['payTime'])); $refund->save(); $payment_refund->is_pay = 1; $payment_refund->pay_type = 1; $payment_refund->save(); // 增加流水记录 $fundWater = new FundWater(); $fundWater->store_id = $order->store_id; // 门店 $fundWater->type = 'refund'; // 出账 $fundWater->order_type = 1; // 产品订单 $fundWater->order_id = $order->id; $fundWater->user_id = $order->user_id; $fundWater->service_user_id = $order_type==1?$order->su_id:$order->service_user_id; $fundWater->refund_no = $refund->refund_no; $fundWater->price = $order_type==1 ? $order->total_pay_price : $order->price; $fundWater->pay_type = 2; //易票联 $fundWater->saveOrFail(); } else {//退款失败 if($order_type == 1 && $order->is_send != 1){ $order->status = ProductOrderEnum::WAIT_SEND;//待发货 } $order->refund_status = 0; $order->refund_time = 0; $order->save(); $refund->fail_reason = '退款失败'; $refund->is_refund = -1; $refund->save(); $payment_refund->is_pay = -1; $payment_refund->save(); } $callback->status = 1; $callback->save(); $t->commit(); }catch (\Exception $exception){ $t->rollBack(); $callback->message = $exception->getMessage(); $callback->save(); return Json::encode([ 'returnCode' => '0001', 'returnMsg' => '通信失败' ]); } return Json::encode([ 'returnCode' => '0000', 'returnMsg' => '通信成功' ]); } /** * 提现回调 */ public function actionWithdrawNotify() { Yii::$app->response->format = Response::FORMAT_RAW; $content = file_get_contents('php://input'); $callback = new Callback(); $callback->content = $content; $callback->type = 'eplpay_withdraw'; $callback->save(); $data = json_decode($content, true); $out_trade_no = $data['outTradeNo']; $t = \Yii::$app->db->beginTransaction(); try { $applyOrder = CashApply::findOne(['order_no' => $out_trade_no,'check_status' => 2]); //已审核通过的提现申请 if(!$applyOrder){ throw new Exception('提现申请不存在'); } $CashAccount = CashAccount::findOne([ 'user_type' => $applyOrder->user_type, 'user_id' => $applyOrder->user_id ]); if(!$CashAccount){ throw new Exception('分账账号不存在'); } if(!isset($data['payState']) || $data['payState'] == '01'){ //提现失败 // $applyOrder->check_staus = 4; // $applyOrder->check_result = '提现失败'; // $applyOrder->check_time = date('Y-m-d H:i:s'); $applyOrder->dakuan_status = -1; $applyOrder->saveOrFail(); $CashAccount->able_cash = $CashAccount->able_cash + $applyOrder->apply_cash; $CashAccount->frozen_cash -= $applyOrder->apply_cash; $CashAccount->saveOrFail(); } else { $applyOrder->dakuan_status = 1; $applyOrder->dakuan_time = date('Y-m-d H:i:s'); $applyOrder->saveOrFail(); $CashAccount->frozen_cash -= $applyOrder->apply_cash; $CashAccount->withdrawn_cash += $applyOrder->apply_cash; $CashAccount->charge_cash += $applyOrder->charge_cash; $CashAccount->saveOrFail(); // 增加流水记录 $fundWater = new FundWater(); $fundWater->type = 'withdraw'; // 提现 $fundWater->order_type = 3; // 分账提现 $fundWater->order_id = $applyOrder->id; $fundWater->user_id = $applyOrder->user_id; $fundWater->user_type = $applyOrder->user_type; $fundWater->price = $applyOrder->apply_cash; $fundWater->pay_type = 2; //易票联 $fundWater->saveOrFail(); } $callback->status = 1; $callback->save(); $t->commit(); } catch (Exception $e){ $t->rollBack(); $callback->message = $e->getMessage(); $callback->save(); return Json::encode([ 'returnCode' => '0001', 'returnMsg' => '通信失败' ]); } return Json::encode([ 'returnCode' => '0000', 'returnMsg' => '通信成功' ]); } }