Перейти к содержимому
Калькуляторы

ПО для терминала оплаты у кого есть?

Притащили мне терминала оплаты (бывший Cyberplat кажется).

Сказали научить принимать платежи напрямую в биллинг (ну шлюз написать не проблема).

Вопрос, какой софт туда поставить что бы:

- можно было сделать свой UI или как-то кустомизировать (цвета, лого, форма ввода лиц.счета)

- умел печатать чеки, фискальную память поддерживал

- принимал деньги :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Смотрите модели купюроприёмника и принтера, гуглите мануалы на сайте производителя и пилите. Мы по крайней мере так поступили.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Киберплатовский софт неплохо кастомизируется ; умеет складывать платежи для кастомного провайдера в отдельные файлики (которые скриптами можно слать как и куда угодно)

 

А драйвера на купюроприёмник/принтер/тачскрин от софта не зависят

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Они исходники своего терминального софта выкладывали, вот что-то и сейчас есть, но не знаю, насколько живо.

 

https://help.cyberplat.com/projects/terminal/wiki

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо, но с Киберплатом такая засада, что версия 1 клиента, которая кустомизируется и т.д. не умеет работать с фискальной памятью. А доступная версия 3, просит ключей авторизации через сервис Киберплат.

Конечно можно что-то скачать с SVN и попробовать самому, но для этого нужен ресурс кодера на Visual C/C++ которого у нас нет. :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну я бы все же посмотрел на модели купюроприемника,

 

и посмотрел в сторону торгового оборудования типа атолл или штрих. у них есть куча компонентов и драйверов для 1С. с готовыми примерами на 1С, вижуальном бэйсике и местами на паскале.

 

не нужен там ресурс кодера на С++. там просто обычный принтер и просто счетчик и просто обычный тачскрин. формочку можно за выходные запилить на php. разворачивать на весь экран браузер в иксах. читать из одного порта сколько купюр ввели. в обычный принтер печатать бумажку.

 

вся кажущаяся сложность программного кода платежных систем от того только, что им нужно поддерживать кучу получателей платежей, в каком то развесистом меню это показывать, регулярно их список обновлять и собственный софт централизованно тоже обновлять. убери это и там не останется почти ничего.

 

когда у тебя один получатель - ты, и софт ты обновляешь руками раз в год, вся задача становится значительно проще.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Собственно у нас купюроприемник CashCode, принтер Custom VKP800, плюс будет еще фискальник (модель пока не знаю, видимо он ставится как-то на принтер).

Есть кто готов взяться за реализацию, готовы договариваться по вознаграждению.

Собственно требуется реализовать следующие шаги:

1) Начало (кнопка оплатить)

2) Ввод договора (запрос check в платежный шлюз)

3) Подтверждение договора (вывод на экран Инициалов и Баланс)

4) Прием денег и подтверждение оплаты

5) Печать чека

 

Ну разумеется, с кустомизированной мордной (лого, телефон и т.д.). Протокол обмена между терминалом и платежных шлюзом OSMP по https.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сказали научить принимать платежи напрямую в биллинг (ну шлюз написать не проблема).
Протокол обмена между терминалом и платежных шлюзом OSMP по https.

а зачем вам тут OSMP?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а зачем вам тут OSMP?

 

Патаму-чта, не существует унифицированных протоколов в этой области деятельности, о чем я как-то писал. Поэтому хотят тот протокол, который умеет их биллинг. :)

Изменено пользователем vop

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Патаму-чта, не существует унифицированных протоколов в этой области деятельности, о чем я как-то писал. Поэтому хотят тот протокол, который умеет их биллинг. :)

А что это за биллинг такой который умеет только осмп?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Патаму-чта, не существует унифицированных протоколов в этой области деятельности, о чем я как-то писал. Поэтому хотят тот протокол, который умеет их биллинг. :)

А что это за биллинг такой который умеет только осмп?

 

