前面一篇博客介绍了支付宝开放平台上如何创建应用,以及相应的 SDK 中提供的接口。

这篇博客介绍一下 WooCommerce 中如何添加新的支付方式。


创建一个简单的支付网关

WooCommerce 中的支付网关是基于类的,可以通过插件的方式添加。在插件里面,需要在插件加载后创建一个类,比如:

并且您的类需要继承自 WooCommerce 网关基类,然后您才可以使用设置 API 以及其他一些 WooCommerce 提供的方法:

除了定义自己的类,还需要告诉 WooCommerce 这个类的存在。这是通过添加过滤器实现的:

类中需要实现的方法

大多数的方法继承自 WC_Payment_Gateway 类,但是在自己的网关中要求实现一些方法。

__construct()

在构造方法中,应该定义以下的变量:

  • $this->id:自己的网关的唯一 ID,比如’your_gateway’
  • $this->icon:如果您想在前端网关名称的旁边显示一张图片,输入图片的 URL
  • $this->has_fields:布尔值,如果您想要支付域在结算页面显示的话,设置成 true
  • $this->method_title:在 admin 页面显示的支付方法的标题
  • $this->method_description:在 admin 页面显示的支付方法的描述

构造方法中应该定义并加载设置域:

在调用了 init_settings()之后,可以获取设置并且保存在变量中,比如:

最后,需要为您的设置添加一个保存钩子:

init_form_fields()
这个方法用于设置 $this->form_fields,这是您在自己的网关设置页面中显示的选项,这个方法中需要使用 WC Settings API([2])。

自己网关的基本设置应该包含 enabled,title 和 description:

process_payment( $order_id )

这是网关最重要的部分——处理支付以及订单。这个方法也告诉 WC 重定向用户到哪,这是通过返回的 array 实现的。

下面以 Cheque 网关的 process_function 方法为例:

这个方法实现了:

  • 获取并更新处理中的订单
  • 减少库存并清空购物车
  • 返回 success 和重定向 URL(这个例子中是感谢页面)

Cheque 给订单一个 On-Hold 状态,因为支付不能被自动验证。如果您在构建一个 direct 网关,那么您应该在这里完成订单。在订单被支付之后,应该使用 payment_complete 而不是 update_status:

这可以确保库存确实减少并且状态是正确的值。

如果支付失败,您应该抛出一个错误并且返回 null:

WooCommerce 会捕获这个错误并在结算页面中显示。

更新订单状态

更新订单状态可以通过使用订单类中的方法实现。更新到一个定制状态的例子如下:

上面的例子把订单状态更新为 On-Hold,并且添加一个注意消息通知顾客正在等待一个 Cheque。您也可以不再更新订单状态的时候添加注意消息:

订单状态实践建议

  • 如果订单完成但是 admin 需要人工验证支付,使用 On-Hold
  • 如果订单失败并且已经创建,设置为 Failed
  • 如果订单完成,让 WooCommerce 处理状态并且使用 $order->payment_complete(). WooCommerce 会使用 Completed 或者 Processing 状态并处理库存。

参考

[1] Payment Gateway API
[2] Settings API

 
原文来自:victoriawy.com  感谢作者提供又一个支付宝解决方案。