/** * Проверяем статус возврата денег * * @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; } } } }