Я хотел бы знать, какую функцию я могу использовать для создания сигнатуры для платежных ссылок Instamojo в PHP и какую процедуру следует выполнять, если бы у меня был массив значений только для чтения?Как создать подпись для платежной ссылки Instamojo в PHP?
ответ
Вы можете использовать функцию hash_hmac
в PHP для создания подписи. Instamojo использует алгоритм «sha1», поэтому, ваш hash_hmac
вызов будет выглядеть так:
hash_hmac("sha1", $message, $salt)
Здесь $message
собирается быть "|"
отделенные значения и $salt
будут частные соли из developers page (убедитесь, что вы вошли в систему) ,
Алгоритм генерации $message
является:
организовать только для чтения полей в алфавитном порядке их ключей. Если у вас есть клавиши с прописными буквами, конвертируйте их в нижний регистр.
Скажем URL является:
Для приведенного выше URL вы получите следующий порядок:
data_amount
data_email
data_name
data_phone
Используя приведенный выше порядок ключей мы получим значения в следующем порядке:
- 123,45
- [email protected]
- Адитья Сенгупту
Теперь конкатенации вышеуказанные значения, используя |
(труба) оператора, так $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');
Для получения дополнительной информации читать их Integration documentation и How do I ensure that the link is tamper proof?.