示例#1
0
 public function fire($job, $data)
 {
     $orderId = $data['id'];
     $ret = true;
     switch ($data['notify_type']) {
         case 'direct':
             $order = RechargeModel::find($orderId);
             break;
         case 'consume':
             $order = ConsumeModel::find($orderId);
             break;
         case 'refund':
             $order = RefundModel::find($orderId);
             break;
         case 'trans':
             $order = TransModel::find($orderId);
             break;
     }
     if ($order && $order->callback_status != 2 && $order->callback_count < 20) {
         try {
             $ret = BusiNotifyBiz::getInstance()->notifyCallback($order, $data['notify_type']);
         } catch (PayException $e) {
             $ret = true;
         } catch (\Exception $e) {
             $ret = false;
         }
         $job->release(pow($order->callback_count, 2) * 60);
     }
     if ($ret == true) {
         $job->delete();
     }
 }
 public function serRefund($job, $data)
 {
     $errCode = 0;
     $refundOrder = RefundModel::find($data['id']);
     $rechargeOrder = RechargeModel::find($refundOrder->recharge_id);
     do {
         if ($rechargeOrder->status != RechargeModel::STATUS_SUCCESS || $refundOrder->ser_notify_status != RefundModel::STATUS_DEFAULT) {
             $errCode = 1;
             break;
         }
         if (!$refundOrder->gateway || !$refundOrder->channel) {
             $errCode = 2;
             break;
         }
         $channel = ChannelUtil::calculateAccountChannel($refundOrder->channel);
         if (false === $channel) {
             $errCode = 3;
             break;
         }
         $gatewayObj = gatewayUtil::getGatewayObj($rechargeOrder->gateway);
         if (!$gatewayObj) {
             $errCode = 4;
             break;
         }
         $orderData = $refundOrder->toArray();
         $queryParams = array('ser_recharge_no' => $rechargeOrder->ser_recharge_no, 'channel' => $channel, 'seller_partner' => $orderData['seller_partner']);
         $queryResult = $gatewayObj->refundQuery($queryParams);
         if ($queryResult->is_success == 'T') {
             /// 第三方已经退过款
             if ($queryResult->is_refund == true) {
                 $errCode = 5;
                 break;
             }
         }
     } while (0);
     if ($errCode == 0) {
         $notifyUrl = PayVars::getNotifyUrl() . "notify/refund/{$channel}/{$rechargeOrder->gateway}";
         $order = array('channel' => $channel, 'gateway' => $rechargeOrder->gateway, 'create_time' => $orderData['create_time'], 'mer_refund_no' => $orderData['mer_refund_no'], 'notify_url' => $notifyUrl, 'ser_recharge_no' => $rechargeOrder->ser_recharge_no, 'recharge_amount' => $rechargeOrder->recharge_amount, 'refund_amount' => $orderData['amount'], 'subject' => $orderData['subject'], 'mer_recharge_no' => $rechargeOrder->mer_recharge_no, 'seller_partner' => $rechargeOrder->seller_partner);
         $ret = $gatewayObj->refund($order);
         if ($ret->is_success == 'F') {
             $data = array('ser_notify_status' => 3, 'ser_notify_log' => $ret->error, 'ser_notify_time' => time());
             RefundBiz::getInstance()->confirmRefundOrderById($refundOrder->id, $data);
         }
         $job->release(60 * 5);
     } else {
         $job->delete();
     }
 }
示例#3
0
 public function confirmRefundOrderById($orderId, $data)
 {
     $time = time();
     $errCode = 0;
     $errMsg = '';
     \DB::beginTransaction();
     do {
         try {
             $order = RefundModel::find($orderId);
             if (!$order) {
                 throw new PayException(ErrCode::ERR_ORDER_NO_EXISTS);
             } elseif ($order->status == RefundModel::STATUS_SUCCESS) {
                 $errCode = 1;
                 break;
             }
             if (isset($data['ser_refund_no']) && !empty($data['ser_refund_no'])) {
                 $order->ser_refund_no = $data['ser_refund_no'];
             }
             if (isset($data['notify_log'])) {
                 $order->ser_notify_log = $data['notify_log'];
             }
             if (isset($data['notify_status'])) {
                 $order->ser_notify_status = $data['notify_status'];
             }
             if (isset($data['seller_partner'])) {
                 $order->seller_partner = $data['seller_partner'];
             }
             $order->refund_time = $data['refund_time'];
             $order->ser_notify_time = $data['notify_time'];
             $order->save();
             AccountBiz::getInstance()->updateUserAccount($order->user_id, RefundModel::DEAL_OUT_REFUND, $order->refund_amount, $order->channel);
         } catch (\Exception $e) {
             $errCode = 1;
         }
     } while (0);
     if ($errCode == 0) {
         \DB::commit();
         if (true !== BusiNotifyBiz::getInstance()->notifyCallback($order, 'refund')) {
             \Queue::later(5, '\\Pay\\Service\\Queue\\BusiNotifyQueue', ['id' => $order->id, 'notify_type' => 'refund']);
         }
         return true;
     } else {
         \DB::rollback();
         return false;
     }
 }
示例#4
0
 private function _refundNotify($notice)
 {
     $errCode = 0;
     $errMsg = '';
     do {
         try {
             $refundOrder = RefundModel::where('mer_refund_no', $notice['mer_refund_no'])->first();
             if (!$refundOrder) {
                 $errCode = 2;
                 $errMsg = '退款订单不存在' . $notice['mer_refund_no'];
                 break;
             }
             $rechargeOrder = RechargeModel::find($refundOrder->recharge_id);
             if (!$rechargeOrder) {
                 $errCode = 2;
                 $errMsg = '充值订单不存在' . $refundOrder->recharge_id;
                 break;
             }
             if ($rechargeOrder->status != RechargeModel::STATUS_SUCCESS) {
                 $errCode = 3;
                 $errMsg = '订单状态不正确';
                 break;
             }
             $upInfo = ['refund_time' => $notice['refund_time'], 'notify_time' => $notice['notify_time'], 'ser_refund_no' => $notice['ser_refund_no'], 'notify_status' => $notice['notify_status'], 'notify_log' => $notice['notify_log']];
             if (true !== RefundBiz::getInstance()->confirmrefundOrderById($refundOrder->id, $upInfo)) {
                 $errCode = 3;
                 $errMsg = '确认退款订单失败';
                 break;
             }
         } catch (\Exception $e) {
             $errCode = 99;
             $errMsg = $e->getMessage();
             break;
         }
     } while (0);
     $ret = new \stdClass();
     $ret->is_success = $errCode === 0 ? 'T' : 'F';
     $ret->code = $errCode;
     $ret->output = $notice['output'];
     $ret->error = $errMsg;
     return $ret;
 }