Clickbank api没有验证

时间:2011-05-06 06:03:56

标签: rest restful-authentication

尽管分配了正确的API密钥和Dev密钥,但点击银行不会对我的应用程序进行身份验证。它rturns 403 forbidden message。

我的剧本出了什么问题?

 $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;

2 个答案:

答案 0 :(得分: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中显示的开发人员和API密钥似乎不是适合在沙盒服务器上使用的沙盒密钥。相反,它们是应该用于在实时API服务器上执行实际事务的主要开发人员和API密钥。

ClickBank API Sandbox Developer Key具有以下格式:

DEV-SB-4900BEDD687A7893D3E61CDE7009D4900CB0

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

利用ClickBank Sandbox服务器的第一步是“准备”ClickBank API Sandbox环境。以下是ClickBank https://sandbox.clickbank.com/rest/1.2/sandbox中该方法的文档:

  

POST /1.2/sandbox/prepare - 准备一个沙箱环​​境。

     

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

     

返回类型:SandboxDeveloperData

     

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

重申一下,在开始向ClickBank沙盒服务器发送测试代码之前,必须首先通过将PREPARE请求POST到正确的沙箱URL来请求ClickBank Sandbox开发人员密钥。 'prepare'请求必须在Authorization标头中包含有效的ClickBank Master Developer Key,否则它将失败。

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

说完所有这些,YMMV。关于ClickBank API的文档不多,而ClickBank提供的信息很少包含错误。有可能一旦你调试了代码,你仍然可以从Sandbox服务器获得403返回,没有明显的原因。

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

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

HTH!

答案 1 :(得分:0)

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

首先:

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以上)因为我在谷歌搜索中阅读了关于2.1的帖子。

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

感谢/亚伦

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

curl_setopt($ch, CURLOPT_NOBODY, true);

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

同样,我希望这会有所帮助。