src/FintechFab/QiwiSdk/Gateway.php
public function doParseCallback($requestParams = null)
	{

		if (null === $requestParams && !empty($_POST)) {
			$requestParams = $_POST;
		}

		$fields = array(
			'bill_id',
			'status',
			'error',
			'amount',
			'user',
			'prv_name',
			'ccy',
			'comment',
			'command',
		);

		// формирование параметров
		$params = array();
		foreach ($fields as $name) {
			if (isset($requestParams[$name])) {
				$params[$name] = urldecode($requestParams[$name]);
			} else {
				// на некоторых полях - не ошибка
				if (!in_array($name, array('comment', 'prv_name'))) {
					$this->setError('Parameter ' . $name . ' is required');
				}
			}
		}

		if ($this->getError()) {
			$this->createCallbackResponse(self::C_ERROR_FORMAT);

			return false;
		}
		if (!$this->checkAuth($requestParams)) {
			$this->setError($this->errorMap[self::C_AUTH_ERROR]);
			$this->createCallbackResponse(self::C_AUTH_ERROR);

			return false;
		}

		// номер телефона
		$params['user'] = str_replace('tel:', '', $params['user']);

		// статус
		$this->setValueBillStatus($this->statusMap[$params['status']]);

		// данные
		$this->setCallbackAmount($params['amount']);
		$this->setCallbackOrderId($params['bill_id']);

		// ответ
		$this->createCallbackResponse();

		// ошибка от гейта
		if ($params['error'] !== '0') {
			$errorMessage = isset($this->errorMap[$params['error']])
				? $this->errorMap[$params['error']]
				: 'Неизвестная ошибка';
			$this->setError($errorMessage);
		}

		return true;

	}
public function doParseCallback($requestParams = null)
	{

		if (null === $requestParams && !empty($_POST)) {
			$requestParams = $_POST;
		}

		$fields = array(
			'bill_id',
			'status',
			'error',
			'amount',
			'user',
			'prv_name',
			'ccy',
			'comment',
			'command',
		);

		// формирование параметров
		$params = array();
		foreach ($fields as $name) {
			if (isset($requestParams[$name])) {
				$params[$name] = urldecode($requestParams[$name]);
			} else {
				// на некоторых полях - не ошибка
				if (!in_array($name, array('comment', 'prv_name'))) {
					$this->setError('Parameter ' . $name . ' is required');
				}
			}
		}

		if ($this->getError()) {
			$this->createCallbackResponse(self::C_ERROR_FORMAT);

			return false;
		}
		if (!$this->checkAuth($requestParams)) {
			$this->setError($this->errorMap[self::C_AUTH_ERROR]);
			$this->createCallbackResponse(self::C_AUTH_ERROR);

			return false;
		}

		// номер телефона
		$params['user'] = str_replace('tel:', '', $params['user']);

		// статус
		$this->setValueBillStatus($this->statusMap[$params['status']]);

		// данные
		$this->setCallbackAmount($params['amount']);
		$this->setCallbackOrderId($params['bill_id']);

		// ответ
		$this->createCallbackResponse();

		// ошибка от гейта
		if ($params['error'] !== '0') {
			$errorMessage = isset($this->errorMap[$params['error']])
				? $this->errorMap[$params['error']]
				: 'Неизвестная ошибка';
			$this->setError($errorMessage);
		}

		return true;

	}
Разбирает коллбэк-запрос от гейта

После разбора
- получить номер заказа getCallbackOrderId и сумму getCallbackAmount
- получить статус заказа/счета getValueBillStatus

Если были ошибки - текст ошибки в getError

Если в коллбэке пришла ошибка error, то
- разбор считается успешным (возвращает true)
- но в getError вернет текст ошибки

@param array|null $requestParams массив параметров в запросе или будет использован $_POST

@return bool разбор прошел без ошибок или с ошибками