Я подозреваю, что любой, где платежные системы продаются отдельно. Вот и получилось, что купили уже одну, теперь хотят под нее танцы исполнять. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да вообщем протокол может быть любым) Биллинг позволяет. Просто OSMP вроде как наиболее лаконичен)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Протокол osmp уже фактически стал стандартом. Даже крупные конторы типа МКБ сразу его предлагают…

 

А что это за биллинг такой который умеет только осмп?
Любой биллинг заведомо умеет осмп, так что вариант вполне логичен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Любой биллинг заведомо умеет осмп, так что вариант вполне логичен.

протокол общения между терминалом и осмп, скорее всего, отличается от протокола общения между осмп и биллингом.

я так думаю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ниже код для валидатора CashCode MVU.

Запускать тупо из консоли.

 

const.php

 

 

<?php

$BillToBill_CMD = array();
$BillToBill_CMD["ACK"] =					pack("c*", 0x02, 0x03, 0x06, 0x00, 0xC2, 0x82);
$BillToBill_CMD["Reset"] =					pack("c*", 0x02, 0x03, 0x06, 0x30, 0x41, 0xB3);
$BillToBill_CMD["GetStatus"] =				pack("c*", 0x02, 0x03, 0x06, 0x31, 0xC8, 0xA2);
$BillToBill_CMD["SetSecurity"] =			pack("c*", 0x02, 0x03, 0x06, 0x32, 0x53, 0x90);
$BillToBill_CMD["Poll"] =		 			pack("c*", 0x02, 0x03, 0x06, 0x33, 0xDA, 0x81);
$BillToBill_CMD["EnableBillTypes"] =		pack("c*", 0x02, 0x03, 0x0C, 0x34, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xB5, 0xC1);
$BillToBill_CMD["EnableBillTypesEscrow"] =	pack("c*", 0x02, 0x03, 0x0C, 0x34, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xF7);
$BillToBill_CMD["DisableBillTypes"] =		pack("c*", 0x02, 0x03, 0x0C, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x0C);
$BillToBill_CMD["Stack"] =					pack("c*", 0x02, 0x03, 0x06, 0x35, 0xEC, 0xE4);
$BillToBill_CMD["Return"] =					pack("c*", 0x02, 0x03, 0x06, 0x36, 0x77, 0xD6);
$BillToBill_CMD["Identification"] =			pack("c*", 0x02, 0x03, 0x06, 0x37, 0xFE, 0xC7);
$BillToBill_CMD["Hold"] =					pack("c*", 0x02, 0x03, 0x06, 0x38, 0x09, 0x3F);
$BillToBill_CMD["CassetteStatus"] =			pack("c*", 0x02, 0x03, 0x06, 0x3B, 0x92, 0x0D);
$BillToBill_CMD["Dispense"] =				pack("c*", 0x02, 0x03, 0x06, 0x3C, 0x2D, 0x79);
$BillToBill_CMD["Unload"] = 				pack("c*", 0x02, 0x03, 0x06, 0x3D, 0xA4, 0x68);
$BillToBill_CMD["EscrowCassetteStatus"] =	pack("c*", 0x02, 0x03, 0x06, 0x3E, 0x3F, 0x5A);
$BillToBill_CMD["EscrowCassetteUnload"] =	pack("c*", 0x02, 0x03, 0x06, 0x3F, 0xB6, 0x4B);
$BillToBill_CMD["SetCassetteType"] =		pack("c*", 0x02, 0x03, 0x06, 0x40, 0xC6, 0xC0);
$BillToBill_CMD["GetBillTable"] =	 		pack("c*", 0x02, 0x03, 0x06, 0x41, 0x4F, 0xD1);
$BillToBill_CMD["Download"] =				pack("c*", 0x02, 0x03, 0x06, 0x50, 0x47, 0xD0);

