mothership-ec / cog-mothership-stripe
此软件包已被废弃,不再维护。未建议替代软件包。
Mothership中的Stripe网关Cog模块
2.0.1
2015-12-08 14:52 UTC
Requires
- php: >=5.4.0
- mothership-ec/cog: ~4.0
- mothership-ec/cog-mothership-commerce: ~5.0
- mothership-ec/cog-mothership-ecommerce: ~3.7
- stripe/stripe-php: ~1.13
Requires (Dev)
- mockery/mockery: dev-master
This package is not auto-updated.
Last update: 2021-03-22 11:06:38 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,而不需要重定向。过程如下
- 当客户继续支付时,
Purchase#purchase
控制器将必要的数据存储在会话中,并重定向到Purchase#cardDetails
。 - 此控制器在
resources/view/card_details.html.twig
文件中渲染一个表单。虽然此表单使用Symfony确保它具有CSRF保护,但它不用于创建表单元素。原因是Symfony不支持没有名称的表单元素,而这是Stripe API所要求的,以防止敏感数据被提交。 - 当表单提交时,表单数据将通过
https://js.stripe.com/v2/
文件进行验证。有关格式(例如,如果卡号无效)的问题将在.payment-errors
中显示错误消息。 - 如果表单有效,它将使用此数据和订单上的账单地址数据创建一个
card
对象,并将其发送到Stripe。 - Stripe为卡返回一个单次使用的令牌,并在表单中附加一个隐藏字段,将令牌作为值,然后提交表单。
- 一旦表单提交,它将重定向到
Purchase#purchaseAction
控制器。这调用Gateway
类上的purchase
方法,如果它捕获到Stripe_CardError
,则重定向到失败URL。 Gateway::purchase()
方法返回一个Stripe_Charge
实例,表示对卡的收费,并将Stripe生成的ID设置为数据库中的支付参考。然后可以使用Stripe_Charge::refund()
方法使用此来退款。
备注
- 如上述API流程中所述,结账表单不使用Symfony表单来生成字段。这是因为出于安全原因,卡片数据不能被提交。表单字段还有一个
data-stripe
属性。在我们的网关实现中,这些属性实际上并未被使用,因为我们还想添加地址详情。但如果我们需要的话,它们提供了一种更简单的方式来抓取表单数据。 - Stripe接受最低可能的货币单位支付金额,因此我们不是提交1英镑,而是需要提交100分。这有点尴尬,因为一些货币,如日元,是零小数货币,不能以相同的方式分解。
Gateway
类有一个受保护的属性,定义了所有零小数货币代码(根据Stripe的文档)。如果一个货币不是零小数货币,支付金额将乘以100并转换为整数。据我所知,没有货币是以不同的方式分解的。