-2

我想在 codeigniter 中使用 Payeezy 集成定期付款。我已经使用 curl 实现了单次付款,现在我想通过确认定期付款来更新我的数据库。

4

2 回答 2

0

我可以解释一下将让您获得最少 PCI 合规性问题的过程,那就是基于令牌的 API。

1. 在支付表单中生成 Token

所以基本上你将使用 Javascript API 来生成你的授权令牌。授权令牌不对卡收费。它用于验证卡并返回令牌以获得更好的 PCI 合规性。这个 API 源代码和解释在这里:

https://github.com/payeezy/payeezy_js

2. 将表单发布到您的服务器,以便对 FirstData 进行 Curl 调用

然后,一旦你有了这个令牌,你就可以用一个标准的表单帖子把它发回你的控制器文件,但是删除name你的信用卡号和信用卡 CVC 字段上的属性,这样它们就不会发布到你的服务器上. 请注意,您需要存储此数据(但不是卡号和 CVC),因为在退款(和订阅取消)时,您需要回复最后一次购买令牌、持卡人姓名、卡类型、卡到期日期、金额花费和货币代码。您可能想知道为什么 FirstData/PayEezy 要求您存储持卡人姓名、卡类型和卡到期日期。好吧,对此有一个很好的解释。您的呼叫中心可能需要该详细信息来通过电话与客户进行故障排除。此外,您需要用于退款。而且,最重要的是,如果您正在进行定期订阅付款,您的代码需要在收费前提前查看到期日期,因为如果卡过期,API 调用将失败。最后,因为你

从那里开始,由于您已经熟悉了单次购买的 Curl 流程,因此只需在 Curl 中进行一个小的单个字段更改(transaction_type变为“重复”)即可进行重复。对于不熟悉 Curl 过程的任何人,这里解释一下:

https://developer.payeezy.com/payeezy-api/apis/post/transactions-4

此外,对于那些不熟悉的人,您需要阅读 FirstData/PayEezy 如何希望您使用包含 Content-Type 的特殊标头发送 Curl 请求:application/json、apikey、token、Authorization、nonce 和时间戳。您可以在此处查看更多详细信息:

https://github.com/payeezy/payeezy_direct_API/blob/master/payeezy_php/example/src/Payeezy.php

(我为简化该代码所做的是将来自该脚本的 Curl 调用截获到一个日志文件中,这样我就可以在单个函数中使其更直接,而不是将其分解为所有这些小函数。这使它变得容易得多了解发生了什么。)

3. 为定期付款切换 Curl Call

因此,正如您在 Curl 调用中发现的那样,您了解了如何通过将 transaction_type 设置为“购买”来进行一次性购买。为了进行重复,您将 transaction_type 设置为“recurring”。你必须从一开始就这样做。因此,如果我每月以 29.99 美元的价格出售某物,则第一个月的费用仍需要设置为“经常性”类型,就像随后的任何一个月一样。

4. 您对经常性付款的责任

现在,这是每个人都被挂断的地方,因为它的记录很差,除非你查看 PayEezy 开发者支持论坛。对于订阅,PayEezy 没有用于设置不同持续时间的付款计划的系统,也没有为您设置自动(设置并忘记)订阅。(我想我读到他们在 Apple Pay 上有一些实验性的东西,但还没有其他东西。)所以,要实现这一点,你有 2 个选择:

  1. 使用 Chargify.com。但是,不幸的是,这会增加您的产品或服务的 CPA(每次获取成本)。如果你想使用它,你必须考虑到它。这基本上是您将交易发送到的 SaaS 服务,他们会针对 FirstData/PayEezy 为您处理自动订阅计划。

  2. 推出您自己的 cron 作业解决方案。为此,您基本上采用单笔交易的 Curl 代码,并将交易类型从“购买”更改为“重复”。(从一开始就这样做——不要从经常性收费的“购买”开始。)从那里开始,由你自己的 cron 作业来检查产品或服务的到期条款,然后发回 API 回调转到 FirstData/PayEezy 以使用“重复”交易类型再次对该卡收费。

在任何一个选项中,客户都不会被要求在第一次之后输入信用卡数据,除非他们的卡过期或除非您在为该卡计费时遇到问题(例如资金不足)。

当然,为定期付款做自己的 cron 工作路线会影响您需要准备:

  • 添加一些故障安全代码,以防止重复事务的可能性,例如数据库字段。

  • 添加一些故障安全代码,这样如果您取消了订阅,就不会再次向他们收费。

  • 添加一些故障安全代码,这样如果他们取消订阅,但稍后作为订阅再次购买,您确实会再次向他们收费,并且不会阻止它与您的其他故障安全代码相联系。

  • 在您的产品或服务上添加某种宽限期,这样即使您“说”该期限已过期,您也有 2 天的宽限期,以便您的 API 有机会进行更新。

  • 在客户续订期之前给客户发电子邮件可能是个好主意,这样他们就可以确定他们的帐户中有钱并有办法取消该费用(例如致电您的办公室或呼叫中心,或者有一个链接可以点击您所在的位置)提供一种取消方式)。

  • 如果他们的卡在续订前已过期,并且您在续订前的警告电子邮件中检测到这一点,那么您需要让他们知道这一点。

  • 如果他们的卡在更新时因任何原因被拒绝,那么您需要让他们知道这一点并给他们一个链接以再次通过购物车再次购买,或者以其他方式保存该交易你的代码。

如何取消订阅/停止定期付款

要停止定期付款,您将其视为单次购买的退款,但使用最后一次购买的交易 ID。这在此 Curl 示例中进行了记录:

https://developer.payeezy.com/payeezy-api/apis/post/transactions/%7Bid%7D-0

在“退款”下查看并选择令牌。

于 2017-04-25T08:57:53.990 回答
0

我为 Payeezy 创建了一个 WordPress 插件,它也可以处理重复出现的问题。您应该能够使用 CodeIgniter 的底层 PHP 代码。

https://wordpress.org/plugins/wp-payeezy-pay/

于 2016-09-20T21:00:53.430 回答