-1

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

尝试发布到 coinbase API 时,我收到了一些返回的验证码数据。

我认为我的虚拟主机被 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返回验证码页面。

$result一片空白。

谢谢你的帮助。

4

3 回答 3

2

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

我们目前在内部将商家创建按钮 API 限制为每天 10,000 次调用,例如,对于大多数商家而言。

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

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

希望能帮助到你!

于 2013-10-10T23:44:21.123 回答
1

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

编辑:

您使用的是 https url,您必须提供 CA 证书以检查是否设置标志CURLOPT_CAINFO,或者禁用证书验证,将CURLOPT_SSL_VERIFYPEER 设置为 false。

于 2013-09-25T03:13:34.767 回答
-1

您可以使用这样的代码生成付款按钮

   $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 上付款的按钮代码。

于 2016-08-08T11:52:29.023 回答