You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
2.0 KiB
70 lines
2.0 KiB
7 months ago
|
<?php
|
||
|
namespace TestSuite\Checks;
|
||
|
|
||
|
use \TestSuite\Settings;
|
||
|
|
||
|
class Process extends AbstractCheck
|
||
|
{
|
||
|
const AMOUNT = 100;
|
||
|
|
||
|
protected function request()
|
||
|
{
|
||
|
$message = $this->getPreparedMessage();
|
||
|
$message->setMTI('0200');
|
||
|
$message->setField(2, explode("=", Settings::VALID_TRACK2)[0]);
|
||
|
$message->setField(3, Settings::PROCESSING_CODE_WITHDRAW);
|
||
|
$message->setField(4, sprintf("%012d", self::AMOUNT));
|
||
|
$message->setField(14, substr(explode("=", Settings::VALID_TRACK2)[1],0,4));
|
||
|
$message->setField(19, Settings::CURRENCY_CODE);
|
||
|
$message->setField(35, Settings::VALID_TRACK2);
|
||
|
$message->setField(49, Settings::CURRENCY_CODE);
|
||
|
$message->setField(52, hex2bin(Settings::VALID_PINBLOCK));
|
||
|
$message->setField(53, Settings::PINBLOCK_PARAMS);
|
||
|
|
||
|
return $message;
|
||
|
}
|
||
|
|
||
|
protected function expectation($response)
|
||
|
{
|
||
|
$holdString = $response->getField(37);
|
||
|
|
||
|
if (!strlen($holdString)) {
|
||
|
throw new \Exception('Empty 37 field in hold');
|
||
|
}
|
||
|
|
||
|
if (!is_numeric($holdString)) {
|
||
|
throw new \Exception('Non-numeric 37 field in hold');
|
||
|
}
|
||
|
|
||
|
if (!$this->persistent) {
|
||
|
$this->setConnection();
|
||
|
}
|
||
|
|
||
|
// Reversing this hold, to not spam a lot of shit
|
||
|
$message = $this->getPreparedMessage();
|
||
|
$message->setMTI('0400');
|
||
|
$message->setField(2, explode("=", Settings::VALID_TRACK2)[0]);
|
||
|
$message->setField(3, Settings::PROCESSING_CODE_WITHDRAW);
|
||
|
$message->setField(4, sprintf("%012d", self::AMOUNT));
|
||
|
$message->setField(19, Settings::CURRENCY_CODE);
|
||
|
$message->setField(35, Settings::VALID_TRACK2);
|
||
|
$message->setField(37, $holdString);
|
||
|
$message->setField(49, Settings::CURRENCY_CODE);
|
||
|
|
||
|
$answer = $this->sendMessage($message->pack());
|
||
|
$reverse = $this->getEmptyMessage();
|
||
|
$reverse->unpack($answer);
|
||
|
|
||
|
$reverseString = $reverse->getField(37);
|
||
|
if (!strlen($reverseString)) {
|
||
|
throw new \Exception('Empty 37 field in reverse');
|
||
|
}
|
||
|
|
||
|
if (!is_numeric($reverseString)) {
|
||
|
throw new \Exception('Non-numeric 37 field in reverse');
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
}
|