我正在尝试创建一个按钮并使用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
为空。
感谢您的帮助。
答案 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。