2013-09-25 70 views
0

我試圖創建一個按鈕併爲coinbase指定一個回調URL。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返回一個驗證碼圖片頁面。

$result爲空。

感謝您的任何幫助。

+0

$輸出看起來像這樣當我回聲:http://s10.postimg.org/3pll2rt1l/Cloud_Flare_error.jpg –

回答

2

我從來沒有使用coinbase,但你檢查過你的主機是否在phpinfo()中啓用了curl支持?或者也許curl_init/curl_exec在禁用函數列表中。

編輯:

您使用的是HTTPS URL,則必須提供CA證書對設置標誌CURLOPT_CAINFO進行檢查,或禁用證書設置CURLOPT_SSL_VERIFYPEER的驗證假。

+0

謝謝!好的,所以我在CURLOPT_RETURNTRANSFER後添加了這個: curl_setopt($ ch,CURLOPT_SSL_VERIFYPEER,true); curl_setopt($ ch,CURLOPT_SSL_VERIFYHOST,2); curl_setopt($ ch,CURLOPT_CAINFO,getcwd()。「/CA.crt」); 它修復了我的CAPTCHA問題,但是現在所有的返回值都是空的。 –

+0

您是否嘗試將CURLOPT_SSL_VERIFYPEER設置爲false,以檢查問題是否確實與https? –

+0

當我將VERIFYPEER設置爲false時,我再次獲得CAPTCHA屏幕。我認爲SSL是必需的。 –

3

Brian從Coinbase在這裏。看起來您正在點擊API爲每個頁面加載生成一個新的付款按鈕,這取決於您獲得的流量,可能會在內部或通過CloudFlare觸發我們的速率限制。

我們目前的商戶創建按鈕api內部限制爲每天10,000個電話,例如,對於大多數商家。

更好的方法是爲每個產品打一次API(或者如果價格發生變化)並存儲結果'code'參數。如果將其保存在數據庫中,則可以在每次加載頁面時重新使用它。這將有助於您的網頁加載速度更快。

更多細節:https://coinbase.com/api/doc/1.0/buttons/create.html

希望它能幫助!

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付款。