8 月 3 日,Amazon 发布了它的新 Amazon 柔性支付服务( Amazon Flexible Payment Service,Amazon FPS )的受限公开 Beta 测试版。 Amazon 的 CTO Werner Vogels 声称,FPS 为那些需要在他们的应用中引入支付管理服务的开发者提供了“无可匹敌的柔性”。伴随着交易成本的降低,小额支付(micro payments)引起注意,FPS 使用之成为可能,并可使用所谓的支付指令(Payment Instructions)功能方便地定制收费模型。
对于一次交易,支付指令可让开发者为每个团体(Party)定义无限多个单独的支付条件——发送人、接收人和调用者(团体完成 Amazon FPS API 的调用,扮演接收人或推动交易的第三方)。
这样,按照 Amazon 的说法,FPS 允许开发者创建一个完全适合业务需要的支付服务,并建立相对复杂和有所创新的业务模型。这正是 Paul Stamatiou 认为 Amazon FPS 不能直接比作其它传统支付服务的原因。它并不是一个用于支付过程的完整服务,而“更象一种工具,用于搭建一些东西来解决类似的需要,尽管是在一种特殊的情况下。”
Amazon 提供了可能的支付指令的例子:
- 交易总额(Transaction Amount):指定固定最小值、最大值、范围或某次支付的特定总额。
- 交易日期(Transaction Date):配置在特定时间执行的支付交易(如,特定天、每周、每月或日期范围)。
- 花费限制(Spending Limit):设置每天、每周或每月的交易次数或花费总额的限制,以控制你应用的花费。
- 接收人列表(Recipient List):指定被授权访问或接收资金的接收人。
- 支付方式(Payment Method):指定你接受的应用所提供的支付方式(信用卡、银行账户付款、转账)。
- 酬金(Fees):控制哪些团体支付 Amazon FPS 的费用。
一旦支付指令被每个团体设计完毕,一项被称为 GateKeeper 的 FPS 的功能就必须验证他们的兼容性,并安装他们以处理交易:
开发者使用 InstallPaymentInstruction API 来安装支付指令,FPS 会传回一个“标记”。每个标记都是唯一的,它是支付指令的安全句柄。一次成功的交易需要 3 个兼容标记,分别是发送人,接收人和调用者。
支付指令可以通过所提供的用户界面(它们往往作为服务条款被提供)来指定,或可使用 GateKeeper 领域特定语言编程描述。Duane Krause 提供了这个 DSL 设计的一些内幕:
当我在 Amazon 的时候,我设计了这门语言。[……] 其目的是为了方便日期和现金计算,而不同团体书写计算的不同部分。它同样也方便断言语句的书写,这样如果任一语句求值结果为 false 时,交易将不会发生。这就允许团体设置条件和规则,与动态契约类似,只不过此处是通过这些 GK(即 Gatekeeper)代码片段来设置。所有的代码片段被结合在一块儿并一起运行。
例如,以下的 Gatekeeper 代码使用指定使用限制来创建一个多重使用标记(文档来源):
string MyTokenUsageLimit1Type := 'Amount';<br></br> TransactionTimestamp <= '2008-10-284T05:22-0700' orSay 'TransactionTimestamp used after validity';<br></br> string PaymentMethod := 'abt';<br></br> MyRole == 'Sender' orSay 'Role does not match';<br></br> money MyTokenUsageLimit1 := 'USD 100';<br></br> duration MyTokenUsageLimit2Period := '1 months';<br></br> string MyTokenUsageLimit2Type := 'Count';<br></br> integer MyTokenUsageLimit2 := 5;
据 Krause 所说,Amazon 选择设计一门特定用途的语言原因之一是因为其新支付服务“是一个给予了过多功能的安全关注点,而它们可能可以利用更通用的语言来得到。”此外,它更具表现力,这有助于“简化复杂任务”。
对 Paul Stamatiou 而言, FPS 是支付管理服务领域内的一次重大革新,它建立于“Amazon 从处理货币交易中所学到的所有经验”基础之上。
评论