我正在尝试使用最少文档的api。我唯一的提示是"伪代码"的PHP。我不知道php,似乎无法弄清楚它们的含义。
$codice_sha1 = sha1(implode(‘,’, $params) . ‘,’ . $secret);
$codice = base64_encode($key . ‘:’ . $codice_sha1);
impode
似乎与JavaScript join
类似,但通常params是键值对。所以我真的不知道这是怎么回事。任何有成语知识的php忍者知道这意味着什么?
以下是完整的api文档https://www.docebo.com/lms-docebo-api-third-party-integration/#onlinedoc
答案 0 :(得分:1)
在您给出的代码示例中,int main(void) {
char userInput;
while (userInput != 'q')
{
cin >> userInput;
switch (userInput)
{
case 'a': break;
default: break;
}// end switch
}//end while
return 0;
}//end main
的目的是将所有单独的信息位连接成一个字符串。
要将其划分为单独的代码行,您可以相对清楚地看到正在发生的事情。
implode(',', $params) . ',' . $secret
然后,代码的目的是对字符串进行编码(可能是密码哈希,以便以后进行身份验证)
答案 1 :(得分:1)
基本上我如何看待这个如下。在Web上,您有两种方法将参数发送到另一个站点:GET和POST。无论哪种方式,参数都将是字符串,而不是数组或任何数据类型。这就是HTTP的工作原理。
确定。所以我正在写一个api。我希望参数sha1e̶n̶c̶r̶y̶p̶t̶e̶d̶散列。我该怎么办?我可以告诉我的客户发送它:
$requestUrl = "example.com/api?key1=" . sha1($value1) . "&key2=" . sha1($value2);
OR
$params = array("key1" => "value1", "key2" => "value2");
$requestUrl = "example.com/api?params=" . base64_encode(sha1(implode(',', $params)));
如果有一长串参数,第二个更有意义。
另外,如果你不希望中间人分别尝试和解密每个参数,我认为这比解密它们更容易理解,你可能会选择这种方法。
Base64编码不得不担心像&
这样的字符会破坏GET请求的查询字符串。
基本上,它由API创建者决定。它不是使用API的开发人员的选择。
编辑:当我忘记sha1()只是一个哈希算法而不是可逆加密时,我最初的想法更有意义。可能有一种方法他们仍然可以使这项工作,但它的错综复杂和一个非常糟糕的想法。答案 2 :(得分:0)
php中的Implode只需要一个数组并通过连接所有数组元素将它变成一个字符串,用指定的分隔符分隔。
所以implode('|', [1,2,3,4,5]);
会产生字符串" 1 | 2 | 3 | 4 | 5" 。
一般 在哈希上使用,因为键丢失了,并且在多维数组上根本不起作用。我不明白你是如何得出结论$params
不是一个正常的一维数组。