Coinbase按钮创建和回调

时间:2013-09-25 00:56:05

标签: php api button callback bitcoin

我正在尝试创建一个按钮并使用coinbase分配一个回调网址。

尝试发布到coinbase API时,我收到了一些CAPTCHA数据。

我认为我的虚拟主机被CloudFlare阻止,导致我的代码无效。

这就是我所拥有的:

<a class="coinbase-button" data-code="<?php

$data = array(
  "button" => array(
    "name" => "Ticket",
    "price_string" => "0.01",
    "price_currency_iso" => "BTC",
    "custom" => $OrderNext . "- " . $ticket,
    "callback_url" => "https://x.com/callback.php",
    "description" => "Ticket - " . $ticket ,
    "type" => "buy_now",
    "style" => "buy_now_large"
  )
);                                                                    

$json_data = json_encode($data);                                                                                   

$ch = curl_init("https://coinbase.com/api/v1/buttons?api_key=xxxxxxxxxxxxxxxxxxxxxx");

curl_setopt($ch, CURLOPT_POST, 1);                                                                  
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);                                                                  
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);                                                                      
curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                                                          
  'Content-Type: application/json',                                                                                
  'Content-Length: ' . strlen($json_data))                                                                       
);                                                                                                                   

if( ! $output = curl_exec($ch))
  {
        trigger_error(curl_error($ch));
    } 

$result = json_decode($output);

$output会返回CAPTCHA页面。

$result为空。

感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

Brian来自Coinbase。看起来您正在使用API​​为每个页面加载生成一个新的付款按钮,这取决于您获得的流量,可能会在内部或通过CloudFlare触发我们的速率限制。

我们目前在内部拥有商家创建按钮api,限制为每天10,000次通话,例如,对于大多数商家而言。

更好的方法是针对每种产品点击API一次(或者如果价格发生变化)并存储生成的“代码”参数。如果将其保存在数据库中,则可以在每次页面加载时重复使用它。这也有助于您的网页加载速度更快。

更多详情:https://coinbase.com/api/doc/1.0/buttons/create.html

希望它有所帮助!

答案 1 :(得分:2)

我从未使用过coinbase,但你检查过你的主机是否在phpinfo()中启用了curl支持?或者curl_init / curl_exec可能在禁用函数列表中。

修改

您正在使用https网址,您必须提供要检查的CA证书,而不是设置标记 CURLOPT_CAINFO ,或者禁用验证证书设置 CURLOPT_SSL_VERIFYPEER 到假。

答案 2 :(得分:0)

您可以使用此类代码生成付款按钮

   $apikey ="***************"; 
   $apisecret = "************************";
   $nonce = sprintf('%0.0f',round(microtime(true) * 1000000));

   $url = "https://api.sandbox.coinbase.com/v1/buttons?nonce=" . $nonce;

   $parameters = [];
   $parameters["button"]["name"] = "Checkout Invoice";
   $parameters["button"]["custom"] = $orderId;
   $parameters["button"]["price_string"] = $priceString;
   $parameters["button"]["type"] = "buy_now";
   $parameters["button"]["subscription"] = false;
   $parameters["button"]["price_currency_iso"] = "USD";
   $parameters["button"]["description"] = "Checkout Invoice";
   $parameters["button"]["style"] = "custom_large";
   $parameters["button"]["include_email"] = true;
   $parameters["button"]["callback_url"] = url("bitcoin/callback");
   $parameters = http_build_query($parameters, true);



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

   curl_setopt_array($ch, array(
       CURLOPT_POSTFIELDS => $parameters,
       CURLOPT_POST => true,
   ));

   $response = curl_exec($ch);

   curl_close($ch);

   $decodeResponse = json_decode($response);

它将返回按钮代码以支付coinbase。