/**
* {@inheritdoc}
*/
public function callback(TransactionInterface $transaction)
{
// check if the order exists
if (!$transaction->getOrder()) {
$transaction->setStatusCode(TransactionInterface::STATUS_ORDER_UNKNOWN);
$transaction->setState(TransactionInterface::STATE_KO);
$transaction->setInformation('The order does not exist');
return $this->handleError($transaction);
}
// check if the request is valid
if (!$this->isRequestValid($transaction)) {
$transaction->setStatusCode(TransactionInterface::STATUS_WRONG_REQUEST);
$transaction->setState(TransactionInterface::STATE_KO);
$transaction->setInformation('The request is not valid');
return $this->handleError($transaction);
}
// check if the callback is valid
if (!$this->isCallbackValid($transaction)) {
$transaction->setStatusCode(TransactionInterface::STATUS_WRONG_CALLBACK);
$transaction->setState(TransactionInterface::STATE_KO);
$transaction->setInformation('The callback reference is not valid');
return $this->handleError($transaction);
}
// apply the transaction id
$this->applyTransactionId($transaction);
// if the order is not open, then something already happen ... (duplicate callback)
if (!$transaction->getOrder()->isOpen()) {
$transaction->setState(TransactionInterface::STATE_OK);
// the transaction is valid, but not the order state
$transaction->setStatusCode(TransactionInterface::STATUS_ORDER_NOT_OPEN);
$transaction->setInformation('The order is not open, then something already happen ... (duplicate callback)');
return $this->handleError($transaction);
}
// send the confirmation request to the bank
if (!($response = $this->sendConfirmationReceipt($transaction))) {
$transaction->setInformation('Fail to send the confirmation receipt');
$response = $this->handleError($transaction);
}
return $response;
}