Last active
October 30, 2024 04:46
-
-
Save dimitarminchev/08d8ab833fa481a8cc5c1e365a16c05e to your computer and use it in GitHub Desktop.
Borica Request 4.0
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?php | |
| /* | |
| # Borica Request 4.0 | |
| Изпращане на заявка за извършване на електронно плащане: [borica_request.php](https://gist.github.com/dimitarminchev/08d8ab833fa481a8cc5c1e365a16c05e) | |
| - Документация: [Borica APGW e-Gateway Resources](https://3dsgate-dev.borica.bg/) | |
| - Автор: [доц. д-р Димитър Минчев](http://www.minchev.eu) | |
| - Eлектронна поща: [[email protected]](mailto:[email protected]) | |
| */ | |
| // Gateway | |
| $GATEWAY = "https://3dsgate-dev.borica.bg/cgi-bin/cgi_link"; // Development | |
| // $GATEWAY = "https://3dsgate.borica.bg/cgi-bin/cgi_link"; // Production | |
| // DATA: MAC_GENERAL = TERMINAL, TRTYPE, AMOUNT, CURRENCY, ORDER, DESC, MERCHANT, MERCH_NAME, ADDENDUM, AD.CUST_BOR_ORDER_ID, TIMESTAMP, NONCE, P_SIGN | |
| $TERMINAL = "V1800001"; // Идентификатор на терминала получен от БОРИКА, Размер: 8 | |
| $TRTYPE = "1"; // Тип на транзацията: 1, 12, 21, 22, 24, 90, Разпер: 1-2 | |
| $AMOUNT = "1.23"; // Сума на плащането, Формат: xx.xx, Размер: 1-12 | |
| $CURRENCY = "BGN"; // Валута на плащането, Размер: 3, Формат: ISO-4217 | |
| $ORDER = "001234"; // Номер поръчка, Размер: 6 | |
| $DESC = "Наименование на поръчката"; // Наименование на поръчката, Размер: 8-50 | |
| $MERCHANT = "V1800001"; // Идентификатор на търговеца получен от БОРИКА, Размер: 10-15, Тест: $MERCHANT = "1600000001"; | |
| $MERCH_NAME = "Наименование на търговеца"; // Наименование на търговеца, Размер: 18 | |
| $ADDENDUM = "AD,TD"; | |
| $AD_CUST_BOR_ORDER_ID = $ORDER."@".$ORDER; // ORDER + 16 символа | |
| $TIMESTAMP = gmdate("YmdHis"); // Формат: YYYYMMDDHHMMSS, UTC, Размер: 14 | |
| $NONCE = strtoupper(bin2hex(openssl_random_pseudo_bytes(16))); // Формиране на сигнатура за подписване, Размер: 1-64 | |
| $RFU = "-"; // Резервирано поле за бъдеща употреба | |
| $COUNTRY = "BG"; // Страна, Размер: 2 | |
| $MERCH_GMT = "+03"; // Часова зона на търговеца: GMT 3 | |
| $MERCH_URL = "https://www.xxx.bg"; // Линк на страницата на търговеца, Размер: 1-250 | |
| $BACKREF = "https://www.xxx.bg/borica_response.php"; // Линк при връщане след плащане, Размер: 1-250 | |
| $EMAIL = "[email protected]"; // Електронна поща, Размер: 26 | |
| // SIGN: MAC_GENERAL = TERMINAL, TRTYPE, AMOUNT, CURRENCY, ORDER, TIMESTAMP, NONCE, RFU | |
| $P_SIGN = | |
| strlen($TERMINAL).$TERMINAL. | |
| strlen($TRTYPE).$TRTYPE. | |
| strlen($AMOUNT).$AMOUNT. | |
| strlen($CURRENCY).$CURRENCY. | |
| strlen($ORDER).$ORDER. | |
| strlen($TIMESTAMP).$TIMESTAMP. | |
| strlen($NONCE).$NONCE. | |
| $RFU; | |
| // Информация за цифровия частен ключ | |
| $private_key = '-----BEGIN PRIVATE KEY----- | |
| MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC5z1/LHY1GcX9f | |
| vMOBZPx3edgmqFkPd7eV136Nog9+VeM4UMfg22d64LAwpRHdfFigTPkc9leR68xT | |
| JXGeiiGJSaG+Vb9oUK3yb9W7YMhk1vJy4p2oyo77Sirki4bhh8RPIVWAqeVUgEL/ | |
| f5ZuZSNzB2cFkUOknbRwM/j98fft4lgZN/nYkYjW22UaPA7ULEBMxmQUKrJKi04S | |
| PVIG1iKzLh3jVyRsxi+giFrlQ+/jVWA0wJm8B25jsRcwObjL6+MczutVKmaNjaVy | |
| FNkBtLOWSCf4A6i4xOfafWoEx4tEa4Dl5PTqQI4PBvH6SW3lKulfNpa5m1wvnlA3 | |
| hFy9IfUPAgMBAAECggEBAJz/stI9yxQ9bEGpjovzlzsgcdngHzhpkG6EocLsryix | |
| S4dXAjxlRp9V4KmJoHnDymLQByFIqJ98XK3YkpNB5apJ0+euLkfm+8NAaZik404J | |
| LNyTzGFFneCIP4vStQo1HFM8ODG53DM1GOcnmCT5QiW8mHjk0AH02vR/haCU5kdR | |
| qQeMBnGAuqOcO3T7QcuK2AMO7BoGrkq0+V58DyCdf1UpeLoi71HCdBpj8FPHcU0H | |
| ScsPUrWXSkJSVj7R68AUtI4Sss3CEk7DbbSLcW1DfmX6esujM/fx1SLc9Bue4Ipa | |
| 0ec7wKvvMbLap0gWOOxZGRtxS9ALJ3T75AOjDx38q6ECgYEA86cPMYUePy/l9CEu | |
| F2fsr0LnpB3clwEhhMeIIjKMCTVnPlHMy8Sm9WrRdErKMpsIbOWgeIqUaPPCt3NZ | |
| FTgJnIJnFR4KI5qPOb3ZRA9OI6eliVvdgxe7e/bHe74b/v/uE6378ddtniHCIvgk | |
| 6Oi9/luImv3kYzX1pmJr/8VZQdECgYEAwznqU1QiPaUFtZwkb3hIoTcIYlKwIbmP | |
| 3HYdsS2p20WHh3XJC9nojABIBgJJYKdACzQyIy1FJJ3ga0fgkSZ5KL1LXmclXXL6 | |
| lzdQNIyF/boRP+XC7fB9MNwIClqJCnmciKWE4xCt9GgEiLnJDYnOhGiQ50BuxJFn | |
| RU6RxjAPoN8CgYEA3LmYr/mx/vf7T3/Ha3jAF716b1iF/14M6WaA0soLxkPUtcYQ | |
| yv/paCZOfRVLuzBrH4ueJdUUwUciPGKIbwqG2nvfumeuM7bOzTZJXrimxvIWqirI | |
| rvuO4qwa5uTAI+/h034n4VyRd1GJt3gop75Ab+6oABDFF4NIeGRtBhXX2CECgYB9 | |
| /QRCHouyaKsUlt3UqjWFBPT+LwrH2O8EgZ2L2EJD5c0fGF5UrZ4rq4rPhe5A1+62 | |
| zEqG9RIoHVLVKR+9zKxoJDFdjQdKFYeuyt2R7BYUtl2ndOmlkIvaWkU+GUtTXUQt | |
| 01O9DeiVUAONEQi1GfgS70CEXMqfRI725UuiMSYE1QJ/EkPO8VPbWf+BgKovYFf1 | |
| AsStOfMMvrgVn8e/vZmWluaGb40L34Dxuvv3YRk1EsQFirGZ5XDDCm5r8H1IY8Ne | |
| PXnxLP2opIuch1JHQdebFZqN1C68pX6hopEixOmwShhaNXNJ5RN8c9q+4NXIu73n | |
| lKFJBDsxoMVB/VEoVeQEMg== | |
| -----END PRIVATE KEY-----'; | |
| $private_pass = ''; | |
| /* | |
| // Отваряне на файла съдържащ цифровия частен ключ | |
| $private_key_file = "private.key"; | |
| $fp = fopen($private_key_file, "r"); | |
| $private_key = fread($fp, filesize($private_key_file)); | |
| fclose($fp); | |
| */ | |
| // Подписване на съобщението с цифров сертификат | |
| $private_key_id = openssl_get_privatekey($private_key, $private_pass); | |
| openssl_sign($P_SIGN, $signature, $private_key_id, OPENSSL_ALGO_SHA256); | |
| openssl_free_key($private_key_id); | |
| // Формиране окончателна подписана сигнатура | |
| $P_SIGN = strtoupper(bin2hex($signature)); | |
| // Формуляр за извършване на плащане | |
| echo<<<EOT | |
| <h1>Borica Request 4.0</h1> | |
| <pre> | |
| GATEWAY: $GATEWAY | |
| TERMINAL: $TERMINAL | |
| TRTYPE: $TRTYPE | |
| AMOUNT: $AMOUNT | |
| CURRENCY: $CURRENCY | |
| ORDER: $ORDER | |
| DESC: $DESC | |
| MERCHANT: $MERCHANT | |
| MERCH_NAME: $MERCH_NAME | |
| MERCH_NAME: $ADDENDUM | |
| AD_CUST_BOR_ORDER_ID: $AD_CUST_BOR_ORDER_ID | |
| TIMESTAMP: $TIMESTAMP | |
| NONCE: $NONCE | |
| RFU: $RFU | |
| COUNTRY: $COUNTRY | |
| MERCH_GMT: $MERCH_GMT | |
| MERCH_URL: $MERCH_URL | |
| BACKREF: $BACKREF | |
| EMAIL: $EMAIL | |
| P_SIGN: $P_SIGN | |
| </pre> | |
| <form action="$GATEWAY" method="post"> | |
| <!-- TERMINAL: 8 --> | |
| <input type="hidden" name="TERMINAL" value="$TERMINAL" /> | |
| <!-- TRTYPE: 1, 12, 21, 22, 24, 90 --> | |
| <input type="hidden" name="TRTYPE" value="$TRTYPE" /> | |
| <!-- AMOUNT: 1-12 --> | |
| <input type="hidden" name="AMOUNT" value="$AMOUNT" /> | |
| <!-- CURRENCY: 3 --> | |
| <input type="hidden" name="CURRENCY" value="$CURRENCY" /> | |
| <!-- ORDER: 6 --> | |
| <input type="hidden" name="ORDER" value="$ORDER" /> | |
| <!-- DESC: 8-50 --> | |
| <input type="hidden" name="DESC" value="$DESC" /> | |
| <!-- MERCHANT: 10-15 --> | |
| <input type="hidden" name="MERCHANT" value="$MERCHANT" /> | |
| <!-- MERCH_NAME: 18 --> | |
| <input type="hidden" name="MERCH_NAME" value="$MERCH_NAME" /> | |
| <!-- ADDENDUM --> | |
| <input type="hidden" name="ADDENDUM" value="$ADDENDUM" /> | |
| <!-- AD.CUST_BOR_ORDER_ID --> | |
| <input type="hidden" name="AD.CUST_BOR_ORDER_ID" value="$AD_CUST_BOR_ORDER_ID" /> | |
| <!-- TIMESTAMP: 14 --> | |
| <input type="hidden" name="TIMESTAMP" value="$TIMESTAMP" /> | |
| <!-- NONCE: 64 --> | |
| <input type="hidden" name="NONCE" value="$NONCE" /> | |
| <!-- RFU: - --> | |
| <input type="hidden" name="RFU" value="-" /> | |
| <!-- COUNTRY: 2 --> | |
| <input type="hidden" name="COUNTRY" value="$COUNTRY" /> | |
| <!-- MERCH_GMT: 3 --> | |
| <input type="hidden" name="MERCH_GMT" value="$MERCH_GMT" /> | |
| <!-- MERCH_URL: 1-250 --> | |
| <input type="hidden" name="MERCH_URL" value="$MERCH_URL" /> | |
| <!-- BACKREF: 1-250 --> | |
| <input type="hidden" name="BACKREF" value="$BACKREF" /> | |
| <!-- EMAIL: 26 --> | |
| <input type="hidden" name="EMAIL" value="$EMAIL" /> | |
| <!-- P_SIGN: 512 --> | |
| <input type="hidden" name="P_SIGN" value="$P_SIGN" /> | |
| <!-- BUTTON --> | |
| <input type="submit" value="Payment" /> | |
| </form> | |
| EOT; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Бях разбрал, че CardholderName е името изписано на картата, а реално е името на потребителя - данни, които разбира се имам.