网站整合比特币支付接口实现比特币收款 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 :

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

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

PHP案例:

处理回调通知
在用户支付完成后,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*";
}
------本页内容已结束,喜欢请分享,更多精彩文章,请关注公众号【悦杰云】------

感谢您的来访,获取更多精彩文章请收藏本站。

© 版权声明
THE END
喜欢就支持一下吧
点赞10赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容