$BillToBill_Code = array(
0x10 => "Power Up",
0x11 => "Power Bill",
0x12 => "Power?",
0x13 => "Initialize",
0x14 => "Idling",
0x15 => "Accepting",
0x17 => "Stacking",
0x18 => "Returning",
0x19 => "Unit Disabled",
0x1A => "Holding",
0x1B => "Device Busy",
0x1C => "Rejecting",
0x1D => "Dispensing",
0x1E => "Unloading",
0x1F => "Custom returning",
0x20 => "Recycling unloading",
0x21 => "Setting cassette type",
0x25 => "Dispensed",
0x26 => "Unloaded",
0x27 => "Custom bills returned",
0x28 => "Recycling cassette unloaded",
0x29 => "Set cassette type",
0x30 => "Invalid command",
0x41 => "Drop Cassette Full",
0x42 => "Drop Cassette out of position",
0x43 => "Bill Validator Jammed",
0x44 => "Cassette Jammed",
0x45 => "Cheated",
0x46 => "Pause",
0x47 => "Generic Failure codes",
0x48 => "Bill-to-Bill unit Jammed",
0x80 => "Escrow position",
0x81 => "Bill stacked",
0x82 => "Bill returned");

$BillToBill_ExtendedCode = array();
$BillToBill_ExtendedCode[0x1C] = array(
0x60 => "Rejecting due to Insertion",
0x61 => "Rejecting due to Magnetic",
0x62 => "Rejecting due to bill - Remaining in the head",
0x63 => "Rejecting due to Multiplying",
0x64 => "Rejecting due to Conveying",
0x65 => "Rejecting due to Identification1",
0x66 => "Rejecting due to Verification",
0x67 => "Rejecting due to Optic",
0x68 => "Rejecting due to Inhibit",
0x69 => "Rejecting due to Capacity",
0x6A => "Rejecting due to Operation",
0x6C => "Rejecting due to Length");
$BillToBill_ExtendedCode[0x47] = array(
0x50 => "Stack Motor Failure",
0x51 => "Transport Motor Speed Failure",
0x52 => "Transport Motor Failure",
0x53 => "Aligning Motor Failure",
0x54 => "Initial Box Status Failure",
0x55 => "Optic Canal Failure",
0x56 => "Magnetic Canal Failure",
0x57 => "Cassette 1 Motor Failure",
0x58 => "Cassette 2 Motor Failure",
0x59 => "Cassette 3 Motor Failure",
0x5A => "Bill-to-Bill unit Transport Motor Failure",
0x5B => "Switch Motor 1 Failure",
0x5C => "Switch Motor 2 Failure",
0x5D => "Dispenser Motor 1 Failure",
0x5E => "Dispenser Motor 2 Failure",
0x5F => "Capacitance Canal Failure");
$BillToBill_ExtendedCode[0x48] = array(
0x70 => "Bill Jammed in Cassette 1",
0x71 => "Bill Jammed in Cassette 2",
0x72 => "Bill Jammed in Cassette 3",
0x73 => "Bill Jammed in Transport Path",
0x74 => "Bill Jammed in Switch",
0x75 => "Bill Jammed in Dispenser");
$BillToBill_ExtendedCode[0x81] = array(
0x00 => "100",
0x01 => "200",
0x02 => "500",
0x03 => "1000",
0x04 => "2000",
0x05 => "5000");

global $BillToBill_CMD, $BillToBill_Code, $BillToBill_ExtendedCode;

?>

 

 

 

test-validator.php

 

 

<?php

//stty 9600 cs8 -parity -parenb -cstopb -istrip -ixon -crtscts clocal -F /dev/ttyS2

require_once("consts.php");

set_time_limit(5);

$data = array("result"=>0, "result_text"=>"", "error"=>0, "error_text"=>"");

$ValidatorHandle = null;

function ValidatorOpen()
{
global $ValidatorHandle;
return $ValidatorHandle = dio_open("interface", O_RDWR | O_NONBLOCK | O_NOCTTY);
}

function ValidatorClose()
{
global $ValidatorHandle;
if ($ValidatorHandle) {dio_close($ValidatorHandle);}
}

function ValidatorSendACK()
{
global $ValidatorHandle, $BillToBill_CMD;
if ($ValidatorHandle) {dio_write($ValidatorHandle, $BillToBill_CMD["ACK"]);}
}

function ErrorHandler($errno, $errstr, $errfile, $errline)
{
$data["error_text"] = $errstr;
return false;
}

