如何在文档中应用一些关于按字母顺序连接变量的逻辑?

时间:2018-02-18 19:58:45

标签: php variables text concatenation payment

下面的文档说明了如何在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如何检查变量是否按字母顺序连接?我不明白。

1 个答案:

答案 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功能的顺序与他们从他们那边执行的顺序完全相同。