尽管分配了正确的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;
答案 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。
同样,我希望这会有所帮助。