Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将工作的PHP脚本转换为CryptoJS以访问远程API?_Javascript_Php_Jquery_Cryptojs - Fatal编程技术网

Javascript 如何将工作的PHP脚本转换为CryptoJS以访问远程API?

Javascript 如何将工作的PHP脚本转换为CryptoJS以访问远程API?,javascript,php,jquery,cryptojs,Javascript,Php,Jquery,Cryptojs,我有下面的PHP脚本,它可以完美地访问远程RESTAPI。最后,我按照?fromDate=2020-07-22的思路给它一个查询,它生成一个最终URL,根据该响应返回XML。我的问题是,我已经尝试将其转换为Javascript,以便在节点应用程序中运行它(我对Javascript是新手,对JQuery几乎一无所知!!)。我一辈子都不能让它工作。我认为问题在于将查询fromDate2020-07-22传递到参数中,该参数是生成正确封装外形所必需的,该封装外形需要包含在最终REST api请求中,以

我有下面的PHP脚本,它可以完美地访问远程RESTAPI。最后,我按照
?fromDate=2020-07-22
的思路给它一个查询,它生成一个最终URL,根据该响应返回XML。我的问题是,我已经尝试将其转换为Javascript,以便在节点应用程序中运行它(我对Javascript是新手,对JQuery几乎一无所知!!)。我一辈子都不能让它工作。我认为问题在于将查询
fromDate
2020-07-22
传递到参数中,该参数是生成正确封装外形所必需的,该封装外形需要包含在最终REST api请求中,以便正确验证

我已经在下面介绍了最初的PHP脚本,以及我制作JS等价物的努力。我已经为此工作了几个小时,我的大脑终于放弃了

谁能看出我错在哪里


这是我的JS版本:


$(文档).ready(函数(){
var url='1〕https://www.api_endpoint.com/rest/1.0/reports?fromDate=2020-07-22';//我将查询附加到哪里
var publicKey='在此处插入公钥';
var secretKey='insert private key here';
var timestamp=Math.round(new Date().getTime()/1000);
var参数stohmac={
“myWebServiceID”:公钥,
“秘钥”:秘钥,
“时间戳”:时间戳,
“fromDate”:“2020-07-22”//上次尝试手动插入查询的位置
};
var stringParametersToHmac=jQuery.param(parametersToHmac);
var hash_hmac=CryptoJS.HmacSHA1(stringParametersToHmac,secretKey);
var base64=hash_hmac.toString(CryptoJS.enc.base64);
var最终结果={
“myWebServiceID”:公钥,
“时间戳”:时间戳,
“足迹”:base64
};
var finalQueryParams=jQuery.param(finalResult);
var finalUrl=url+“?”+finalQueryParams;
控制台日志(finalUrl);

我曾尝试手动输入查询并尝试对其进行各种解析,但我一直在努力解决需要将其插入何处的概念,以确保足迹正确生成,因此不会被端点拒绝。

好吧,非常令人惊讶的是,一旦你问了一个问题,它就可以帮助你澄清你做错了什么。在generateFootPrint函数中的PHP脚本中,有一个ksort函数,该函数在PHP中按字母顺序对键进行排序。我在翻译为Javascript时忽略了这一点

因此,更改传递给Hmac的参数:

var参数stohmac={
“myWebServiceID”:公钥,
“秘钥”:秘钥,
“时间戳”:时间戳,
“fromDate”:“2020-07-22”//从这里开始移动
};
致:

var参数stohmac={
“fromDate:‘2020-07-22’,//到这里!!
“myWebServiceID”:公钥,
“秘钥”:秘钥,
“时间戳”:时间戳
};
i、 e.按键的字母顺序,向PHP脚本返回相同的封装外形,当编译成rest URL时,端点接受并返回所需的数据


谢谢收听!

好的,非常令人惊讶的是,一旦你问了一个问题,它就可以帮助你澄清你做错了什么。在generateFootPrint函数的PHP脚本中,有一个ksort函数,它可以在PHP中按字母顺序对键进行排序。我在翻译为Javascript时错过了这一点

因此,更改传递给Hmac的参数:

var参数stohmac={
“myWebServiceID”:公钥,
“秘钥”:秘钥,
“时间戳”:时间戳,
“fromDate”:“2020-07-22”//从这里开始移动
};
致:

var参数stohmac={
“fromDate:‘2020-07-22’,//到这里!!
“myWebServiceID”:公钥,
“秘钥”:秘钥,
“时间戳”:时间戳
};
i、 e.按键的字母顺序,向PHP脚本返回相同的封装外形,当编译成rest URL时,端点接受并返回所需的数据


感谢您的收听!

很高兴您自己解决了这个问题!!我们在工作中使用的帮助我们发现代码中问题的方法是Rubber Duck Debugging(),听起来像是您问了这个问题,只是为了分享一下,以防您发现它在未来的开发工作中有用!)@Luke,这正是发生的事情。:)很高兴你自己设法解决了它!!我们在工作中使用的帮助我们发现代码中问题的东西是Rubber Duck Debugging(),这听起来像是你通过问这个问题所做的-只是分享一下,以防你在未来的开发工作中发现它有用!:)@Luke,这正是发生的事情。:)