【问题标题】:Coinbase button creation and callbackCoinbase 按钮​​创建和回调
【发布时间】:2013-09-25 00:56:05
【问题描述】:

我正在尝试创建一个按钮并使用 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 为空。

感谢您的帮助。

【问题讨论】:

标签: php api button callback bitcoin


【解决方案1】:

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

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

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

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

希望对你有帮助!

【讨论】:

    【解决方案2】:

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

    编辑:

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

    【讨论】:

    • 谢谢!好的,所以我在 CURLOPT_RETURNTRANSFER 之后添加了这个: curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "/CA.crt");它解决了我的验证码问题,但现在所有的返回值都是空的。
    • 您是否尝试将 CURLOPT_SSL_VERIFYPEER 设置为 false,以检查问题是否确实与 https 相关?
    • 当我将 VERIFYPEER 设置为 false 时,我再次进入 CAPTCHA 屏幕。我认为 SSL 是必需的。
    • 所以,我发现 SSL 验证失败。 ssl_verify_result=0.
    • 好的,所以我认为我获得了正确的 SSL 证书,最终它的作用与我完全禁用 SSL 时相同。它返回一个需要验证码的 CloudFlare 页面。看起来像这样:
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-08
      • 2015-06-15
      • 2018-08-17
      • 2010-09-21
      • 2017-07-28
      • 1970-01-01
      • 1970-01-01
      • 2015-05-21
      相关资源
      最近更新 更多