예제 #1
0
 /**
  * Проверяем статус возврата денег
  * 
  * @global type $DB 
  */
 function checkRefund()
 {
     global $DB;
     $this->log = new log('pmpay/checkrefund-%d%m%Y.log', 'a', '%d.%m.%Y %H:%M:%S : ');
     $sql = "\n          SELECT pp.payment_id, sp.* FROM sbr_stages_payouts sp\n          INNER JOIN sbr_stages ss ON ss.id = sp.stage_id\n          INNER JOIN sbr s ON s.id = ss.sbr_id\n          INNER JOIN pm_payments pp ON pp.billing_id = s.reserved_id \n          WHERE sp.is_refund = false AND sp.refund_id IS NOT NULL AND sp.completed IS NULL\n        ";
     if (!($payments = $DB->rows($sql))) {
         $payments = array();
     }
     foreach ($payments as $pmt) {
         $this->_log("Запрашиваем платеж: {$pmt['id']} (payment_id: {$pmt['payment_id']}, stage_id: {$pmt['stage_id']})...");
         if ($pinf = $this->getRefundByPaymentID($pmt['payment_id'])) {
             $this->_log('Получен ответ: ' . http_build_query($pinf, '', '&'));
             $refund = $this->findRefundById($pinf, $pmt['refund_id']);
             // Ищем из выдачи наш возврат
             if (!$refund) {
                 $this->_log('Ошибка: Платеж не найден в выдаче ' . $pmt['refund_id']);
                 return;
             }
             switch ($refund['Status']) {
                 case 'SUCCESS':
                     require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/pmpay.php';
                     $this->_log('Возврат денег выполнен успешно, обновляем статус');
                     $update = array('is_refund' => true, 'completed' => 'NOW()');
                     sbr_adm::refundStatusUpdate($update, $pmt['id']);
                     $this->_log('ОК.');
                     break;
                 case 'FAILURE':
                     $this->_log('Платеж отменен, отменяем возврат, ставим соттветствующий флаг');
                     $this->_log('Код ошибки: ' . $refund['ErrorCode']);
                     $update = array('is_refund' => null, 'completed' => null);
                     $res = sbr_adm::refundStatusUpdate($update, $pmt['id']) ? 'ОК.' : 'ERROR: ' . pg_last_error();
                     $this->_log($res);
                     break;
                 default:
                     $this->_log("Платеж в статусе {$refund['Status']}, игнорируем.");
                     break;
             }
         }
     }
 }