我们处理比特币。 B2BinPay付款页面如何安排?

B2BinPay是一种加密货币支付系统,具有用于应用程序,分析,节点,队列的许多相关后端,但最终用户只能看到一个UI页面。 它对易用性有很高的要求。 尽管页面看起来很简单,但是开发团队还是有兴趣分享内部的布局方式。

要了解业务流程,您需要深入研究主题领域。 对于还不知道什么是加密货币,区块链和地址的读者,我们在此基础上做了简短易懂的定义。



为了理解这些术语,以下是一些与法定付款世界的类比:
区块链是一个去中心化(理想情况下)的数据库,用于存储有关地址,交易和余额的信息。 它由块组成;每个块都包含有限的信息量。 矿工通过能源密集型计算(PoW)或权益证明(PoS)生成了区块。 每个下一个块包含一个新事务的列表以及到上一个事务的链接。 每种加密货币都有自己的区块链。

商家 -与商店的所有者相同,租用了一种支付系统来接收来自最终用户的付款。

钱包与传统金融世界中的帐户相同。

交易 -区块链中资金从一个钱包转移到另一个钱包的记录。 钱包余额由交易金额构成。

地址与帐户详细信息相同。 不同之处在于,大多数区块链都允许您为一个钱包生成无限数量的地址。

确认交易是在其后已生成安全数量的块的交易。 一格等于一份确认。 如果交易未收到4-8确认,则认为交易未完成。

支付系统 -提供接受和处理加密货币支付的软件。 链接和汇总订单,付款,交易,退货,补货,提款和其他信息。 它还会通知商家系统有关订单和付款(而不是区块链和交易)上下文中的更改。

资源管理器 -用于数据进入区块链的服务或浏览器站点。 使用此服务,您可以方便地获取有关地址,交易和冻结的信息。

节点是一台计算机,上面存储了整个数据库(区块链)的副本。

总体工作方案和付款页面内容要求


付款周期如下:在商店的网站上,买方选择产品和付款币种。 系统将用户重定向到付款页面。 它包含以下信息:货币,地址,参考注释。 用户将所需的金额发送到指定的地址,并期望有足够数量的网络确认来确认付款成功。 在等待期间,买家可以监视付款状态,而无需离开浏览器网站上的页面。 付款被接受后,用户将被重定向到卖家网站上的成功付款页面。



付款过程分为几个阶段。 除直接汇款外,每个用户都不需要用户执行任何操作。 标准成功脚本:

  1. 在卖家的网站上,用户选择B2BinPay付款方式和货币
  2. 卖家的IP发送了一个创建新付款订单的请求,并收到了指向付款页面的链接
  3. 用户重定向到付款页面,该页面包含以下信息:货币,金额,地址和其他字段(如有必要)
  4. 用户付费购买
  5. 系统检测到新交易已到达该地址,并且页面进入跟踪状态
  6. 监视交易状态,并在页面上更新信息,直到达到安全的确认数量。
  7. 将该用户重定向到卖家网站上的成功付款页面

因此,支付页面可以处于两种状态:查看详细信息和等待确认。 查看详细信息时,可以通过两种方式输入地址:扫描QR码或以文本形式复制地址。 除了基本信息外,我们还将以文本形式添加一个迷你说明,该迷你说明将告诉您如何付款,在哪里下载钱包应用程序以及如何购买货币。 除这些字段外,还有其他字段,该字段的存在取决于所选的货币。 有时,为了正确地关联交易,付款订单和购买者,不仅需要知道地址,而且还必须知道其他信息。 例如,对于波纹货币,在发送时,必须指定目标标记(交易注释)。

对于那些以文本形式复制地址并且不扫描QR码的人,添加了复制按钮。 同样,硬币的徽标应显示在页面上,因为许多人通过徽标的形状和配色方案而不是字母来视觉识别货币。

状态更改发生在检测到帐单地址的传入交易的那一刻。 此时,不再需要的细节消失了; 用户进入待机模式,页面需要持续不断的有关交易状态的信息流。 现在,您可以在该页面上找到:交易完成之前的超时时间,当前的确认数量,简短的注释以说明进一步的操作。

该页面应易于理解,直观且同时具有足够的信息性。 对于有经验的买家,必须重点注意地址和金额。

根据以上要求,获得了将来页面的布局。



后端


实现后端的第一个选择就是没有后端! 生成付款页面时,预先知道将钱汇至哪个地址。 您可以使用JS工具从该资源管理器在此地址处接收新交易。 因此,任务是将连接器写到资源管理器并定期询问必要的连接器。 静态类图可能如下所示:



优点:我们的能力没有负担,易于实施,没有潜在的安全威胁。

缺点:消息来源不可靠,新信息接收不及时,向最终客户交付代码库更新存在困难(缓存不受控制)。 决定性的负号-许多货币的API都没有稳定的资源管理器。

第二个选项 (有效)是它自己的微服务,该微服务直接从节点池接收信息,过滤并在支付页面上分配信息。 在客户端上使用服务器端事件将减少冗余并节省流量。 SSE适合用例,因为页面的行为是被动的-它仅接受新信息。

缺点:大量的实施成本,设备上的额外负担。

优点:高度的可靠性和独立于第三方服务的能力; 订单的上下文,而不是交易。
电路图:



在客户浏览器中打开“付款”页面后,创建SSE连接的请求将发送到微服务的异步后端。 该请求指示要跟踪的地址,付款金额,寿命和其他次要参数。 在后端,它存储在内存中的noSQL存储中。 每次在任何区块链节点上出现一个新块时,应用程序都会在数据库中存储的地址和交易中接收并从中提取有用的信息。 如果下一个块有用,则将更新发送给客户端。 收到足够的确认或TTL过期后,服务器将主动关闭连接。

因此,后端仅在新信息到达节点时执行资源密集型操作并驱动流量,并且不存在对新信息的定期“询问”。 由于异步,我们可以通过成千上万的同时连接获得高速。

知道对于带有PoW的硬币,在一秒钟内接收新信息的延迟可以忽略不计,这种系统的最小水平缩放比例将大大提高吞吐量。 在特别活跃的日子,例如黑色星期五,负荷增加。 如果系统出现故障或技术上出现故障,则客户端将处于后备状态,在该状态下页面将永远保持在详细信息查看模式下。 对于PoS硬币,可以跳过监视确认数的步骤,因为交易速度通常为2到5秒。

实现后端的第三个选项是混合,这时,根据区块链交易的速度和有关第三方服务当前可用性的信息,使用SSE或HTTP与资源管理器的交互。 它是同时最有效和最耗时的。

适用于该任务的前端技术是vue.js,它具有声明性呈现并能够创建多个组件状态。 它是一个轻巧的库,具有时尚的结构和可响应的DOM修改。 数据源是初始化组件时打开的SSE连接。

设计方案




我们开发产品并使其高质量和可靠,以使区块链支付方便,庞大且负担得起。 我们不仅爱钱,而且爱最先进的技术,复杂的任务和优雅的解决方案。

在开发B2BinPay付款系统时我们会定期解决一些问题,尽管这些问题看起来很简单,但仍需要采用非标准的方法或外观焕然一新。 我们将非常感谢您提供反馈,意见和建议。 如果您想将新颖而大胆的想法带到全世界使用的支付服务中,请参阅当前职位空缺

Source: https://habr.com/ru/post/zh-CN447418/


All Articles