function ExecuteCommand($Command, &$CommandResult, $Waiting = true)
{
$CommandResult = null;
global $ValidatorHandle;
if ($ValidatorHandle)
{
	dio_write($ValidatorHandle, $Command);
	if (!$Waiting) {break;}
	$result = null;
	$cur_time = time();
	$expire_time = mktime(date("H", $cur_time), date("i", $cur_time), date("s", $cur_time) + 5, date("m", $cur_time), date("d", $cur_time), date("Y", $cur_time));
	while (time() < $expire_time)
	{
		$result .= dio_read($ValidatorHandle, 255);
		if (($result) && (ord($result[2]) > 0) && (strlen($result) >= ord($result[2])))
		{
			$CommandResult = $result;
			break;
		}
		else
		{usleep(50 * 1000);}
	}
}
if ($CommandResult)
{return true;}
else
{return false;}
}

set_error_handler("ErrorHandler", E_ALL & ~E_NOTICE);

$Repeat = true;
while ($Repeat)
{
$Repeat = false;
if (ValidatorOpen())
{
	echo "Reset...";
	if (((ExecuteCommand($BillToBill_CMD["Reset"], $CommandResult)) && (ord($CommandResult[3]) == 0)) ||
		((ExecuteCommand($BillToBill_CMD["Reset"], $CommandResult)) && (ord($CommandResult[3]) == 0)))
	{
		echo "ok\n";
		echo "Enable Bill Types...";
		if ((ExecuteCommand($BillToBill_CMD["EnableBillTypes"], $CommandResult)) && (ord($CommandResult[3]) == 0))
		{
			echo "ok\n";
			$LastCode = null;
			while (!$Repeat)
			{
				if (ExecuteCommand($BillToBill_CMD["Poll"], $CommandResult))
				{
					ValidatorSendACK();
					$Code = ord($CommandResult[3]);
					if ($Code != 0)
					{
						if ($Code == $LastCode)
						{echo ".";}
						else
						{
							$LastCode = $Code;
							$ExtendedCode = ord($CommandResult[4]);
							echo "\n".dechex($Code)."H ".$BillToBill_Code[$Code];
							if ($BillToBill_ExtendedCode[$Code][$ExtendedCode] != "") {echo " [".$BillToBill_ExtendedCode[$Code][$ExtendedCode]."]";}
							switch ($Code)
							{
								case 0x43:
								case 0x44:
								case 0x47:
								case 0x48:
									$Repeat = true;
								break;
								case 0x80:
									ExecuteCommand($BillToBill_CMD["Stack"], $CommandResult);
								break;
								case 0x81:
									echo " *BILLING MONEY* [$ExtendedCode]";
								break;
							}
						}
					}
				}
				usleep(300 * 1000);
			}
		}
		else
		{echo "Failed to set bill types!";}
	}
	else
	{echo "Failed to reset!";}
	echo "\n";
	ValidatorClose();
}
else
{echo "ERROR: Validator is not opened!";}
if ($Repeat) {sleep(1);}
}

?>

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Добрый день Коллеги:

 

немного о себе, был "домашним локальным провайдером" по молодости, когда это все зарождалась. Настраивал в свое время спутниковый интернет для раздачи по сети (тогда же был изучен Linux)? когда еще за 1МБ платили =)

 

Сейчас жизнь свела с интернетом, и еще одной теме - софту для платежных терминалов. Скажите, тех кто принимает платежи в офисах (наличка, пока что), было бы интересно "автоматизировать этот узел"?

 

ps: мы не относимся НЕ к одной платежных систем.

 

Автору написал в личку. Если да, то наверное я сначала спрошу разрешение у Админа форума, где и как можно создать эту тему.)

 

Спасибо.

Изменено пользователем MakarkinPRO

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ниже код для валидатора CashCode MVU.

Запускать тупо из консоли.

 

Уже и драйвера на php? Моща! :)))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Уже и драйвера на php? Моща! :)))

 

Мог на Баше, не стал. Ща придет Ванька и скажет что надо было компилять на Сях :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.