快捷搜索:   nginx

网站整合比特币支付接口实现比特币收款 blockchain api的应用

比特币目前越来越流行,对于有整合到网站支付接口需求的,我们这里提供一个blockchain的收款API开发思路,主要是从blockchain的API文档中翻译过来

首先需要注册blockchain,注册完blockchain后需要在后台生成一个比特币的收款地址,这个后面有用

然后我们说下基础的操作流程


一、需要知道人民币跟比特币的当前汇率,然后进行汇率换算

通过GET接口http://blockchain.info/ticker
得到返回数据类似
{
"USD": {
"15m": 123.99,
"last": 123.99,
"buy": 123.99,
"sell": 124,
"symbol": "$"
},
"CNY": {
"15m": 812.64193,
"last": 812.64193,
"buy": 820,
"sell": 835.20552,
"24h": 837.76,
"symbol": "¥"
},
...
}
其中CNY即为人民币。它提供了15分钟和24小时内的均值,可以由此数据换算得到相对稳定的价格。


二、生成交易地址,设置回调通知

GET接口https://api.blockchain.info/v2/receive?xpub=$xpub&callback=$callback_url&key=$key&gap_limit=$gap_limit
xpub - 你的xpub扩展公钥,在设置里面的Wallets & Addresses下面的比特币钱包,点右侧的管理进去,生成下你的钱包address后,可以从上面的更多选项中的显示xPub查询到

callback_url - 回调地址,需要对URL进行Encode处理
key - 你的blockchain API key,申请地址:https://api.blockchain.info/v2/apikey/request/ 申请开通API接口,一般2-3个工作日开通

gap_limit - 可选项. How many unused addresses are allowed before erroring out.


代码案例,直接CURL :

curl "https://api.blockchain.info/v2/receive?xpub=xpub6CWiJoiwxPQni3DFbrQNHWq8kwrL2J1HuBN7zm4xKPCZRmEshc7Dojz4zMah7E4o2GEEbD6HgfG7sQid186Fw9x9akMNKw2mu1PjqacTJB2&callback=https%3A%2F%2Fmystore.com%3Finvoice_id%3D058921123&key=[yourkeyhere]"



返回数据:
Response: 200 OK, application/json

{"address":"19jJyiC6DnKyKvPg38eBE8R6yCSXLLEjqw","index":23,"callback":"https://mystore.com?invoice_id=058921123"}

PHP案例:

$secret = 'ZzsMLGKe162CfA5EcG6j';
$my_xpub = '{YOUR XPUB ADDRESS}';
$my_api_key = '{YOUR API KEY}';
$my_callback_url = 'https://mystore.com?invoice_id=058921123&secret='.$secret;
$root_url = 'https://api.blockchain.info/v2/receive';
$parameters = 'xpub=' .$my_xpub. '&callback=' .urlencode($my_callback_url). '&key=' .$my_api_key;
$response = file_get_contents($root_url . '?' . $parameters);
$object = json_decode($response);
echo 'Send Payment To : ' . $object->address;

处理回调通知
在用户支付完成后,blockchain会访问前面所设置的callback_url,并将一系列参数通过GET方法传递进来,具体如下:
value 用户所支付的金额,以聪(satoshi)为单位。
input_address 用来接受用户支付的中转钱包地址
confirmations 交易的确认数量
{自定义的参数} 原先指定在callback_url中的参数,仍然会被传递回来。但请注意,由于GET方法的限制,所有参数(包括blockchain添加的参数)的总长度不得超过255个字符。
transaction_hash 交易的哈希值
input_transaction_hash 在中转发生前,完成用户支付的那笔交易的哈希值
destination_address 用来接受付款的你自己的钱包地址
在接收到通知后,你应当返回给blockchain这样几个字符:*ok*(包括前后星号)。必须严格遵守这一约定,否则blockchain的服务器会在每个新区块产生时(大概每10分钟)重试,重试次数可以达到一千次(一周),而且你的域名很可能会因此被列入黑名单。

回调处理参考代码

PHP:

<?php
$real_secret = 'ZzsMLGKe162CfA5EcG6j';
$invoice_id = $_GET['invoice_id']; //invoice_id is passed back to the callback URL
$transaction_hash = $_GET['transaction_hash'];
$value_in_satoshi = $_GET['value'];
$value_in_btc = $value_in_satoshi / 100000000;
//Commented out to test, uncomment when live
if ($_GET['test'] == true) {
    return;
}
try {
  //create or open the database
  $database = new SQLiteDatabase('db.sqlite', 0666, $error);
} catch(Exception $e) {
  die($error);
}
//Add the invoice to the database
$stmt = $db->prepare("replace INTO invoice_payments (invoice_id, transaction_hash, value) values(?, ?, ?)");
$stmt->bind_param("isd", $invoice_id, $transaction_hash, $value_in_btc);
if($stmt->execute()) {
   echo "*ok*";
}


顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论