@mars130

Ккак сделать url кодирование сигнатуры в Робокасса?

Коллеги, приветствую, может кто-то встречался с робокассой и их робочеками - https://docs.robokassa.ru/ru/#6865

Подскажите пожалуйста как правильно на PHP передавать массив Receipt и URL кодировать его. Пробую такую конструкцию, но как пишут в поддержке мой URL передаётся незакодированным. Версия PHP 5.6

$array= Array(
    "sno" => "usn_income",
    "items" => Array(
        Array(
            "name" => "Услуга",
            "quantity" => "1",
            "sum" => $out_summ,
            "payment_method" => "full_payment",
            "payment_object" => "payment",
            "tax" => "none"
        )
    )
);

$receipt = (htmlspecialchars(strip_tags(urlencode(json_encode($array)))));


// формирование подписи
// generate signature
$crc  = md5("$mrh_login:$out_summ:$inv_id:$receipt:$mrh_pass1:Shp_item=$shp_item");


// HTML-страница с кассой
// ROBOKASSA HTML-page
print "<html><script language=JavaScript ".
      "src='https://auth.robokassa.ru/Merchant/PaymentForm/FormV.js?".
      "MerchantLogin=$mrh_login&OutSum=$out_summ&invoiceID=$inv_id&Shp_item=$shp_item&Receipt=$receipt".
      "&Description=$inv_desc&SignatureValue=$crc'></script></html>";
  • Вопрос задан
  • 284 просмотра
Пригласить эксперта
Ответы на вопрос 3
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
достаточно
$receipt = rawurlencode(json_encode($array));

так же нету кода которым вы собственно передаёте эти данные
Ответ написан
thecool123
@thecool123
Программист на PHP
Если кому-то интересно, сам столкнулся с такой проблемой, как делал оплату для сайта https://vsedizaineri.com - там тоже на PHP была админка и проблема была с передачей параметра Receipt.

В итоге проблема решилась вот как. Параметр в эту сигнатуру передается без rawurlencode, а вот уже для формирования ссылки - там уже с rawurlencode.

Грубо говоря, если по аналогии с кодом выше, получится так:

$receipt_array= Array(
    "sno" => "usn_income",
    "items" => Array(
        Array(
            "name" => "Услуга",
            "quantity" => "1",
            "sum" => $out_summ,
            "payment_method" => "full_payment",
            "payment_object" => "payment",
            "tax" => "none"
        )
    )
);

$receipt = json_encode($receipt_array);
$receipt_url = rawurlencode(json_encode($receipt_array));

$crc  = md5("$mrh_login:$out_summ:$inv_id:$receipt:$mrh_pass1:Shp_item=$shp_item");

print "<html><script language=JavaScript ".
      "src='https://auth.robokassa.ru/Merchant/PaymentForm/FormV.js?".
      "MerchantLogin=$mrh_login&OutSum=$out_summ&invoiceID=$inv_id&Shp_item=$shp_item&Receipt=$receipt_url".
      "&Description=$inv_desc&SignatureValue=$crc'></script></html>";
Ответ написан
@mars130 Автор вопроса
Все мозги уже вскипятил пока разбираюсь, моя сигнатура не сходится с сигнатурой которая дала поддержка. Хотя должна. Т.к. если я беру просто их пример и переводу в сигнатуру, то всё сходится.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы