如何在 PHP 中为 Instamojo 的付款 link 创建签名?
How to create a signature for Instamojo's payment link in PHP?
我想知道在 PHP 中我可以使用哪个函数为 Instamojo 的支付链接创建签名,如果我有一个只读值数组,我应该遵循什么程序?
您可以使用PHP中的hash_hmac
函数来创建签名。 Instamojo 使用 "sha1" 算法,因此,您的 hash_hmac
调用将如下所示:
hash_hmac("sha1", $message, $salt)
此处 $message
将是 "|"
分隔值,$salt
将是来自 developers page 的私有盐(确保您已登录)。
生成$message
的算法为:
按键的字母顺序排列 只读 字段。如果您有任何带有大写字母的键,先将它们转换为小写字母[=75=]。
假设 url 是:
对于上述 url 你会得到以下顺序:
data_amount
data_email
data_name
data_phone
使用上面的键顺序,我们将按以下顺序获得值:
- 123.45
- aditya@instamojo.com
- 阿迪亚·森古普塔
- 9999999999
现在使用 |
(管道)运算符连接上述值,因此 $message
将如下所示:
123.45|aditya@instamojo.com|Aditya Sengupta|9999999999
如果您的 $salt
是 "abcde" 那么您将得到这个作为签名:
$ php -a
Interactive shell
php > $message = "123.45|aditya@instamojo.com|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" => "aditya@instamojo.com", "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|aditya@instamojo.com|Aditya Sengupta|9999999999
php > $salt = "abcde";
php > echo hash_hmac("sha1", $message, $salt) . "\n";
676a4b5ba30e464f027249747a63ea587f8c4b9a
对于 PHP 的旧版本(早于 5.4.0)使用此进行排序:
uksort($data, 'strcasecmp');
有关详细信息,请阅读他们的 Integration documentation and How do I ensure that the link is tamper proof?。
我想知道在 PHP 中我可以使用哪个函数为 Instamojo 的支付链接创建签名,如果我有一个只读值数组,我应该遵循什么程序?
您可以使用PHP中的hash_hmac
函数来创建签名。 Instamojo 使用 "sha1" 算法,因此,您的 hash_hmac
调用将如下所示:
hash_hmac("sha1", $message, $salt)
此处 $message
将是 "|"
分隔值,$salt
将是来自 developers page 的私有盐(确保您已登录)。
生成$message
的算法为:
按键的字母顺序排列 只读 字段。如果您有任何带有大写字母的键,先将它们转换为小写字母[=75=]。
假设 url 是:
对于上述 url 你会得到以下顺序:
data_amount
data_email
data_name
data_phone
使用上面的键顺序,我们将按以下顺序获得值:
- 123.45
- aditya@instamojo.com
- 阿迪亚·森古普塔
- 9999999999
现在使用 |
(管道)运算符连接上述值,因此 $message
将如下所示:
123.45|aditya@instamojo.com|Aditya Sengupta|9999999999
如果您的 $salt
是 "abcde" 那么您将得到这个作为签名:
$ php -a
Interactive shell
php > $message = "123.45|aditya@instamojo.com|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" => "aditya@instamojo.com", "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|aditya@instamojo.com|Aditya Sengupta|9999999999
php > $salt = "abcde";
php > echo hash_hmac("sha1", $message, $salt) . "\n";
676a4b5ba30e464f027249747a63ea587f8c4b9a
对于 PHP 的旧版本(早于 5.4.0)使用此进行排序:
uksort($data, 'strcasecmp');
有关详细信息,请阅读他们的 Integration documentation and How do I ensure that the link is tamper proof?。