分类
文章

FIBOS 支付接入笔记

好久没倒腾区块链的东西了,前几天有空,于是把在写的知识付费的社区程序和目前发展得不错(貌似)的 FIBOS 做了下对接。在开发过程中得到了 FIBOS 团队的不少帮助,这里把亲测好用的支付对接流程分享给大家。

FIBOS 简介

先简单说几句区块链,只挑和我们要讲的一条线说,熟悉的同学可以跳过。

区块链可以看成是在去中心化网络上,每个节点都完整存储的、通过 hash 值层层校验的账本。

去中心化网络并不是我们熟悉的分布式网络,它里边的节点是对等的。公链式的区块链,任何人只要装上对应的软件,都可以成为节点。

早期网络节点间,主要传输交易记录。这形成了现在最大的数字货币,比特币。

后来大家发现在交易时可以附带可执行的程序,用来描述和优化交易细节。这种程序被称为智能合约。这成就了以太坊(ETH)。

早期的智能合约主要处理和交易相关的业务,当它进一步发展后,大家发现还需要内存和数据库。于是又有人开发了新的网络EOS。

目前主流区块链平台的进化大阶段暂时到这里。EOS 在设计上有不少不错的考量,但是有个非常蛋疼的特性,它的合约需要用 C 编写,而且它的文档写得也是相当的难以言表。所以虽然 EOS 很火,但能把它的 demo 完整跑通的程序员并不多。

FIBOS 在 EOS 基础上提供了完整的 JavaScript 工具链和生态,可以看做 EOS 的一个改进版本。当然它运行着自己独立的公链,而且现在已经具备了交易跨链等 EOS 不具备的特性。正是这些特性,让我觉得对接 FIBOS 似乎是个不错的选择。

FIBOS 的支付功能和对接流程

作为已经熟悉了以太坊的开发者,我是不愿意换用其他平台的,毕竟重学一门语言成本很高。

但 FIBOS 采用 JS 写合约,这就没有了学习成本。而 FIBOS 后来实现的去中心化跨链交易,使得如果对接了 FIBOS,就不用再对接 EOS 和 ETH ,因为都可以通过 FO 钱包跨链兑换过来。

还有一点,如果你真的想做生意而不是做玩具,其实还需要稳定币。因为产品成本多半是由法币构成的,如果定价不通过稳定币来锁定,可能出现销售价低于成本的风险。前几个月 FIBOS 上线了跨链稳定币,对接了 USDT 和 DAI 。

然后同时疯狂在各个交易所上架,让购买 FO 变得简单了很多。

还有支持 FIBOS 链上 USDT 的生态 OTC 服务商 UUEX ,以及即将上线的去中心化 OTC 服务。

在今年春节前考察了整个生态后,我觉得已经比较适合真实的商业产品落地了,所以试水了下 FIBOS 的支付。

我们的接入采取非常轻的方式,把之前设计的合约分账先去掉了,直接只接支付。

这个流程本身其实简单得令人发指,只有三步。

首先我们构造一个URL,在这个URL里边把订单号作为交易备注放进去。然后生成二维码。

然后,用户通过 FO 钱包扫码,进行转账。收款方、交易额、币种和备注因为我们已经传入,都会默认填好。

当用户确定交易完成后,我们只需要通过 FIBOS 网络查询收款方是否有包含订单号的新交易就可以了。

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.statusnoreversible ,这表示交易状态不可逆。
  • 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 转账的速度相当迅速。最爽的是,转账是不花钱的、转账是不花钱的、转账是不花钱的。

比起 ETH 每一笔都烧 Gas ,不花钱意味着可以进行频繁的小额支付。加上 FOUSDT 带来的稳定币值,我们就真真正正的有了一个免手续费的、价值稳定的、跨链的、全球化的支付方案。剩下的就是准备好可以在全球网络售卖的商品,以及教育用户安装 FO 钱包了。

不信的话,可以现在就安装 FO 钱包,扫描以下二维码,给我转账,亲自体验一把 😏