shicoy Posted July 8, 2015 · Report post Притащили мне терминала оплаты (бывший Cyberplat кажется). Сказали научить принимать платежи напрямую в биллинг (ну шлюз написать не проблема). Вопрос, какой софт туда поставить что бы: - можно было сделать свой UI или как-то кустомизировать (цвета, лого, форма ввода лиц.счета) - умел печатать чеки, фискальную память поддерживал - принимал деньги :) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
pppoetest Posted July 8, 2015 · Report post Смотрите модели купюроприёмника и принтера, гуглите мануалы на сайте производителя и пилите. Мы по крайней мере так поступили. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Wingman Posted July 8, 2015 · Report post Киберплатовский софт неплохо кастомизируется ; умеет складывать платежи для кастомного провайдера в отдельные файлики (которые скриптами можно слать как и куда угодно) А драйвера на купюроприёмник/принтер/тачскрин от софта не зависят Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Умник Posted July 8, 2015 · Report post Они исходники своего терминального софта выкладывали, вот что-то и сейчас есть, но не знаю, насколько живо. https://help.cyberplat.com/projects/terminal/wiki Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
shicoy Posted July 13, 2015 · Report post Спасибо, но с Киберплатом такая засада, что версия 1 клиента, которая кустомизируется и т.д. не умеет работать с фискальной памятью. А доступная версия 3, просит ключей авторизации через сервис Киберплат. Конечно можно что-то скачать с SVN и попробовать самому, но для этого нужен ресурс кодера на Visual C/C++ которого у нас нет. :( Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
stas_k Posted July 14, 2015 · Report post Ну я бы все же посмотрел на модели купюроприемника, и посмотрел в сторону торгового оборудования типа атолл или штрих. у них есть куча компонентов и драйверов для 1С. с готовыми примерами на 1С, вижуальном бэйсике и местами на паскале. не нужен там ресурс кодера на С++. там просто обычный принтер и просто счетчик и просто обычный тачскрин. формочку можно за выходные запилить на php. разворачивать на весь экран браузер в иксах. читать из одного порта сколько купюр ввели. в обычный принтер печатать бумажку. вся кажущаяся сложность программного кода платежных систем от того только, что им нужно поддерживать кучу получателей платежей, в каком то развесистом меню это показывать, регулярно их список обновлять и собственный софт централизованно тоже обновлять. убери это и там не останется почти ничего. когда у тебя один получатель - ты, и софт ты обновляешь руками раз в год, вся задача становится значительно проще. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
shicoy Posted July 16, 2015 · Report post Собственно у нас купюроприемник CashCode, принтер Custom VKP800, плюс будет еще фискальник (модель пока не знаю, видимо он ставится как-то на принтер). Есть кто готов взяться за реализацию, готовы договариваться по вознаграждению. Собственно требуется реализовать следующие шаги: 1) Начало (кнопка оплатить) 2) Ввод договора (запрос check в платежный шлюз) 3) Подтверждение договора (вывод на экран Инициалов и Баланс) 4) Прием денег и подтверждение оплаты 5) Печать чека Ну разумеется, с кустомизированной мордной (лого, телефон и т.д.). Протокол обмена между терминалом и платежных шлюзом OSMP по https. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
stas_k Posted July 16, 2015 · Report post Сказали научить принимать платежи напрямую в биллинг (ну шлюз написать не проблема). Протокол обмена между терминалом и платежных шлюзом OSMP по https. а зачем вам тут OSMP? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
vop Posted July 16, 2015 (edited) · Report post а зачем вам тут OSMP? Патаму-чта, не существует унифицированных протоколов в этой области деятельности, о чем я как-то писал. Поэтому хотят тот протокол, который умеет их биллинг. :) Edited July 16, 2015 by vop Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
stas_k Posted July 16, 2015 · Report post Патаму-чта, не существует унифицированных протоколов в этой области деятельности, о чем я как-то писал. Поэтому хотят тот протокол, который умеет их биллинг. :) А что это за биллинг такой который умеет только осмп? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
vop Posted July 17, 2015 · Report post Патаму-чта, не существует унифицированных протоколов в этой области деятельности, о чем я как-то писал. Поэтому хотят тот протокол, который умеет их биллинг. :) А что это за биллинг такой который умеет только осмп? Я подозреваю, что любой, где платежные системы продаются отдельно. Вот и получилось, что купили уже одну, теперь хотят под нее танцы исполнять. :) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
shicoy Posted July 22, 2015 · Report post Да вообщем протокол может быть любым) Биллинг позволяет. Просто OSMP вроде как наиболее лаконичен) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
rdc Posted August 1, 2015 · Report post Протокол osmp уже фактически стал стандартом. Даже крупные конторы типа МКБ сразу его предлагают… А что это за биллинг такой который умеет только осмп?Любой биллинг заведомо умеет осмп, так что вариант вполне логичен. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
stas_k Posted August 2, 2015 · Report post Любой биллинг заведомо умеет осмп, так что вариант вполне логичен. протокол общения между терминалом и осмп, скорее всего, отличается от протокола общения между осмп и биллингом. я так думаю. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
ThreeDHead Posted August 9, 2015 · Report post Ниже код для валидатора 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);} } ?> Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
MakarkinPRO Posted August 10, 2015 (edited) · Report post Добрый день Коллеги: немного о себе, был "домашним локальным провайдером" по молодости, когда это все зарождалась. Настраивал в свое время спутниковый интернет для раздачи по сети (тогда же был изучен Linux)? когда еще за 1МБ платили =) Сейчас жизнь свела с интернетом, и еще одной теме - софту для платежных терминалов. Скажите, тех кто принимает платежи в офисах (наличка, пока что), было бы интересно "автоматизировать этот узел"? ps: мы не относимся НЕ к одной платежных систем. Автору написал в личку. Если да, то наверное я сначала спрошу разрешение у Админа форума, где и как можно создать эту тему.) Спасибо. Edited August 10, 2015 by MakarkinPRO Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Wingman Posted August 11, 2015 · Report post Ниже код для валидатора CashCode MVU. Запускать тупо из консоли. Уже и драйвера на php? Моща! :))) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
ThreeDHead Posted August 11, 2015 · Report post Уже и драйвера на php? Моща! :))) Мог на Баше, не стал. Ща придет Ванька и скажет что надо было компилять на Сях :) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...