Как создать подпись для платежной ссылки Instamojo на PHP?

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

2

Решение

Вы можете использовать hash_hmac функция в PHP для создания подписи. Instamojo использует алгоритм «sha1», поэтому ваш hash_hmac звонок будет выглядеть так:

hash_hmac("sha1", $message, $salt)

Вот $message будет "|" разделенные значения и $salt будет частная соль от страница разработчиков(убедитесь, что вы вошли в систему).

Алгоритм генерации $message является:

Организовать только для чтения поля в алфавитном порядке их ключей. Если у вас есть какие-либо клавиши с заглавными буквами, преобразовать их в нижний регистр Письма в первую очередь.

Допустим, URL-адрес:

https://www.instamojo.com/demo/demo-offer/?data_name=Aditya+Sengupta&[email protected]&data_phone = 9999999999&data_amount = 123.45&data_readonly = имя_данных&data_readonly = data_email&data_readonly = data_phone&data_readonly = data_amount

Для указанного выше URL вы получите следующий заказ:

  1. data_amount
  2. data_email
  3. data_name
  4. data_phone

Используя приведенный выше порядок ключей, мы получим значения в следующем порядке:

  1. 123,45
  2. [email protected]
  3. Адитья Сенгупта
  4. 9999999999

Теперь объедините вышеуказанные значения, используя |(труба) оператор, так $message будет выглядеть так:

123.45|[email protected]|Aditya Sengupta|9999999999

Если твой $salt это «abcde», тогда вы получите это в качестве подписи:

$ php -a
Interactive shell

php > $message = "123.45|[email protected]|Aditya Sengupta|9999999999";
php > $salt = "abcde";
php > echo hash_hmac("sha1", $message, $salt) . "\n";
676a4b5ba30e464f027249747a63ea587f8c4b9a

Как это сделать, если у меня был массив значений только для чтения?

Ну, сначала нужно отсортировать массив по ключам, он должен быть регистрозависимым. Если вы используете PHP 5.4.0 + Вы можете сделать что-то вроде этого:

php > $read_only_fields = ["data_email" => "[email protected]", "data_Phone" => "9999999999", "data_name" => "Aditya Sengupta", "data_Amount" => "123.45"];
php > ksort($read_only_fields, SORT_STRING | SORT_FLAG_CASE);
php > $message = implode('|', $read_only_fields);
php > echo $message . "\n";
123.45|[email protected]|Aditya Sengupta|9999999999
php > $salt = "abcde";
php > echo hash_hmac("sha1", $message, $salt) . "\n";
676a4b5ba30e464f027249747a63ea587f8c4b9a

Для более старых версий PHP (старше 5.4.0) используйте это для сортировки:

uksort($data, 'strcasecmp');

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

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]