mothership-ec/cog-mothership-stripe

此软件包已被废弃,不再维护。未建议替代软件包。

Mothership中的Stripe网关Cog模块

2.0.1 2015-12-08 14:52 UTC

README

此模块为Mothership提供与Stripe支付网关的集成,并提供了支付和退款的方法。

配置

安装将在配置文件中创建一个stripe.yml文件。默认情况下,它看起来像这样

secret-key: sk_test_BQokikJOvBiI2HlWgH4olfQ2
publishable-key: pk_test_6pRNASCoBOKtIshFeQd4XMUh

默认值是Stripe文档中提供的,以确保测试模式下的使用。因此,use-test-payments配置设置对Stripe功能没有任何影响,并且它应该一安装就自动设置为测试模式。在测试模式下尝试使用真实卡片将导致验证错误,因此如果没有设置实时环境的密钥,则无法创建订单。

secret-key是Stripe的服务器端ID密钥,客户永远不会看到。而publishable-key是Stripe的客户端ID密钥,它出现在连接到Stripe的JavaScript中。

要将Stripe设置为您的活动网关,请使用以下命令更新服务容器

$services['gateway'] = function($c) {
    return $c['gateway.collection']->get('stripe');
};

API过程

Stripe网关永远不会离开Mothership,而是使用JavaScript和PHP类连接到API,而不需要重定向。过程如下

  1. 当客户继续支付时,Purchase#purchase控制器将必要的数据存储在会话中,并重定向到Purchase#cardDetails
  2. 此控制器在resources/view/card_details.html.twig文件中渲染一个表单。虽然此表单使用Symfony确保它具有CSRF保护,但它不用于创建表单元素。原因是Symfony不支持没有名称的表单元素,而这是Stripe API所要求的,以防止敏感数据被提交。
  3. 当表单提交时,表单数据将通过https://js.stripe.com/v2/文件进行验证。有关格式(例如,如果卡号无效)的问题将在.payment-errors中显示错误消息。
  4. 如果表单有效,它将使用此数据和订单上的账单地址数据创建一个card对象,并将其发送到Stripe。
  5. Stripe为卡返回一个单次使用的令牌,并在表单中附加一个隐藏字段,将令牌作为值,然后提交表单。
  6. 一旦表单提交,它将重定向到Purchase#purchaseAction控制器。这调用Gateway类上的purchase方法,如果它捕获到Stripe_CardError,则重定向到失败URL。
  7. Gateway::purchase()方法返回一个Stripe_Charge实例,表示对卡的收费,并将Stripe生成的ID设置为数据库中的支付参考。然后可以使用Stripe_Charge::refund()方法使用此来退款。

备注

  • 如上述API流程中所述,结账表单不使用Symfony表单来生成字段。这是因为出于安全原因,卡片数据不能被提交。表单字段还有一个data-stripe属性。在我们的网关实现中,这些属性实际上并未被使用,因为我们还想添加地址详情。但如果我们需要的话,它们提供了一种更简单的方式来抓取表单数据。
  • Stripe接受最低可能的货币单位支付金额,因此我们不是提交1英镑,而是需要提交100分。这有点尴尬,因为一些货币,如日元,是零小数货币,不能以相同的方式分解。Gateway类有一个受保护的属性,定义了所有零小数货币代码(根据Stripe的文档)。如果一个货币不是零小数货币,支付金额将乘以100并转换为整数。据我所知,没有货币是以不同的方式分解的。