Jquery 使用外部网站上div的API密钥验证请求

Jquery 使用外部网站上div的API密钥验证请求,jquery,validation,iframe,curl,Jquery,Validation,Iframe,Curl,嗨,亲爱的朋友们 我正在努力解决一个相当复杂的问题,我必须为我工作的公司开发这个问题。我用JavaScript开发了一个电能计算器,它位于我们自己的web服务器上,作为一个网页,包含完整的DOM html、头、体和大量的.css和.js文件 问题是计算器必须是我们客户网页的一部分,在div中,它从我们的web服务器加载计算器。当公司网站请求计算器时,它必须将一个带有请求的机密API密钥带到我们的域,该域验证客户,并将计算器发送回客户已付款的正确视图 我尝试了一个IFRAME,它工作得很好,但是没

嗨,亲爱的朋友们

我正在努力解决一个相当复杂的问题,我必须为我工作的公司开发这个问题。我用JavaScript开发了一个电能计算器,它位于我们自己的web服务器上,作为一个网页,包含完整的DOM html、头、体和大量的.css和.js文件

问题是计算器必须是我们客户网页的一部分,在div中,它从我们的web服务器加载计算器。当公司网站请求计算器时,它必须将一个带有请求的机密API密钥带到我们的域,该域验证客户,并将计算器发送回客户已付款的正确视图

我尝试了一个IFRAME,它工作得很好,但是没有办法发送一个带有请求的机密api密钥。公司网页需要是一个.html文件:

<iframe src="http://localhost/calc/energycalc.php"  
        width="815" 
        height="572" 
        frameborder="0" 
        scrolling="no" 
        style="border-radius: 7px;">
</iframe>
php脚本使用密钥作为POST参数执行cURL请求:

$api_key = "9chuPsWJBSpbiphxgxF3ld9pSWQQIEj5dPEkbstj0YReumqQ06"
$url = 'http://localhost/calc/energycalc.php' // our web server
$post_params['key'] = $api_key

$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_params);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$reply = curl_exec($ch);
curl_close($ch);

echo $reply;
这无法正常工作-它不会返回任何样式

请询问是否有可能需要澄清的事项

有人对如何解决这个问题或改进我的解决方案有任何意见吗

任何帮助都将不胜感激

谢谢,
David我不太确定我是否遵循了你的逻辑,但让我试着重新陈述一下。您正在向客户端服务器上的key.php页面发送AJAX请求?然后,key.php页面向远程web服务器发送了一个curl请求

jQueryAjax调用是否可以向远程服务器发送请求?它会将机密API密钥传递给服务器,并接收回您希望放在客户端页面上的模板?然后,服务器将验证API密钥并相应地执行操作。如果API密钥无效,那么您将向jQuery请求发回一条消息,只显示一条消息,或者什么也不做

有很多应用程序都以这种方式处理Google Analytics、Disqs、Stackoverflow等

更新:您应该查看方法的数据选项。显然,它允许您将API密钥的数据发送到服务器。您还可以将其嵌入到请求的URL中

例子

或者使用URL:

$.ajax({ type: "GET", url: "/server.php?key=yoursecretkey" });

你好,布莱恩。谢谢你的回复。第一个问题的答案是“是”,但这只是我正在测试的东西,可以改变。我不太明白你说。。。它会将机密API密钥传递给服务器,并接收回您希望放在“客户端”页面上的模板?。你能详细说明你的想法吗?谢谢。更新了我的答案,希望能为你提供更多的信息。再次你好,谢谢你的更新。密钥必须存储在服务器端,任何加载页面的人都不能在JavaScript代码中看到-密钥是一个秘密!但是,您必须将密钥从客户端发送到服务器的某个位置。如果您无法访问客户端数据库上的数据库来存储密钥,那么我看到的唯一选项就是将其存储在文本中。可能使用特定的IP地址。但这超出了问题的范围。您询问了如何发送密钥,而不是如何加密和存储客户端密钥数据。
$.ajax({
  type: "GET",
  url: "/server.php",
  data: { key: "yoursecretkey" }
})
  .done(function( response ) {
    alert( "response back: " + response );
  });
$.ajax({ type: "GET", url: "/server.php?key=yoursecretkey" });