网络支付有什么问题?任何网站都可以托管购物车并接收信用卡支付或类似方式。当今网络的自由支持许多商业模式。以下问题存在
- 用户无法选择支付方式;他们必须从预定义选项中选择。
- 在大多数情况下,用户必须在每个网站上输入实际的信用卡号码。这就像把你的昂贵汽车钥匙交给某人,让他们在可能存在危险的街区(网络)里开车兜风,然后说请不要被抢劫!
- 商户通常必须自行管理所有这些:支付处理程序设置、昂贵的处理费,甚至可能包括 PCI 合规性。
有一些服务可以减轻很多此类复杂问题,例如 PayPal、Stripe 等,但它们并没有很好地集成到网络设备中。Mozilla 希望引入一个通用的网络 API,使网络设备上的支付变得简单安全,同时对于商户而言仍然像结账按钮一样灵活。
作为第一步,Mozilla 将在 Firefox OS 中引入 navigator.mozPay(),以便网络应用程序可以 接受支付。
它如何运作?
navigator.mozPay() 是一个 JavaScript API,它借鉴了 google.payments.inapp.buy(),但经过修改,可以支持多种支付提供商和运营商计费。当网络应用程序在 Firefox OS 中调用 navigator.mozPay()
时,设备会显示一个带有简洁 UI 的安全窗口。经过身份验证后,用户可以轻松地将支付费用计入其移动运营商账单或信用卡。完成支付后,应用程序会交付产品。重复购买快速简便。
在我之前的一篇文章中,我谈到了 购买应用程序并接收收据。navigator.mozPay()
不同之处在于,它没有购买产品的概念,它只是一个 API,用于促进对数字商品或服务的支付,无论是什么。
支付从客户端开始并结束,但进一步的处理和通知在服务器端进行。本文简要介绍了它们是如何协同工作的。有关完整深入的文档,请阅读 Firefox Marketplace 应用程序内支付指南。
与支付提供商集成
多个 提供商 将在 navigator.mozPay() 的幕后促进支付。例如,Firefox Marketplace 将能够促进支付。
作为开发者,你将实质上授予你希望通过其进行销售的每个提供商的权限。在 API 的当前设计中,你可以通过向每个提供商请求应用程序密钥和应用程序密钥来实现,以便你可以对支付请求进行数字签名。签名请求可防止未经授权的方销售你的产品,并防止用户篡改价格等。
发起支付
当用户点击网络应用程序中的“购买”按钮时,你将使用你的应用程序密钥创建一个 JSON Web Token (JWT)。如果你与多个提供商有协议,你将为每个提供商创建一个 JWT。启动支付大致如下所示
document.querySelector('button.buy').onclick = function() {
navigator.mozPay([mozillaJWT, otherJWT, ...]);
};
定义产品
JWT 是一个签名的 JSON 对象,它定义了产品名称和价格等详细信息。以下是一个示例,为了简洁起见,省略了一些属性
{
"iss": APPLICATION_KEY,
"aud": "marketplace.firefox.com",
...
"request": {
"name": "Magical Unicorn",
"pricePoint": 1,
"postbackURL": "https://yourapp.com/postback",
"chargebackURL": "https://yourapp.com/chargeback"
}
}
你将价格定义为价格点,以便支付提供商可以为你处理每个地区的货币兑换。在本示例中,pricePoint
1 可能是 0.89 欧元或 0.99 美元等。将支持少量微支付。有关如何构建支付请求 JWT 的详细信息,请参阅 navigator.mozPay() 规范。
完成支付
要完成支付,你需要等待提供商将结果发布到你的服务器的 postbackURL
(成功时)或 chargebackURL
(失败时)。在 JavaScript 中,请求购买的更完整示例将涉及等待回发到达,如下所示
var request = navigator.mozPay([mozillaJWT, otherJWT]);
request.onsuccess = function() {
// The payment window has closed.
whenPaymentResultReceived(function() {
console.log('Success! User has purchased a Magical Unicorn.');
});
};
要实现 whenPaymentResultReceived()
,你可能需要打开一个连接到服务器的 WebSocket,等待支付结果,并验证传入的 JWT 签名。有关回发和冲回通知的详细信息,请参阅 navigator.mozPay() 规范。
试一试
Firefox Marketplace 中的支付尚未完全上线,但你可以模拟支付来测试你的代码。登录 Firefox Marketplace 开发者中心 并 生成 应用程序密钥和应用程序密钥,用于模拟。使用这些密钥,你可以在 JWT 中添加一个特殊的参数,如下所示
{
"request": {
"name": "Magical Unicorn",
"pricePoint": 1,
...
"simulate": {"result": "postback"}
}
}
这将显示 Firefox OS 上的支付窗口,但不会扣除你的真实资金。它将让你测试你的客户端 JavaScript 代码和服务器回发处理程序,以确保所有内容都顺利集成。上线后,只需删除 simulate
属性即可。如果你不熟悉 Firefox OS 开发,请查看 Firefox OS 模拟器。
如果你已经在为 Firefox OS 开发游戏或网络应用程序,请尝试考虑使用 navigator.mozPay() 来提供高级内容。
使用库会更容易
我们也是这么想的!我们为 Node.JS 和 Python 构建了库,使 navigator.mozPay() 的服务器端逻辑尽可能简单。更多语言的库即将推出。我们还在尝试 完全移除服务器先决条件。
当前状态
你可能已经从前缀 navigator.mozPay()
可以看出,这是一个实验性 API,可能会发生巨大变化或在未经通知的情况下取消前缀。它将在首批 Firefox OS 手机上处理实时支付,并根据实际使用情况迅速发展。
Mozilla 计划通过 W3C 与其他供应商合作,达成一项关于以最佳方式支持网络支付的通用 API 的共识。在 Firefox OS 发布后,Mozilla 计划将 navigator.mozPay()
添加到 Firefox for Android 和桌面版 Firefox。
新的商业模式
长期以来,广告一直是网络上的 主要商业模式,但用户已明确表示 不想看广告。Mozilla 并不打算直接颠覆广告业务,但它正在努力 解决与广告网络相关的严重隐私问题。
如果用户明确为内容付费呢?navigator.mozPay()
使这种直接支付模式成为可能:如果网络上的内容很棒,你可以付费使用它。它已经 似乎在现有移动应用程序中运行良好。移动广告是否能为内容制作商带来与桌面广告相同的收入?我没有这些问题的答案,但有一点是肯定的:网络应该支持各种类型的业务,而支付应该是网络的一项一流功能。
它是网络化的吗?
Mozilla 使用 navigator.mozPay()
的主要目标是为用户和商户提供选择、安全性和易于使用的支付系统。商户如何与支付提供商交互的详细信息尚未在 API 中指定,这显然是一个差距。首批 Firefox OS 手机将预装允许的支付提供商白名单,这也不是理想状态。
在更网络化的模型中,参与支付的所有方都将完全去中心化,以便创新可以自然发生,未知的支付提供商可以出现。谁将成为下一个 M-Pesa?一个优雅的 API 将支持这一点。构建一个安全且去中心化的支付 API 是一项雄心勃勃的挑战;该解决方案需要解决这些核心信任问题
- 如何让客户相信他们支付后会收到商品?
- 客户如何确保他们的支付凭据得到安全处理?
- 商户如何保证在交付商品后能收到付款?
与任何与金钱相关的事物一样,欺诈行为在每个环节都存在着。 比特币 是一种数字货币,它通过 区块链 解决了一些信任问题,而 PaySwarm 则是一种网络支付协议,它通过去中心化的资产、公钥等解决了其中的一些问题。Mozilla 将会密切关注 PaySwarm 以及其他模式,希望 navigator.mozPay()
最终能整合一些这些概念。
关于 kumar303
Kumar 为各种项目(例如支持 Firefox 扩展 的项目)修复 Mozilla 网络服务和工具的漏洞。他也修复了大量的 随机开源项目 的漏洞。
34 条评论