【问题标题】:Clickbank api not authenticatingClickbank api 未进行身份验证
【发布时间】:2011-08-23 11:08:25
【问题描述】:

尽管分配了正确的 API 密钥和 Dev 密钥点击银行并没有对我的应用程序进行身份验证。 rturns 403 禁止消息。

我的脚本有什么问题?

 $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://api.clickbank.com/rest/1.2/sandbox/validateDeveloperKey");
    curl_setopt($ch, CURLOPT_HEADER, true); 
    curl_setopt($ch, CURLOPT_GET, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

//for security reasons these are not real keys
    $dev_key="DEV-9E4ABEDD687A7893D3E61CDE7009D4900CB0";
    $api_key= "API-02BFF7786901A18D9Y5FAAAD3853435AE646";

    curl_setopt($ch, CURLOPT_HTTPHEADER, array("Accept: application/xml", "Authorization: ".$dev_key.":". $api_key));

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

    print $result;

【问题讨论】:

标签: rest restful-authentication


【解决方案1】:

在对 ClickBank 问题进行故障排除时,务必指出问题请求是在 API 服务器 (https://api.clickbank.com) 上的“实时交易”期间发生,还是在“测试交易”期间发生沙盒服务器 (https://sandbox.clickbank.com)。

OP 似乎正在通过向实时 ClickBank 服务器而不是测试服务器发送请求来测试 ClickBank 功能。

如上一个答案所示,CURLOPT_URL 行应为:

curl_setopt($ch, CURLOPT_URL, "https://sandbox.clickbank.com/rest/1.2/sandbox/validateDeveloperKey");

此外,OP 中提供的 Developer 和 API 密钥似乎不是适合在 Sandbox 服务器上使用的 Sandbox 密钥。相反,它们是主要的开发者和 API 密钥,应该用于在实时 API 服务器上执行真实交易。

ClickBank API 沙盒开发者密钥的格式如下:

DEV-SB-4900BEDD687A7893D3E61CDE7009D4900CB0

OP 的开发者密钥不包含“-SB-”部分,这表明它不是沙盒密钥。

使用 ClickBank 沙盒服务器的第一步是“准备”一个 ClickBank API 沙盒环境。这是来自 ClickBank https://sandbox.clickbank.com/rest/1.2/sandbox 的该方法的文档:

POST /1.2/sandbox/prepare - 准备沙盒环境。

它将创建一个沙盒开发人员密钥并将其返回给最终用户。笔记 用户必须在授权中拥有有效的生产开发者密钥 访问此 API 的标头。

返回类型:SandboxDeveloperData

支持的输出类型:application/xml、application/json

重申一下,在您开始向 ClickBank 沙盒服务器发送测试代码之前,您必须首先通过向正确的沙盒 URL 发布 PREPARE 请求来请求 ClickBank 沙盒开发人员密钥。 “准备”请求必须在 Authorization 标头中包含有效的 ClickBank 主开发人员密钥,否则它将失败。

继续,前面的答案也正确地指出,虽然 ClickBank 自己的 PHP 示例说使用 curl 选项参数 CURLOPT_GET,但实际上不存在这样的 curl 参数。如果您尝试指定 GET 请求,则要设置的正确参数是 CURLOPT_HTTPGET。

说了这么多,YMMV。关于 ClickBank 的 API 的文档并不多,而且来自 ClickBank 的少量信息包含错误。有可能一旦您调试了代码,您仍然会从沙盒服务器获得 403 返回,而没有明显的原因。

最后,在使用 REST 服务时对我来说非常宝贵的一个工具是“rest-client”http://code.google.com/p/rest-client/

rest-client 允许您在编写第一行代码之前测试对任何 REST 服务的 GET、POST 和 HEAD 请求。

HTH!

【讨论】:

    【解决方案2】:

    我意识到这个问题已经有一个月了,还没有答案。我希望您现在已经找到了答案,但是如果您还没有找到,那么您的请求有几个问题:

    第一:

    curl_setopt($ch, CURLOPT_URL, "https://api.clickbank.com/rest/1.2/sandbox/validateDeveloperKey");
    

    应该是:

    curl_setopt($ch, CURLOPT_URL, "https://sandbox.clickbank.com/rest/1.2/sandbox/validateDeveloperKey");
    

    注意: 我没有收到对该查询的成功响应(给我一个 405 Method Not Allowed 响应)。

    第二: 没有 CURLOPT_GET。如果你改变了方法(即CURLOPT_POST),你可以使用CURLOPT_HTTPGET重置它,否则默认是GET。 (是的,php 示例显示了 CURLOPT_GET,但手册中不存在),如果您打开 E_NOTICE,您将看到失败

    我不确定为什么 validateDeveloperKey 不起作用,但是我已经成功处理了所有其他沙盒请求(所有 POST 的工作)。我很好奇是否有新的 API 版本(高于 1.2),因为我在 google 搜索中阅读了有关 2.1 的帖子。

    这可能无法准确回答您的问题,但如果您仍有问题,我希望我提供的说明对您有所帮助。

    谢谢/亚伦

    更新:进一步研究:为了发送 HEAD 请求 (validateDeveloperKey),您必须设置以下内容:

    curl_setopt($ch, CURLOPT_NOBODY, true);
    

    否则它将作为 GET 请求发送(正如我在上面提到的)。它适用于生成的沙盒开发人员密钥(返回 204 No Content),但是使用我的实际开发人员密钥它返回 403 Forbidden。

    再次,我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2015-09-23
      • 2020-04-19
      • 1970-01-01
      • 1970-01-01
      • 2016-08-30
      • 2020-09-05
      • 1970-01-01
      • 1970-01-01
      • 2010-11-11
      相关资源
      最近更新 更多