好久没倒腾区块链的东西了,前几天有空,于是把在写的知识付费的社区程序和目前发展得不错(貌似)的 FIBOS 做了下对接。在开发过程中得到了 FIBOS 团队的不少帮助,这里把亲测好用的支付对接流程分享给大家。
FIBOS 简介
先简单说几句区块链,只挑和我们要讲的一条线说,熟悉的同学可以跳过。
区块链可以看成是在去中心化网络上,每个节点都完整存储的、通过 hash 值层层校验的账本。
![](https://theseven.ftqq.com/20200219222553.png)
去中心化网络并不是我们熟悉的分布式网络,它里边的节点是对等的。公链式的区块链,任何人只要装上对应的软件,都可以成为节点。
![](https://theseven.ftqq.com/20200219222608.png)
早期网络节点间,主要传输交易记录。这形成了现在最大的数字货币,比特币。
![](https://theseven.ftqq.com/20200219222626.png)
后来大家发现在交易时可以附带可执行的程序,用来描述和优化交易细节。这种程序被称为智能合约。这成就了以太坊(ETH)。
![](https://theseven.ftqq.com/20200219222641.png)
早期的智能合约主要处理和交易相关的业务,当它进一步发展后,大家发现还需要内存和数据库。于是又有人开发了新的网络EOS。
![](https://theseven.ftqq.com/20200219222658.png)
目前主流区块链平台的进化大阶段暂时到这里。EOS 在设计上有不少不错的考量,但是有个非常蛋疼的特性,它的合约需要用 C 编写,而且它的文档写得也是相当的难以言表。所以虽然 EOS 很火,但能把它的 demo 完整跑通的程序员并不多。
FIBOS 在 EOS 基础上提供了完整的 JavaScript 工具链和生态,可以看做 EOS 的一个改进版本。当然它运行着自己独立的公链,而且现在已经具备了交易跨链等 EOS 不具备的特性。正是这些特性,让我觉得对接 FIBOS 似乎是个不错的选择。
FIBOS 的支付功能和对接流程
![](https://theseven.ftqq.com/20200219222718.png)
作为已经熟悉了以太坊的开发者,我是不愿意换用其他平台的,毕竟重学一门语言成本很高。
但 FIBOS 采用 JS 写合约,这就没有了学习成本。而 FIBOS 后来实现的去中心化跨链交易,使得如果对接了 FIBOS,就不用再对接 EOS 和 ETH ,因为都可以通过 FO 钱包跨链兑换过来。
还有一点,如果你真的想做生意而不是做玩具,其实还需要稳定币。因为产品成本多半是由法币构成的,如果定价不通过稳定币来锁定,可能出现销售价低于成本的风险。前几个月 FIBOS 上线了跨链稳定币,对接了 USDT 和 DAI 。
然后同时疯狂在各个交易所上架,让购买 FO 变得简单了很多。
![](https://theseven.ftqq.com/20200219222737.png)
还有支持 FIBOS 链上 USDT 的生态 OTC 服务商 UUEX ,以及即将上线的去中心化 OTC 服务。
在今年春节前考察了整个生态后,我觉得已经比较适合真实的商业产品落地了,所以试水了下 FIBOS 的支付。
我们的接入采取非常轻的方式,把之前设计的合约分账先去掉了,直接只接支付。
这个流程本身其实简单得令人发指,只有三步。
首先我们构造一个URL,在这个URL里边把订单号作为交易备注放进去。然后生成二维码。
![](https://theseven.ftqq.com/20200219222820.png)
然后,用户通过 FO 钱包扫码,进行转账。收款方、交易额、币种和备注因为我们已经传入,都会默认填好。
![](https://theseven.ftqq.com/20200219222835.png)
当用户确定交易完成后,我们只需要通过 FIBOS 网络查询收款方是否有包含订单号的新交易就可以了。
![](https://theseven.ftqq.com/20200219222853.png)
FIBOS 支付对接的实现
当然,具体做起来还是有一些细节的,尤其在 FIBOS 文档还不够完善的现在。这里把我自东土大唐而来历经千辛万苦取回的真经写给大家。
构造支付二维码
钱包用二维码对应的URL格式如下:
https://wallet.fo/Pay?params=phpisthetest,FOUSDT,eosio,0.01,order=111
复制代码
参数顺序依次是:收款方 FIBOS 账号、通证名、发行方、金额、备注。
那么,我们到哪里去查找这些通证的确切名称呢?
这里有个列表,包含了目前在 FIBOS 平台上发布的全部通证 api.fowallet.net/1.1/fibos_t…
但是默认只显示100个,可以添加 skip
参数来翻页。
http://api.fowallet.net/1.1/fibos_tokens?skip=100
如果需要查看某个通证的详细信息,可以构造如下 URL 查看。
http://api.fowallet.net/1.1/fibos_tokens?where=%7B%22token_name%22%3A%22FOUSDT@eosio%22%7D
我们稍后查询转账情况也是通过这个API,其查询语法可以参考这个文档。
在手机上的情况
上边说的是电脑上的情况。
如果用户是在手机上看,通过二维码的方式就显得很智障了。这里我们可以通过 URL 协议在安装了 FO 钱包APP的手机上直接唤起它。
格式如下:
fowallet://URLENCODE后的、上文中的URL
把这个 URL 写到 A 标签,点击既可以唤起钱包了。
转账结果的查询
FIBOS 的查询 API 用的 GraphQL ,熟悉的同学可以自己编写。这里我直接给出操作步骤。
我们需要构造一个 post 请求, URL 为 http://api.fowallet.net/1.1
,header 为 Content-Type: application/graphql
,body如下:
{
find_fibos_tokens_action(
order:"-id"
where:{
account_to_id: "收款方FO账户",
contract_action:{
in:["eosio.token/transfer","eosio.token/extransfer"]
}
}
){
action{
rawData
transaction
{
block
{
status
}
}
}
token_from{
token_name
}
}
}
复制代码
在返回的结果中,我们需要确认以下内容:
action.transaction.block.status
为noreversible
,这表示交易状态不可逆。action.rawData.act.data.memo
为之前我们传入的订单号,用来区分交易。action.rawData.act.data.quantity.quantity
为转账金额。
当我们查询到有效结果后,就表示用户付款已经成功。我们就可以开始发货啦。
补充说明
第一,由于目前 api.fowallet.net
对应的代理服务器不太靠谱,在调试的时候如果出现很久没有返回,那么可以把域名换成这个: elb-tracker-api-1674205173.ap-northeast-1.elb.amazonaws.com
。
第二,钱包确认到账后,api 也要略等三五分钟才能确认,不要着急。
FIBOS 支付体验
上述方案没有用到合约,也就是说我们不需要消耗额外的内存,也就是说,开发者不用抵押任何 FO 去换取内存等资源。
实际使用中可以发现,比起 ETH ,FIBOS 转账的速度相当迅速。最爽的是,转账是不花钱的、转账是不花钱的、转账是不花钱的。
![](https://theseven.ftqq.com/20200219222914.png)
比起 ETH 每一笔都烧 Gas ,不花钱意味着可以进行频繁的小额支付。加上 FOUSDT 带来的稳定币值,我们就真真正正的有了一个免手续费的、价值稳定的、跨链的、全球化的支付方案。剩下的就是准备好可以在全球网络售卖的商品,以及教育用户安装 FO 钱包了。
不信的话,可以现在就安装 FO 钱包,扫描以下二维码,给我转账,亲自体验一把 😏
![](https://theseven.ftqq.com/20200219222927.png)