Ejemplo n.º 1
0
 public function notifyAction($notifyType, $channel, $gateway)
 {
     do {
         $ret = $this->_checkParams($channel, $gateway);
         if ($ret['err_code'] !== ErrCode::ERR_SUCCESS) {
             return $ret['err_msg'];
         }
         $notice = $this->_getPayNotifyArgs($channel, $gateway);
         if (!$notice) {
             $errMsg = '验证失败';
             return $errMsg;
         }
     } while (0);
     $ret = SerNotifyBiz::getInstance()->payNotify($notice, $notifyType);
     return $ret->is_success == 'T' ? $ret->output : $ret->error;
 }
Ejemplo n.º 2
0
 public function refund($order)
 {
     $ret = new \stdClass();
     $ret->haveNotify = false;
     $config = self::getConfig($order);
     if (!$config) {
         $ret->is_success = 'F';
         $ret->error = "不存在的交易号:{$order['ser_recharge_no']}";
         return $ret;
     }
     //使用退款接口
     $refundObj = new \Refund_pub($config);
     $refundObj->setParameter("transaction_id", $order['ser_recharge_no']);
     //微信订单号
     $refundObj->setParameter("out_refund_no", $order['mer_refund_no']);
     //商户退款单号
     $refundObj->setParameter("total_fee", $order['recharge_amount']);
     //总金额
     $refundObj->setParameter("refund_fee", $order['refund_amount']);
     //退款金额
     $refundObj->setParameter("op_user_id", $config['partner']);
     //操作员
     //$refundObj->setParameter("out_trade_no", 'xxxx') ;                    //商户订单号
     //$refund->setParameter("sub_mch_id","XXXX") ;                          //子商户号
     //$refund->setParameter("device_info","XXXX") ;                         //设备号
     //调用结果
     $refundResult = $refundObj->getResult();
     if ($refundResult["return_code"] == "SUCCESS") {
         if ($refundResult['result_code'] == 'SUCCESS') {
             for ($i = 0; $i < 3; $i++) {
                 sleep(1);
                 $refundQueryResult = $this->refundQuery($order);
                 if ($refundQueryResult->is_success == 'T' && $refundQueryResult->code == 1) {
                     $notice = ['type' => 'refund', 'mer_refund_no' => $order['mer_refund_no'], 'ser_refund_no' => $order['ser_refund_no'], 'notify_status' => 2, 'notify_log' => 'SUCCESS', 'notify_time' => time(), 'refund_time' => time()];
                     SerNotifyBiz::getInstance()->payNotify($notice, 'refund');
                     break;
                 }
             }
         } else {
             $ret->is_success = 'F';
             $ret->code = 998;
             $ret->error = '提交业务失败:retmsg=' . $refundResult['err_code_des'];
         }
     } else {
         $ret->is_success = 'F';
         $ret->code = 999;
         $ret->exception = true;
         $ret->error = '通信失败:retmsg=' . $refundResult['err_code_des'];
     }
     return $ret;
 }
Ejemplo n.º 3
0
 public function seConfirmTrans($job, $data)
 {
     $errCode = 0;
     $transOrder = TransModel::find($data['id'])->first();
     do {
         if (!$transOrder || $transOrder->status != TransModel::STATUS_DEFAULT) {
             $errCode = 1;
             break;
         }
         if (!$transOrder->gateway || !$transOrder->channel) {
             $errCode = 2;
             break;
         }
         if (false === ($channel = ChannelUtil::calculateAccountChannel($transOrder->channel))) {
             $errCode = 3;
             break;
         }
         $gatewayObj = gatewayUtil::getGatewayObj($transOrder->gateway);
         if (!$gatewayObj) {
             $errCode = 4;
             break;
         }
         if (!method_exists($gatewayObj, 'transQuery')) {
             $errCode = 5;
             break;
         }
     } while (0);
     if ($errCode == 0) {
         $order = ['channel' => $channel, 'gateway' => $transOrder->gateway, 'batch_no' => $transOrder->batch_no, 'mer_trans_no' => $transOrder->mer_trans_no];
         $notice = $gatewayObj->transQuery($order);
         $ret = SerNotifyBiz::getInstance()->payNotify($notice, 'trans');
         if ($ret->is_success == 'T') {
             $job->delete();
         } else {
             $job->release(60 * 60);
         }
     } else {
         $job->delete();
     }
 }