php – 我如何与Coinbase的API进行交互?为什么总是失败?
访问Coinbase API过去非常简单:您只需要一个API密钥即可.现在你需要一种叫做“nonce”和“signature”的东西.我在我的请求中传递了新的API“Secret”,nonce和Key,但它返回了“invalid_key”错误.是什么赋予了?
编辑3月12日:Added a tutorial on interacting with the API via OAuth. 解决方法
事实上,API曾经如此简单 – 只需要一个密钥 – 意味着它非常不安全.所以他们在一周前加强了安全性.这是博客文章:
http://blog.coinbase.com/post/75936737678/more-security-and-granular-control-with-the-new-api 除了API密钥之外,每个人现在都获得API“秘密”.每当您向API发出请求时,都必须包含三个参数: >您的API密钥. 签名是您的随机数,紧接着是您发布请求,参数和所有内容的完整URL.这个URL也包含nonce,所以整个过程看起来像这样: ?12345https://coinbase.com/api/v1/buttons随机数= 12345&放大器;名称=袜子和放大器;价格= 9.95 然后你把整个事情编码为“SHA256”哈希.如果您不知道这意味着什么,请不要惊慌 – 您可以使用PHP已经内置的函数在一行中完成. 无论如何,我在解决所有这些问题时遇到了一些麻烦,所以我花了一些时间来整理这个脚本,这使得对API的GETing和POSTing非常容易.我很想听听别人的想法! <?php function coinbaseRequest($what,$getOrPost,$parameters){ //Obviously,your API Key and Secret go here. $apikey = "blahblahblah"; $apisecret = "blahblahblahblah"; $nonce = file_get_contents("nonce.txt") + 1; file_put_contents("nonce.txt",$nonce,LOCK_EX); $url = "https://coinbase.com/api/v1/" . $what . "?nonce=" . $nonce; if($parameters != ""){ $parameters = http_build_query(json_decode($parameters),true); } //Here I go,hashing the Signature! Thanks,PHP,for making this easy! $signature = hash_hmac("sha256",$nonce . $url . $parameters,$apisecret); $ch = curl_init(); curl_setopt_array($ch,array( CURLOPT_URL => $url,CURLOPT_RETURNTRANSFER => true,CURLOPT_HTTPHEADER => array( "ACCESS_KEY: " . $apikey,"ACCESS_NONCE: " . $nonce,"ACCESS_SIGNATURE: " . $signature ))); if($getOrPost == "post"){ curl_setopt_array($ch,array( CURLOPT_POSTFIELDS => $parameters,CURLOPT_POST => true,)); } $results = curl_exec($ch); curl_close($ch); echo $results; } //This is a POST example. coinbaseRequest("buttons","post",'{ "button": { "name": "test","price_string": "1.23","price_currency_iso": "USD","variable_price": true } }'); //This is a GET example. coinbaseRequest("account/balance","get",false); ?> 笔记: >我尝试使用(microtime(true)* 100)为我的nonces.问题是它产生一个十进制数字,最后几位数字一直被删除或舍入,所以它不起作用.然后我想,“拧这个”,制作一个空白的nonce.txt文件,并在其中写入1,并获得nonce我刚刚获得该文件的内容,添加1,并用新数字替换该文件.它作为一个计数器提供了第二个目的,显示了我提出的总请求数量. 但后来有人向我指出了PHP的“uniqid”函数,该函数根据当前的microtime生成一个ID.所以你也可以尝试这个: $nonce = hexdec(uniqid()); 这具有不访问外部文件的优点.我实际上真的很想看到我做了多少请求,因此可能会坚持使用(坏)nonce.txt方法. 第三个参数是您在请求中传递的所有查询.这应格式化为JSON,除非它是一个不带任何参数的GET请求(除了函数包含的Key,Nonce和Signature),在这种情况下你应该将其保留为false. 编辑,3月3日: 我做了一个小函数,用于获取coinbaseRequest返回的任何内容并将其转换为按钮: function makebutt($data){ $data = json_decode($data,true); $buttoncode = $data["button"]["code"]; return ("<a class="coinbase-button" data-code="" . $buttoncode . "" href="https://coinbase.com/checkouts/" . $buttoncode . "">Pay With Bitcoin</a><script src="https://coinbase.com/assets/button.js" type="text/javascript"></script>"); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |