网赚论坛

 找回密码
 免费注册
查看: 502|回复: 0
打印 上一主题 下一主题

如何为你的网站添加比特币支付方式(使用blockchain api)

[复制链接]

19

主题

22

帖子

76

积分

Ⅰ级财主

Rank: 1

积分
76
跳转到指定楼层
楼主
发表于 2017-10-21 00:49:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我们是比特币爱好者,不是单纯的投机者,所以我们要光明正大的宣布:我们接受比特币支付!
想必大家对目前大热的Bitpay有所耳闻,这家公司提供了完整的比特币商业支付方案,但也正因如此,它需要一些申请手续。作为崇尚自由的比特币爱好者,本文将以简单粗暴的blockchain api为主,以便大家能够立刻上手一试。
本文不会涉及具体的处理代码,只是介绍一下基本的流程和所需的api及其用法,因而要求读者有一定的web编程基础(php、java、python等),了解json格式的api调用。(文中引用了数个网站的api,我个人认为无认证需求的api可以自由调用,如果有任何不妥之处,请联系我删除)

一、汇率转换
假设我们现在有个价值¥100元的商品接受比特币付款,鉴于比特币币值的波动,很多人可能并不接受固定的比特币价格。因而首先我们要考虑的是汇率转换。可以参考以下这几个api:

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小时内的均值,可以据此得到相对稳定的价格。但价格和国内交易所的价格常常差异较大,消费者可能并不愿意买单。

http://i.btc123.com/lib/jsonProxyEx.php?type=btcchinaTicker
其返回数据类似
{"ticker":{"high":"763.33","low":"740.00","buy":"742.01","sell":"745.00","last":"745.00","vol":"1792.63100000"}}
信息平台btc123提供的btcchina的价格(当然也有多个其他交易所的价格,格式是一样的),更贴合国内实际。但可惜没有提供均值数据,有心的朋友可以在这一数据的基础上跟踪记录得出均值,图方便的话个人建议直接取最高最低值的均值也可。(请自行评估和控制盈亏风险,诚信经营,避免纠纷。)

https://bter.com/api/1/ticker/btc_cny
其返回数据类似
{
"result": "true",
"last": 745,
"high": 765.97,
"low": 745,
"avg": 753.48,
"sell": 745,
"buy": 743,
"vol_btc": 816.806,
"vol_cny": 615447.08
}
国内交易所bter自行提供的api,有均值。其他可能还有一些交易所提供了行情api,读者可自行对比速度、稳定性、可靠性以及可参考性等。

二、生成交易地址
交易地址不能直接使用你自己的钱包地址。我们需要通过blockchain进行中转(类似支付宝)。blockchain可以提供转账和转帐后的回调通知功能,但并不提供支付宝的担保功能。最小的支付金额目前为0.001btc,中转的手续费由blockchain承担。
生成交易地址的api如下:
https://blockchain.info/zh-cn/api/receive?method=create&address=$receiving_address&shared=$shared&callback=$callback_url
其中:
$receiving_address 用来接受付款的你自己的钱包地址
$shared 指定是否通过公有钱包中转,值为true或者false。如果使用公有钱包,则可以提供足够的安全保障而无需等待,但需要收取0.5%的费用。同时生成的地址会在8小时后过期,切勿反复使用。
$callback_url 支付完成后接受回调通知的网页地址。这一地址需要预先编码(URL encode)。
其返回数据类似:
{
"fee_percent":0,
"destination":"1A8JiWcwvpY7tAopUkSnGuEYHmzGYfZPiq",
"input_address":"1KZoUuPWFAeyVySHAGqvTUDoX6P3ntuLNF",
"callback_url":"http://yoururl.com"
}
其中destination为你自己的钱包地址,而input_address则用来提供给用户做支付之用。同时请仔细检查返回的callback_url是否正确,否则无法收到通知。

三、处理回调通知
在用户支付完成后,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分钟)重试,重试次数可以达到一千次(一周),而且你的域名很可能会因此被列入黑名单。

如果要查看blockchain已经发出过的通知信息,可以使用以下api
http://blockchain.info/zh-cn/api/receive?method=check_logs&cors=true&format=json&callback=$callback_url
其中$callback_url必须和你之前提交过的$callback_url严格匹配

如果之前没有使用公用钱包,且对安全性有所顾虑,则可以检查返回参数中的confirmations,如果低于6,则先不打印*ok*,以便blockchain稍后重新通知新的确认数。

当用户支付的金额和确认数都达到要求后,亲就赶快包邮发货吧!

(本文整理编译自blockchain的官方api文档http://blockchain.info/zh-cn/api/api_receive,其文档中还同时提供了简单的php和java示例代码)

译者捐助地址:
13iETNs2mpJPCpRevULukHPCeLNNXJoHVh
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

广告合作|Archiver|手机版|小黑屋|财富吧

GMT+8, 2024-4-30 09:59 , Processed in 0.546001 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.1

© 2014-2021 财富吧

快速回复 返回顶部 返回列表