public function RobokassaPayment::doValidatePost in Commerce robokassa 8.2
Helper to validate robokassa $_POST data.
Parameters
\Symfony\Component\HttpFoundation\Request $data: $_POST to be validated.
bool $is_interaction: Fallback call flag.
Return value
bool|mixed Transaction according to POST data or due.
1 call to RobokassaPayment::doValidatePost()
- RobokassaPayment::onNotify in src/
Plugin/ Commerce/ PaymentGateway/ RobokassaPayment.php - Processes the notification request.
File
- src/
Plugin/ Commerce/ PaymentGateway/ RobokassaPayment.php, line 291
Class
- RobokassaPayment
- Provides the Off-site Robokassa payment gateway.
Namespace
Drupal\commerce_robokassa\Plugin\Commerce\PaymentGatewayCode
public function doValidatePost(Request $request, $is_interaction = TRUE) {
$data = $request->request
->all();
// Exit now if the $_POST was empty.
if (empty($data)) {
$this->logger
->warning('Interaction URL accessed with no POST data submitted.');
return FALSE;
}
// Exit now if any required keys are not exists in $_POST.
$required_keys = array(
'OutSum',
'InvId',
);
if ($is_interaction) {
$required_keys[] = 'SignatureValue';
}
$unavailable_required_keys = array_diff_key(array_flip($required_keys), $data);
if (!empty($unavailable_required_keys)) {
$this->logger
->warning('Missing POST keys. POST data: <pre>!data</pre>', array(
'!data' => print_r($unavailable_required_keys, TRUE),
));
return FALSE;
}
// Exit now if missing Checkout ID.
if (empty($this->configuration['MrchLogin'])) {
$info = array(
'!settings' => print_r($this->configuration, 1),
'!data' => print_r($data, TRUE),
);
$this->logger
->warning('Missing merchant ID. POST data: <pre>!data</pre> <pre>!settings</pre>', $info);
return FALSE;
}
if ($is_interaction) {
if ($this->configuration) {
// Robokassa Signature.
$robo_sign = $data['SignatureValue'];
// Create own Signature.
$signature_data = array(
$data['OutSum'],
$data['InvId'],
$this->configuration['pass2'],
);
if (isset($data['shp_trx_id'])) {
$signature_data[] = 'shp_trx_id=' . $data['shp_trx_id'];
}
$sign = hash($this->configuration['hash_type'], implode(':', $signature_data));
// Exit now if missing Signature.
if (Unicode::strtoupper($robo_sign) != Unicode::strtoupper($sign)) {
$this->logger
->warning('Missing Signature. 1 POST data: !data', array(
'!data' => print_r($data, TRUE),
));
return FALSE;
}
}
}
try {
/** @var \Drupal\commerce_payment\Entity\PaymentInterface $payment */
$payment = $this->entityTypeManager
->getStorage('commerce_payment')
->load($data['shp_trx_id']);
} catch (InvalidPluginDefinitionException $e) {
$this->logger
->warning('Missing transaction id. POST data: !data', array(
'!data' => print_r($data, TRUE),
));
return FALSE;
}
$amount = new Price($data['OutSum'], $payment
->getAmount()
->getCurrencyCode());
if (!$payment instanceof PaymentInterface) {
$this->logger
->warning('Missing transaction id. POST data: !data', array(
'!data' => print_r($data, TRUE),
));
return FALSE;
}
if (!$payment
->getAmount()
->equals($amount)) {
$this->logger
->warning('Missing transaction id amount. POST data: !data', array(
'!data' => print_r($data, TRUE),
));
return FALSE;
}
return $payment;
}