itinerisltd/gf-sagepay

Gravity Forms SagePay 扩展插件


README

GitHub Actions Packagist Version PHP from Packagist Packagist Downloads GitHub License Hire Itineris Twitter Follow @itineris_ltd Twitter Follow @TangRufus

SagePay 支付网关插件用于 GravityForms。

目标

允许 Gravity Forms 通过 SagePay 服务器 接受 SagePay 一次性付款。

功能

不支持/未实现

尽管这些功能不支持此插件,但您可能可以通过 MySagePay 来实现

  • 卡参考
  • 令牌账单
  • 延迟付款
  • 周期性付款
  • 作废
  • 退款
  • 中止
  • 购物车
  • 附加费
  • 账户类型 M - 用于电话 (MOTO) 交易
  • 账户类型 C - 用于重复交易

拉取请求 欢迎提交。

最低要求

  • PHP v7.2
  • PHP cURL 扩展
  • WordPress v4.9.5
  • Gravity Forms v2.4.14.4

安装

Composer (推荐)

composer require itinerisltd/gf-sagepay

从源码构建 (不推荐)

# Make sure you use the same PHP version as remote servers.
# Building inside docker images is recommanded.
php -v

# Checkout source code
git clone https://github.com/ItinerisLtd/gf-sagepay.git
cd gf-sagepay
git checkout <the-tag-or-the-branch-or-the-commit>

# Build the zip file
composer release:build

然后,像往常一样安装 release/gf-sagepay.zip

最佳实践

始终使用 HTTPS

尽管 SagePay 接受不安全的 HTTP 网站,但您应该 始终使用 HTTPS 来保护所有通信。

支付状态

始终在 MySagePay 上双重检查支付状态。

欺诈保护

为了防止退款,在可能的情况下强制执行 3D SecureAVS/CV2 规则。

测试沙盒

在上线前,始终在测试沙盒中测试插件和您的欺诈保护规则。

如果您无法将测试服务器 IP 白名单化,请使用 protxross 作为 供应商代码

使用 ngrok 使本地通知 URL 公开可访问。

使用 测试信用卡

常见问题

缺少礼物援助接受框

只有注册的慈善机构才能通过 Sage Pay 平台使用 礼物援助。只有当您的供应商账户已启用礼物援助并使用 捐赠 作为交易类型时,礼物援助接受框才会显示。

在表单设置中缺少 GF SagePay

确保您满足最低要求。请在系统状态页面检查您的环境详情。

邮寄地址

OmniPay需要账单地址和发货地址。

用例:不交付任何实物商品

将发货地址字段映射到账单字段。

用例:允许邮寄到账单地址

这与WooCommerce的方法类似。

使用Gravity Forms的内置功能:显示选项以使用不同字段提交的值

常见问题解答

您会添加对旧 PHP 版本的支持吗?

绝不!此插件仅适用于活跃支持的PHP版本

不要在已停用或仅提供安全修复的PHP版本上使用。

这看起来很棒。我可以在哪里找到更多类似的好东西?

我可以在哪里给出 ⭐⭐⭐⭐⭐ 评价?

谢谢!很高兴你喜欢它。让我的老板知道有人在使用这个项目很重要。请考虑

开发中

公共 API

构建继续确认的 URL

ConfirmationHandler::buildUrlFor(Entry $entry, int $ttlInSeconds = 3600): string

用法

$entryId = 123;
$rawEntry = GFAPI::get_entry($entryId);
if (is_wp_error($rawEntry)) {
    wp_die('Entry not found');
}

$url = ConfirmationHandler::buildUrlFor(
    new Entry($rawEntry),
    86400 // expires in 24 hours (24*3600=86400)
);

echo $url;
// https://example.com?entry=123&gf-sagepay-token=XXXXXXXXXXXX

用例:使用"使用确认查询字符串根据另一个提交填充表单"

  1. 用户填写表单A
  2. 用户完成SagePay结账表单
  3. 用户返回并点击CallbackHandler
  4. CallbackHandler根据确认设置将用户发送到表单B
  5. 用户以合并的查询字符串到达表单B的URL

如果用户在完成表单B之前退出,您可以使用ConfirmationHandler::buildUrlFor为用户生成一个单次使用、短暂有效的URL以继续表单B。

注意

  • 该URL继续Gravity Forms的确认
  • 获得该URL的人将继续进行确认,不执行身份验证
  • 确认将使用数据库中最新字段值,这些值可能已更改
  • 不检查支付状态

处理重定向 URL 获取失败

在表单提交后,此插件将订单信息发送到SagePay,以换取一个重定向URL(SagePay托管结账表单的URL)。

默认情况下,当重定向URL检索失败时

  1. 将条目支付状态标记为失败
  2. 日志错误
  3. wp_die 立即

常见失败原因

  • 错误的供应商代码
  • 服务器IP未列入白名单

提示:检查日志

您可以使用'gf_sagepay_redirect_url_failure_wp_die'过滤器来

  • 继续Gravity Forms的feed和确认流程
  • 执行额外操作
  • 重定向到不同的错误页面

重要: 如果此过滤器返回 false,则正常 Gravity Forms' 数据源和确认流程将继续。不正确的设置可能会导致灾难。

示例

add_filter('gf_sagepay_redirect_url_failure_wp_die', function(bool $shouldWpDie, ServerAuthorizeResponse $response, Entry $entry, GFPaymentAddOn $addOn): bool {

    // Do something.

    return true; // Do `wp_die`
    return false; // Don't `wp_die`, continue normal flow
    return $shouldWpDie; // Undecisive
}, 10, 4);

必读清单

在开发之前阅读以下内容

Gravity Forms

Gravity Forms 有未记录的隐藏魔法,请阅读其源代码。

测试

composer style:check

不接受不带测试的拉取请求!

反馈

请提供反馈! 我们希望尽可能让这个库在更多项目中发挥作用。请提交一个 问题 并指出你喜欢和不喜欢的地方,或者分叉项目并提出建议。 没有问题太小。

变更日志

有关最近更改的更多信息,请参阅 CHANGELOG

安全

如果您发现任何安全相关的问题,请通过电子邮件 dev@itineris.co.uk 而不是使用问题跟踪器。

致谢

GF SagePay 是由 Itineris Limited 创建的 Tang Rufus 的项目。

完整的贡献者列表可以在 这里 找到。

许可

GF SagePayMIT 许可证 下发布。