我需要创建一个具有以下结构的查询字符串: https://api.company.com/api/hello.json?app_id= $名称&安培;散列=散列$
$ hash变量应该是当前挑战字符串与我的客户端密钥连接的SHA1。
我通过运行以下bash脚本(这给了我正确的响应)在控制台中测试了我的api凭据
$ challenge=$(curl -s "http://www.company.com/api/hello.json?app_id=$name" | head -1 | sed 's/.*"challenge": *"\([0-9]*\)".*/\1/')
$ hash=$(printf $challenge$key | openssl dgst -sha1 | sed 's/^.*\([a-f0-9]\{40\}\).*$/\1/')
$ curl "http://www.company.com/api/hello.json?app_id=$name&hash=$hash"
但是,当我尝试使用PHP以编程方式重新创建$ hash变量时,由于错误的哈希参数,身份验证失败。
要创建我使用的$ hash参数:
$hash = sha1($challenge . $key);
但显然我在这里遗漏了一些东西。我假设bash脚本中的表达式:
a-f0-9]\{40\}\).*$/\1/
检查字符串是否是40个字符的十六进制字符串,但我不确定如何将其集成到我的PHP代码中。
如果我在控制台中检查$ challenge变量的值,我会得到9位数字值,如:244971205,而我的PHP脚本中的同一个变量有一个字符串值。这可能是我的$ hash参数格式不正确的原因吗?
值得注意的是,如果我使用运行
得到的$ hash变量值echo "$hash"
在我的查询字符串中直接在控制台中api调用成功,但我希望以编程方式获得相同的值。
如果有人能指出我正确的方向,我将非常感激。
答案 0 :(得分:0)
原来我过于复杂了。为了获得$challenge
变量的正确值,我实际需要做的是用json_decode
解析JSON数据,之后只需访问保存数值的属性,如{{1} }}