网站整合比特币支付接口实现比特币收款 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*"; }
- 最新评论