01项目概述
Payora是一个加密支付网关,企业在其自己的基础设施上部署并完全控制。与传统支付提供商不同,Payora 从不介于买方和卖方之间:资金直接进入商家的地址,网关服务器不持有私钥,也从不控制资金。因此,产品本身阐明了两个定义特性——自托管的(它运行在所有者的基础设施上)和非托管的(你的密钥,你的资金)。
这个想法源于一个简单的观察:几乎每个需要接受加密货币的在线服务都在重新发明相同的支付模块。有些附加第三方处理器,并为交易和提款支付费用;其他人则“手动”编写接受方式,没有网络钩子,没有金额对账,也没有妥善处理少付的情况。Payora 将这些重复的工作整合为一个产品:一个单一的 API,一个现成的支付界面(托管结账),以及已签名的网络钩子
我们从头到尾设计并构建了产品——从基础设施和架构到登录页面、商户仪表板和文档。下面我们将介绍Payora解决的问题、它的内部工作原理,以及使接受加密货币变得可预测和安全的工程决策。
上下文也很重要。Payora 从来不是一个一次性的支付小部件,而是一个共享支付层用于一整套项目:只需部署一次,您就可以通过将每个服务注册为单独的商户来接受加密货币。这为每个新产品节省了数十个小时,并消除了通常随着时间推移而在网站上扩散的不兼容支付模块。一个拥有更多项目的所有者,其单一网关的回报越高:一个地方进行更新,一个安全模型,所有项目共享一套状态。
02背景和问题
接受加密支付在"技术上"是简单的——困难的部分在于做到这一点可靠地 和 可重复地。当我们将任务分解时,一整套问题浮现出来,所有自行接受加密货币的人都会遇到:
- 保管风险。第三方处理器自己持有资金:这意味着费用、限制,以及资金被冻结或服务消失的风险。
- 重复的代码。在每个新网站上,支付模块都是从头开始重写——地址生成、监控incoming transfers、金额对账、发票状态。
- 不可靠的通知。商店必须立即了解支付情况并信任来源。手动生成的“ping”容易伪造,手动轮询区块链意味着负载和延迟。
- 将支付与发票匹配。如果每个人都支付到一个单一地址,弄清楚谁支付了什么就会变得很麻烦。
- 少付和多付。费率浮动,用户四舍五入金额,网络收取费用——你需要逻辑来处理部分支付和可接受的偏差。
简要要求是:构建一个网关,将所有这些日常事务从商店开发者的工作中移除,同时不剥夺对资金的控制。商家应该能够在一个晚上开始接受加密货币,而不是急于求成,并且仍然能够确保资金直接到达他们手中。
任务的一个独立层面是买方的信任。支付界面必须看起来足够令人安心,以便人们不害怕发送资金:明确的金额、可见的地址、二维码和倒计时到发票到期的计时器。这里的任何马虎都会直接影响支付完成,因此我们将结账视为销售漏斗的完整部分,而不是“技术屏幕”。
最后是基础设施层。该服务处理资金,这意味着它必须在一个可预测、隔离的环境中运行,具有明确的访问控制、有效的证书和周界保护。在金融科技领域,任何留到“后面”的细节都会变成事故,因此我们从一开始就将环境要求融入其中,而不是在负载下进行改造。
03项目目标
从简要中产生了具体的产品和工程目标,我们在每个阶段都牢记这些目标:
- 简单集成。连接一个站点只需一个请求来创建发票和一个 webhook 处理程序。不是千行的 SDK,而是简单、可读的 REST。
- 默认情况下为非托管。私钥永远不会离开所有者的身边。网关服务器在接受资金方面以只读方式运行。
- 一个准备好的支付界面。因此商家不必设计支付 UI — Payora 提供一个托管的结账界面,包含发票、地址、二维码和计时器。
- 可信通知。每个 webhook 都是签名的;商店验证签名,无法被假冒的“已支付”欺骗。
- 可预测性。清晰的发票状态,透明的欠款和到期逻辑,幂等性。
- 自托管。在您自己的服务器上部署,API、支付和管理的独立子域名。
这些目标被故意框定为约束而非愿望。它们中的每一个都在设计阶段排除了不合适的架构选项。例如,非托管要求立即排除了任何服务器持有密钥的方案;简单集成要求拒绝了重型SDK,转而支持透明的HTTP;可预测性要求则规定了严格的状态模型,而不是“魔法”行为。结果是一个狭窄而专注的产品——它做一件事,但做得可靠。
04我们构建的内容
Payora将加密货币接受打包成三个清晰的构建模块,涵盖整个支付生命周期:
一个API
通过一个可预测的REST接口创建发票、获取其状态和获取支付详情。
托管结账
一个准备好的支付页面,包含发票、地址、二维码、金额和计时器——商店一侧没有加价。
签名的网络钩子
关于发票状态变化的服务器到服务器通知,由商店进行加密签名和验证。
非托管核心
资金直接进入商家的地址;网关仅监控入站转账并报告它们。
在这个核心之上是一个具有清晰定位的着陆页,一个用于创建项目和查看发票的商户仪表板,以及开发者可以集成而无需任何调用的文档。所有这些都作为一个单一产品在专用基础设施上部署。
至关重要的是,这三个模块并不是孤立的——它们形成一个闭环:API 创建发票,结账将其展示给买家,网络钩子将结果返回给商店。每个元素只知道它需要知道的内容,并且不干扰其他人的责任领域。这种凝聚力使得网关与一堆脚本区分开来:集成者不必将各个部分粘合在一起;他们处理的是一个完整的 "发票 → 支付 → 通知" 流程。
产品一句话概括: "一个 API,一个准备好的结账和签名的网络钩子。自托管和非托管:你的密钥,你的资金。停止在每个网站上重写支付模块。"
05解决方案架构
Payora 分布在多个子域名上——这样角色和负载被物理分开,访问更容易锁定:
- payora.money — 登陆页面:定位、开发者文档、进入仪表板的入口。
- api.payora.money — 程序接口:商店调用以创建发票和检查其状态的地方。
- pay.payora.money — 托管结账:买家看到的支付页面。
- admin.payora.money — 管理面板和商户仪表板:项目、密钥、发票历史、Webhook 设置。
这个分离并不是表面上的。它让我们能够为支付屏幕和API提供不同的缓存和安全策略,隔离管理区域,并在需要时独立扩展或提取部分。其背后是一个服务器堆栈,位于PHP 8.3,在一个面板管理的环境中部署,位于Cloudflare(DNS、TLS、边界保护)之后。
从逻辑上讲,系统由四个模块组成:请求接收(API和验证),发票会计(状态、状态、金额和截止日期),区块链监控(检测转账到发票地址),以及通知(构建和发送签名的网络hooks)。每个区块拥有其支付生命周期的一部分,并在明确的边界内与其他区块进行通信。
每个子域名的拆分还带来了操作上的优势:公开可用的着陆页和结账页面与管理区域分开,管理区域的访问可以进一步限制。如果将来任何区块成为瓶颈——比如,随着发票数量的增加,区块链监控——可以在不影响其他部分的情况下进行增强或提取。架构从一开始就设计为可扩展,而不仅仅是一次性启动。
06支付流程
从集成商的角度来看,整个流程可以分为几个步骤,其中大多数步骤在商店不参与的情况下进行:
- 1. 发票创建。商店调用API:金额、货币、订单ID、webhook地址。作为响应——一个带有唯一细节和托管结账链接的发票。
- 2. 付款。买家进入Payora的付款界面:他们看到金额、地址、二维码和计时器。他们可以从任何钱包付款。
- 3. 转账检测。网关监控发票地址并注册传入转账,将金额与预期金额进行比较,并允许可接受的偏差。
- 4. 确认。在所需的确认数量后,发票状态变为“已支付”。
- 5. 签名的 webhook。Payora 向商店发送服务器端通知,包含状态和签名;商店验证签名并执行其操作——释放商品、充值、授予访问权限。
一个关键细节是幂等性和信任。商店绝不能依赖用户重定向到“感谢支付”页面:关于资金的唯一真实来源是来自 Payora 的签名 webhook。因此,实际的记账始终与经过验证的通知相关,而不是与浏览器中的操作相关。
这为什么如此重要?重定向很容易被伪造或根本不送达:用户可能在发送资金后立即关闭标签页,失去连接,或手动打开“感谢页面”而没有支付任何费用。如果商店在重定向时发放商品,就会面临滥用和损失的风险。相比之下,webhook 是服务器到服务器的传输,使用密钥签名,并反映发票的真实状态——这就是它,只有它,作为“释放”命令的原因。我们在文档中将这一原则作为要求,而不是建议。
07关键能力
让我们看看是什么让 Payora 不仅仅是“加密接受”,而是一个生产级支付网关。
一个 REST API
整个集成围绕一小组方法构建:创建发票、检查其状态、获取付款详情。响应是可预测的,错误是机器可读的。开发者不必记住特定网络的怪癖——他们只需处理“发票”的概念,而 Payora 负责网络细节。
托管结账
现成的支付页面减轻了商店的一整层工作。在上面,买家可以看到金额、地址、他们钱包的二维码以及发票到期的计时器。这对用户来说更方便,也更安全:网关本身生成并显示详情,商店在显示地址时不参与。
签名的网络钩子
每个关于发票状态变化的通知都用商家的密钥签名。商店在其一侧验证签名,只有在验证通过后才信任内容。这样,即使处理程序地址已知,“已支付”也无法伪造。
金额和截止日期逻辑
汇率浮动,用户四舍五入,网络收取费用——因此网关可以处理可接受的金额偏差,记录部分付款,并在到期时正确关闭发票。这减轻了商店最不愉快的手动工作。
状态和发票生命周期
Payora中的发票经历一系列明确的状态——从“创建”和“等待付款”到“已付款”、“不足付款”或“已过期”。商店不必猜测发生了什么:状态始终明确,状态之间的转换是确定性的。这简化了商店方面的自动化以及支持中争议的解决——对于任何发票,您都可以看到它处于哪个步骤以及为什么会到达那里。
幂等性和可靠交付
网络不可靠,处理程序崩溃,响应丢失——因此通知的设计使得重复交付不会破坏商店的逻辑。同样的付款事实可以安全地处理多次,而不会重复记入任何金额。对于资金来说,这一点至关重要:收到通知两次并正确去重总比丢失唯一一次通知而让客户没有商品要好。
08安全性和非托管设计
Payora的核心原则是不成为保管人。买家的资金流向由企业本身控制的地址,而网关服务器在接受端以“只观察”模式运行:它可以计算发票的地址并跟踪进来的转账,但不持有可以用于支出这些资金的私钥。
这将威胁模型转向有利的方向。即使在服务器被攻破的最坏情况下,攻击者也无法接触到资金——没有任何东西可以“带走”。Webhook签名保护商店免受伪造通知的影响,子域名拆分缩小了攻击面,而边界则由Cloudflare封闭。对于企业来说,这意味着一些简单的事情:资金的控制权掌握在他们手中,而不是外部服务。
此外,我们应用了最小权限原则在基础设施层面:为整个服务设置专用系统账户,跨子域的角色分离,以及只有商家知道的签名密钥。每个组件拥有的权限越少,数据越少,任何单一错误或泄漏的影响范围就越小——这使得处理资金的产品操作起来更加平稳。
关键思想:这里的安全性不是“附加功能”,而是架构的基本形态。一个物理上没有接受私钥的服务器无法丢失它们——这比任何周界防御都要强大。
09TON和USDT:唯一地址
Payora 接受TON 和 TON 网络上的 USDT——快速、低费用的资产,方便在线支付。但支持一种货币仅仅是工作的一半。第二个、更微妙的部分是如何将特定付款匹配到特定发票.
我们选择了每个发票一个唯一地址:对于新发票,生成一个单独的接收地址是确定性的。当转账到达那里时,网关确切知道它属于哪个订单——无需备忘录、付款评论或容易丢失的手动匹配。地址派生的实现方式是服务器无需私钥即可接受:它计算地址并监控它们,保持只读状态。
确定性派生也涉及可恢复性。每个发票的地址可以从原始参数重新计算,这意味着系统不依赖于脆弱的“地址 ↔ 订单”存储:链接是从派生逻辑本身恢复的。对于接受 USDT-on-TON 和原生 TON 这尤其方便——这两种货币在同一网络中,简化了监控并降低了与“更重”链相比的费用。
为什么这很重要:“共享地址 + 评论”是丢失付款的常见来源。每个发票一个唯一地址将匹配变成一个可靠的操作,并消除了整类支持错误。

