Robokassa, робочеки и подпись crc

105
18 февраля 2021, 00:10

Не так давно Робокасса ввела решение "Робочеки", которое позволяет не заботиться о приобретении ККТ. Для того, чтобы его использовать, нужно добавить в код всего один параметр receipt (мануал). И с ним большая проблема - никак не могу его правильно сформировать. Пробую что-то вроде этого:

$receipt = array(
    'sno' => 'usn_income',
    'items' => array(
        array(
        "name" => 'Предоплата',
        "quantity" => 1.0,
        "sum" => 300.00,
        "payment_method" => "full_payment",
        "payment_object" => "payment",
        "tax" => "none"
        )
    )
);

$encoded_receipt = json_encode($receipt);
$crc = md5("$mrh_login:$out_summ:$inv_id:$encoded_receipt:$mrh_pass1");

Получаю ошибку crc. Техподдержка ответила следующее:

Необходимо добиться такого вида -
receipt={"sno": "usn_income","items":[{"name":"Предоплата экскурсии","quantity":1.0,"sum":300.00,"payment_method":"full_payment","payment_object":"payment","tax":"none"}]}

И теперь вопрос: как добиться такого вида на php? Пробовал и так, и сяк, получаю ошибку. Может быть, как-то неправильно вкладываю объекты/массивы.

В общем, если кто-то уже реализовывал подобное решение Робокассы на php, помогите, пожалуйста :)

Answer 1

Есть объекты { .. }, а есть массивы [ .. ]. Объекты в PHP это экземпляры классов.

В простом варианте собрать можно так:

$receipt = new stdClass();
$receipt->sno = 'usn_income';
$receipt->items = [];
$item = new stdClass();
$item->name = 'Предоплата';
$item->quantity = 1.0;
$item->sum = 300.00;
$item->payment_method = "full_payment";
$item->payment_object = "payment";
$item->tax = "none";
$receipt->items[] = $item;
$encoded_receipt = json_encode($receipt, JSON_UNESCAPED_UNICODE);

Что бы не собирать объекты вручную можно сразу читать объект из базы (или десериализовать из API) в объект. А избежать рутины можно если использовать библиотеки сериалайзеров, например JmsSerializer

READ ALSO
Preg_replace и знак доллара

Preg_replace и знак доллара

В цикле формируется значение цен, примерно так:

136
Не могу понять причину ошибки Fatal error: Cannot redeclare class Less_VisitorReplacing

Не могу понять причину ошибки Fatal error: Cannot redeclare class Less_VisitorReplacing

Ошибка проявляется не всегда, чаще после очистки кеша сайтаБывает 5 проходов по сайту нормально, на 6 выскакивает ошибка

119
Уточнение по работе функции move_uploaded_file

Уточнение по работе функции move_uploaded_file

Я хочу сделать проверку: Если файл перемещен, то сделать что-тоПодскажите какой код верный:

103
zend_mm_heap corrupted error

zend_mm_heap corrupted error

У меня есть скрипт на php, который работает используя pthreadsТо есть многопоточность

129