介绍 navigator.mozPay() 用于网络支付

网络支付有什么问题?任何网站都可以托管购物车并接收信用卡支付或类似方式。当今网络的自由支持许多商业模式。以下问题存在

  • 用户无法选择支付方式;他们必须从预定义选项中选择。
  • 在大多数情况下,用户必须在每个网站上输入实际的信用卡号码。这就像把你的昂贵汽车钥匙交给某人,让他们在可能存在危险的街区(网络)里开车兜风,然后说请不要被抢劫!
  • 商户通常必须自行管理所有这些:支付处理程序设置、昂贵的处理费,甚至可能包括 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.JSPython 构建了库,使 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 网络服务和工具的漏洞。他也修复了大量的 随机开源项目 的漏洞。

更多由 kumar303 撰写的文章…


34 条评论

  1. Tim Wright

    很酷,这是专门针对点击式购买,并将定期账单保留在服务器上的吗?或者您是否也看到了它可用于自动账单目的?

    2013 年 4 月 4 日 下午 3:18

  2. Oliver

    嗨,各位!

    好主意,一定要将比特币支付作为一种选择(可以使用像 Bitpay 这样的支付处理器)。

    2013 年 4 月 4 日 下午 5:23

    1. Manu Sporny

      嗨,Oliver!

      正如文章末尾所述,PaySwarm 的工作计划将整合比特币以及其他替代货币。需要解决一些监管问题,但我们认为这些问题是可以克服的。

      2013 年 4 月 5 日 上午 8:25

  3. Marcin

    听起来不错。鉴于支付系统的数量和差异,这很复杂。

    Mozilla 是否有任何计划将来开设自己的支付系统,作为一项额外的收入来源,为开发者和研究人员提供资金?

    2013 年 4 月 4 日 下午 5:53

    1. Manu Sporny

      Marcin,我肯定不是在这里代表 Mozilla 说话,但我将向 Mozilla 组织提交一份公开提案,通过在浏览器中构建支付功能(并收取微不足道的费用,这笔费用将用于在 Mozilla 进行更多出色的网络开发)来为他们的一些开发工作提供资金。

      要实现这一目标,需要克服许多、许多法律障碍,但 PaySwarm(以及 Meritora)的工作确实使这成为一种可能性。如果 Mozilla 的员工有兴趣,我们有兴趣追求这种可能性。

      2013 年 4 月 5 日 上午 8:27

    2. Kumar McMillan

      Marcin,我不确定我是否正确理解了你的问题,但 navigator.mozPay() 的确是作为开发者、研究人员或任何想要销售数字商品、接受捐赠等人的收入来源而设计的。目标是让开发者更容易在线上以金钱换取内容。

      2013 年 4 月 5 日 上午 10:52

  4. Kumar McMillan

    第一个版本将只用于点击式购买。您可以跟踪服务器上的定期时间表,并在用户返回应用程序时提示他们,但在未来,我们计划将适当的定期账单作为 API 的一部分提供。

    2013 年 4 月 4 日 上午 8:02

  5. Julien

    嗨!
    我想 “chargebackURL” 的含义可能存在错误。
    通常,当用户在收到账单后取消交易时会发生退款(用户告诉他的银行他从未进行过此支付,因此银行会将用户的账户重新记入)。这是一个异步事件,可能会在实际支付后几个月发生。
    您是否知道此 URL 的真正用途?

    2013 年 4 月 4 日 上午 8:23

    1. Kumar McMillan

      “退款” 确实是一个含义广泛的术语。在我们这里,它可能意味着用户要求退款,或者费用被退回,或者它只是以其他方式失败。应用程序确实可能在*将来*收到退款通知。

      2013 年 4 月 4 日 下午 3:13

  6. Manu Sporny

    关于 PaySwarm 的更多信息,PaySwarm 在文章结尾被提及,它是一种去中心化的支付解决方案。它的第一个商业实施版本在两天前发布,地址如下:

    http://blog.meritora.com/launch/

    您可以在此处了解更多关于 PaySwarm 的信息:

    https://payswarm.com/

    2013 年 4 月 4 日 下午 2:12

  7. cren

    听起来很棒,我很想看到使用比特币的示例。

    2013 年 4 月 4 日 下午 4:38

    1. Manu Sporny

      cren,在 PaySwarm 的工作中,比特币示例只会更改货币值,因此您不会看到像这样的内容:

      {

      “amount”: “135.00”,
      “currency”: “USD”

      }

      您会看到像这样的内容:

      {

      “amount”: “1.00”,
      “currency”: “BTC”

      }

      我们仍在努力在 PaySwarm 中实现比特币支持,但这是计划中的。

      2013 年 4 月 5 日 上午 8:30

  8. Mike

    太棒了,我希望比特币能尽快被整合进来!

    2013 年 4 月 4 日 下午 5:17

  9. Dan

    随着比特币的兴起,它将为网络浏览器提供令人惊叹的支付方式。网络浏览器可以集成钱包,如果您选择了记住密码的选项,那么付款将和点击一个按钮一样简单,毫不夸张地说,它再简单不过了。

    2013 年 4 月 5 日 上午 1:52

    1. Manu Sporny

      Dan,R,虽然我与你一样对比特币充满热情,而且我们正在将比特币支持整合到 PaySwarm 中,但它也有一些缺点——即没有退款。

      这既是功能也是漏洞,因为它极大地降低了使用比特币进行高价值交易的可能性。有些情况下您需要使用美元,而有些情况下您需要使用比特币。PaySwarm 是一种与货币无关的协议,它将支持像比特币这样的虚拟货币……每个货币都有其特定的应用场景和用途。

      2013 年 4 月 5 日 上午 8:32

      1. David Bialer

        我很好奇地想知道比特币或 PaySwarm 是否能够以成本效益的方式处理微交易,例如低于 0.50 美元,低至 0.05 美元的交易。我正在寻找微支付解决方案,这对新兴市场尤其有趣,因为交易额可能非常小。问题是支付处理开销可能非常高,超过交易本身的价值。涉及很多中间人,但比特币似乎有潜力消除中间人和欺诈风险。

        比特币可以被分成微型单位吗?交易中是否涉及任何处理费用?这将是一种很有趣的与 PaySwarm 结合使用的方法。

        2013 年 4 月 8 日 上午 11:54

        1. Manu Sporny

          比特币和 PaySwarm 都能够处理微交易。比特币的精度可以达到小数点后 8 位。PaySwarm 的精度更高,可以达到小数点后 10 位:0.0000000001。PaySwarm 也是与货币无关的协议,因此它可以对任何货币进行这种类型的微交易。比特币只能对比特币金额进行微交易(因此,不支持美元、欧元、日元等)。

          目前,PaySwarm 的第一个商业实施版本是 Meritora:http://blog.meritora.com/launch/

          Meritora 的费用是交易金额的 2%,最低交易费用为 0.0002 美元(这意味着您可以进行数千次微小的转账,但总交易额必须至少产生 0.0002 美元的费用,以支付为您存储交易的成本)。

          最重要的是,PaySwarm 和比特币现在都可以进行微交易。

          2013 年 4 月 9 日 上午 10:13

  10. R

    +1 赞成 Mozilla 使用比特币!这是一个很棒的想法!

    2013 年 4 月 5 日 上午 3:51

  11. evan

    广告的问题不在于它们的可见性,而在于它们伴随着的恶意跟踪。

    广告在隐私战争中被牺牲的唯一原因是它们在实施方式上使其成为最容易过滤的部分。

    2013 年 4 月 6 日 下午 5:22

  12. Pasi

    这时就会有人问:“如果用户禁用了 JS 会怎么样?”!

    在过去 10 年里,我主要从事网店开发,而这确实是阻碍技术发展的一件事,因为您需要为那些出于任何原因禁用了 JS 的用户提供一个单独的系统,因为似乎店主担心他们会因此而失去销售额。

    2013 年 4 月 6 日 下午 11:34

  13. Marcin

    Kumar!

    实际上,我认为 Mozilla 可以成为一个支付网关,然后将收取的部分费用用于资助开发工作(无论是仅用于 mozPay 项目还是整个浏览器),从而减少对捐赠和与谷歌的协议的依赖。

    还不清楚这是否与 Mozilla Corp 的非营利地位有任何冲突,但我还是提出来了。

    -Marcin

    2013 年 4 月 7 日 上午 3:19

    1. Kumar McMillan

      Marcin,是的,Mozilla 确实打算在处理付款时收取少量费用来支持其使命。但是,我们也希望在网络支付领域引入竞争,以便所有人的费用都能降低。

      2013 年 4 月 7 日 下午 11:27

  14. Corn¸

    各位,为什么不自己成为支付处理器,简化费用和处理流程呢?PayPal 太烂了,与 PayPal 打交道也很糟糕。谷歌有时也会制造麻烦,而 Moneybookers 则更糟糕。PayZa 是一场骗局,我们真正需要的是一个提供简单支付处理方式的人——直接或通过任何方式……你们正在计划的这个项目有什么帮助吗?仅仅是使用多个支付处理器?给我们一个比这更好的东西——自己成为处理器……

    2013 年 4 月 7 日 上午 5:28

  15. Fernando Jiménez

    Kumar,很棒的文章!

    值得一提的是,Firefox 市场本身使用 navigator.mozPay() 来收取从 Firefox OS 设备请求的应用程序购买费用。

    / Fernando

    2013 年 4 月 7 日 上午 9:43

  16. Fernando Jiménez

    Marcin!

    Mozilla 已经实施了一个 支付网关,它将在 Firefox OS 的第一个版本中作为 navigator.mozPay 的支付提供者。我不知道每次支付是否会收取费用。

    请注意,这并不意味着不会有其他可能的支付提供者。

    / Fernando

    2013 年 4 月 7 日 上午 9:50

  17. Francisco

    您好。只是一个简短的问题。是否可以将 Firefox 的 UI 更改为最初的 UI?是在模拟器上还是在 Geeksphone 上?

    如果不行,是否有任何方法可以手动更改 UI?我的意思是更改操作系统的 CSS。

    我指的是这个样子:http://cdn2.sbnation.com/entry_photo_images/4724987/DSC_8282-hero_large_verge_medium_landscape.jpg

    2013 年 4 月 7 日 下午 4:47

    1. Kumar McMillan

      Francisco:可能吧。你需要深入研究 Gaia 的历史 https://github.com/mozilla-b2g/gaia/,但如果你回到那个截图的年代,其他功能可能无法正常工作,因为当时它很不稳定。

      2013 年 4 月 7 日 下午 11:22

  18. 蓝手

    McMillan 写了一篇很棒的文章!
    感谢你提供如此棒的想法!

    2013 年 4 月 7 日 下午 11:35

  19. David

    非美国支付方式有哪些?它是否处理增值税、BTW、IVF、州销售税或其他消费税?我是否需要调整会计软件以配合它?

    2013 年 4 月 8 日 上午 0:53

    1. Kumar McMillan

      作为开发者,你无需自行计算税款,税款将根据地区预先计算。相关详细信息将在以下位置发布:https://mdn.org.cn/en-US/docs/Apps/FAQs/Marketplace_payments

      2013 年 4 月 8 日 上午 10:13

  20. Justin Short

    有趣的工作!我们的使用场景与通常的情况相反——我们想向消费者付款,而不是收款。我们的(免费)游戏会向最佳玩家颁发奖励,没有任何附加条件。

    我们目前计划使用 PayPal,但将奖金存入他们的系统需要收取约 3% 的费用,我们必须从奖金中扣除。是否可以通过您的 API 发送资金?这对我们来说非常有用。

    有关游戏的更多信息:https://nous.net/gain/

    2013 年 4 月 9 日 上午 1:05

    1. Kumar McMillan

      Justin,你可能想看看 Balanced 提供的服务:https://www.balancedpayments.com/

      2013 年 4 月 9 日 上午 10:39

      1. Justin Short

        感谢 Kumar!我通常喜欢托管系统——很高兴看到有人提供它。如果有人知道其他替代方案,请告诉我!

        我们也一直在考虑 BTC,当然,但我们不确定普通消费者是否已经准备好了。

        2013 年 4 月 9 日 下午 6:04

  21. Stephen

    这对应用内购买/现有应用程序的附加组件来说非常棒。在 Firefox 市场中是否有机制可以进行一次性预付款购买?

    例如,如果我想以大约 1 美元的定价出售我的游戏/应用程序,是否有方法可以在商店中设置它?

    2013 年 4 月 29 日 上午 10:22

本文的评论已关闭。