下面的文档说明了如何在PHP中生成用于消息身份验证的MAC代码:
https://docs.evosnap.com/hosted-payments-section/message-authentication-code-mac/
它说,你需要按字母顺序连接变量,例如:
// parameters and values
$code = “merchant”;
$action = “get_order”;
$return = “json”;
$merchant_order_id = “808”;
// concatenate the parameter values in alphabetical order by parameter name
$plain = $action.$code.$merchant_order_id.$return;
正如您在上面的示例中所看到的,变量在PHP中按字母顺序排列,但我从未听说过您可以在执行时间内知道变量的名称,该API如何检查变量是否按字母顺序连接?我不明白。
答案 0 :(得分:1)
除非您使用variable varaible名称,否则它基本上只是说" api需要这个特定顺序的参数"这恰好是按字母顺序排列的。我觉得这确实非常聪明,以确保开发人员以非常具体的方式实现字符串要求(havinng SDK将是另一种选择)。
否则,您可以使用一组键和key sort它们......
// parameters and values
$array = array(
'code' => 'merchant',
'action' => 'get_order',
'return' => 'json',
'merchant_order_id' => 808
);
// Sort the array by key
ksort( $array );
// concatenate the parameter values in alphabetical order by parameter name
$plain = implode( '', $array );
更新2018/02/20
他们的代码正在构建一个"签名"通过以特定顺序连接字符串
// concatenate the parameter values in alphabetical order by parameter name
$plain = $action.$code.$merchant_order_id.$return;
// then add the private authkey
$plain.= $authkey;
// now generate the signature using the md5() function
$signature = md5($plain);
$signature
将是来自MD5函数的32个字符的字符串
如果您更改了用于构建$plain
的变量的顺序,您将收到md5()
函数的不同签名。
API将采用您提供的有限数量的参数,并以完全相同的顺序执行相同的MD5功能,以确保请求未被修改。
没有"智能"在这里,简单的字符串连接,所有他们想要的是开发人员执行MD5功能的顺序与他们从他们那边执行的顺序完全相同。