FIBOS 支付接入笔记

Wesley13
• 阅读 420

https://juejin.im/post/5e32dfe9f265da3dea348cda

好久没倒腾区块链的东西了,前几天有空,于是把在写的知识付费的社区程序和目前发展得不错(貌似)的 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 钱包,扫描以下二维码,给我转账,亲自体验一把 😏

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Easter79 Easter79
3年前
thinkcmf+jsapi 实现微信支付
首先从小程序端接收订单号、金额等参数,然后后台进行统一下单,把微信支付的订单号返回,在把订单号发送给前台,前台拉起支付,返回参数后更改支付状态。。。回调publicfunctionnotify(){$wechatDb::name('wechat')where('status',1)find();
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这