10不足支付、过度支付和截止日期
在加密货币中,“发票上的确切金额”很少到达。资产与法定货币价格之间的汇率浮动,钱包四舍五入,网络扣除费用,用户可能会有微小的偏差。因此,网关从一开始就围绕“可接受的偏差”的理念设计:预期金额与实际金额之间的小差异被视为正确付款,发票顺利关闭。
明确的少付和多付更棘手。如果收到的金额明显少于预期,发票将获得相应的状态,商店决定如何处理:等待补款、退款或部分关闭。如果收到的金额更多,这一事实也会被记录并呈现给商店,而不是默默吞没。逻辑构建得如此,以至于没有真实的转账会被忽视,每一笔都有明确的解决方案。
另一个问题是截止日期。发票有一个生命周期窗口,在此期间可以进行支付;在结账时,这个窗口以计时器的形式可见。一旦过期,发票将转为“过期”状态,这一点很重要,原因有两个:首先,支付时的汇率不会与锁定的汇率相差太远;其次,商店会收到一个明确的信号,表明订单可以被取消或重新创建。所有这些过渡——少付、多付、过期——都在状态和签名的网络钩子中反映出来,因此集成商始终可以获得机器可读的事件发生情况。
可接受的偏差
小额差异被视为正确的支付——没有虚假的“少付”。
部分支付
明确的少付会获得自己的状态;决定权在商店。
发票过期
发票的生命周期受限于计时器;到期时 — 状态为“已过期”并向商店发出信号。
11商户仪表板和管理员
为了让产品独立运作,仅有API是不够的 — 你需要一个界面,让商家管理他们的项目。在管理区域(admin.payora.money),商家创建项目,获取密钥和用于签署webhook的秘密,配置处理地址和货币,并查看带有状态的发票历史。
这涵盖了日常场景,而不涉及网关开发者:为新网站创建新项目,重新发行密钥,检查特定付款是否到达,调查争议发票。实质上,仪表板是对API所做的一切的“控制台”。
每个商家项目都是独立的:它有自己的密钥、自己的签名秘密、自己的货币集合和自己的webhook地址。得益于此,一个所有者可以从一个仪表板上运行多个完全不同的网站,而不会混淆他们的付款或让一个项目访问另一个项目的数据。带有清晰状态的发票历史将仪表板转变为支持工具:对于任何付款,你总是可以看到它处于哪个步骤,预期和实际到达的金额,以及发送了哪个webhook。
12集成:经过实战检验
Payora并不是在真空中存在 — 它是为整个项目生态系统构建的共享支付层。第一个真正的集成商之一是自由职业市场24freelance:用户的余额充值通过Payora进行。商店创建发票,用户在托管的结账页面上付款,确认后Payora发送一个签名的webhook,余额自动入账。
这个集成是对架构的一个良好现实测试:它表明一个新项目可以快速连接到网关,并且所选择的模型(发票 → 结账 → 签名的 webhook → 记账)可以无缝映射到一个真实产品上,而无需变通。每个连接的服务都作为一个独立的商户项目注册,拥有自己的密钥,这将它们彼此隔离。
第一个集成的主要价值在于它完全遵循了产品中固有的路径——没有绕道,没有“临时”黑客。余额充值是一个极好的试验场,因为在这里,记账的可靠性至关重要:一个错误将意味着用户资金的损失或不合理的余额信用。整个流程在绑定到签名的 webhook 上运行,证实了关键假设:一次部署的网关确实成为一个共享的支付层,新项目作为商户连接,而不是每次都从头开始重写。
13技术栈和基础设施
对于 Payora,我们组建了一个专用的、隔离的环境——拥有自己的系统用户、子域名和政策。这在安全性方面更干净,也更易于操作。
- 后端 — PHP 8.3:API、发票会计、构建和发送webhooks、状态逻辑。
- 区块链层 — 与TON和USDT-on-TON合作:计算发票地址并以只读模式监视转账。
- 基础设施 — 一个独立的隔离账户,带有api/pay/admin子域,位于Cloudflare(DNS、TLS、保护)后面,并且拥有有效的Let's Encrypt证书。
- 安全 — 跨子域的角色分离,商户端的签名密钥,服务器上没有接受私钥。
选择PHP 8.3是务实的:一个成熟、快速的平台,方便在一个可预测的环境中托管API、服务器端结账渲染和管理区域。Cloudflare封闭了周边,并承担TLS终止和基本保护,而Let's Encrypt在所有子域中提供有效证书。整个环境旨在自托管:所有者在自己的基础设施上部署,并保持完全控制——这直接源于产品的非托管性质。
14设计和用户体验
金融科技产品销售信任,因此我们使Payora的界面平静而技术,避免视觉噪音。着陆页在几秒钟内解释了价值:它是什么,适合谁,有何不同(自托管、非托管),以及如何开始。文档和仪表板的入口只需点击一下。
特别关注支付屏幕。这是用户花钱的时刻,任何模糊都会影响转化。因此,在托管结账中,一切都简化到基本要素:金额、地址、二维码、计时器和清晰状态。这个屏幕上的杂乱越少,完成支付的比率就越高。
我们将结账用户体验视为工程问题的一部分,而不是“样式”。支付屏幕上的每个元素都解决了一个具体的信任问题:可见的地址和二维码消除了“我在哪里支付”的恐惧,计时器消除了“我还有多久”的不确定性,实时发票状态回答了买家的主要问题——“我的钱到了吗”。这些共同减少了放弃支付和支持请求的数量,对于支付产品来说,这与技术可靠性同样重要。
15我们的工作方式
我们分阶段进行项目,每一步都展示一个结果:
- 研究。我们绘制了加密货币接受场景、痛点、安全要求以及“发票 → 支付 → 通知”模型。
- 架构。我们设计了子域名拆分、API格式、发票状态方案和Webhook签名机制。
- 核心开发。我们构建了API、发票会计、地址派生和转账监控、托管结账和Webhook交付。
- 集成和运行。我们连接了第一个真实项目(24freelance余额充值)并在实践中测试了整个流程。
- 启动和基础设施。我们在Cloudflare后面部署了环境,设置了子域名和证书,并制作了登录页面和文档。
这个顺序并不是偶然的:首先我们修复了合同——API格式、状态方案和Webhook签名——然后才围绕它构建实现。这让我们几乎可以并行开发核心和集成:在服务器逻辑组装的同时,合同已经足够稳定,可以准备第一个集成者。每个阶段的演示使我们能够及早发现不匹配并在它们"固定"在代码之前修复它们。
16结果
我们得到的不是一个"加密接受脚本",而是一个自包含的支付网关,您可以自己部署并连接到任意数量的项目。
- 加密支付接受在一个晚上连接 — 一个创建发票的请求和一个Webhook处理程序。
- 企业对资金保持完全控制:非托管和自托管。
- 签名的Webhook和唯一地址消除了整个错误类别:伪造通知和丢失支付。
- 该架构经过真实集成验证,准备扩展到新项目。
但主要结果不在于单个数字 — 而在于模型的转变。以前,业主每建一个新网站就意味着从头开始构建一个新的支付模块;现在它只是共享网关中的另一个商户项目。支付逻辑不再是一次性任务,而成为一个可重用的资产,连接的项目越多,回报越大。
17要点
Payora 是工程严谨如何将一个 "时尚话题" 转变为一个工作工具的例子。这里最有价值的不是产品 "接受加密货币" 而是如何它是如何做到的:没有托管风险,具有可信的通知,以及可预测的发票逻辑。正是这些不华丽但至关重要的细节将一个生产级支付网关与另一个手工制作的接受方式区分开来。
对我们来说,这是一个位于金融科技、区块链和基础设施交汇处的项目——正是这种工作中产品思维和技术纪律都很重要。如果您需要支付接受、区块链集成,或具有清晰 API 和仪表板的复杂服务,我们知道如何将其推进到发布。
还有一个更具方法论的收获。最好的金融科技解决方案几乎总是关于您在屏幕上看不到的内容:关于威胁模型,关于幂等性,关于什么算是资金的单一真实来源。这些决策在开始时做出一次,然后在多年内保护产品免受整个类别的问题。这正是我们处理工作的方式——首先是正确的边界和合同,然后才是其他一切。



