如何通过wcs_create_subscription为WooCommerce订阅开启自动续费并导入旧用户
关于WooCommerce订阅迁移与自动续费设置的问题解答
1. 能否通过wcs_create_subscription开启自动续费?
可以实现,但需满足两个核心前提:
- 你的**Opayo(原Sage Pay)**支付网关插件必须支持WooCommerce Subscriptions的自动续费功能(确认插件版本兼容,官方WooCommerce Opayo插件已支持订阅令牌存储);
- 导入订阅时必须关联旧系统中用户的Opayo支付令牌(若旧系统已留存该令牌);如果旧系统没保存令牌,必须引导用户重新绑定支付方式——这是PCI合规要求,不能直接存储完整银行卡信息。
满足条件后,旧订阅剩余时长到期时,WooCommerce Subscriptions会自动触发续费流程,无需用户手动操作。
2. 使用wcs_create_subscription导入时需传入的核心数据
以下是创建带自动续费订阅的关键参数(适配Opayo场景):
- 用户ID:
'customer_id' => $old_user_id(关联到目标WordPress用户); - 订阅状态:
'status' => 'active'(对应旧系统中仍有剩余时长的用户); - 到期日期:
'end_date' => $old_subscription_end_date(旧系统剩余时长的到期时间,格式为YYYY-MM-DD HH:MM:SS); - 订阅产品:
'line_items' => array(...)(关联提前创建好的WooCommerce订阅产品,需匹配旧订阅的服务类型); - 支付方式:
'payment_method' => 'opayo'(对应Opayo网关的支付方式slug,需确认插件实际使用的标识); - 支付令牌:
'payment_method_token' => $old_opayo_token(旧系统存储的Opayo支付令牌,用于自动扣费;无令牌则留空,后续需用户补录); - 自动续费开关:
'auto_renew' => true(明确开启自动续费); - 账单信息:
'billing' => array(...)(匹配旧系统用户账单地址,确保支付信息一致性); - 订阅周期:若旧订阅周期与WooCommerce产品一致,可通过产品关联自动获取;特殊周期需手动设置
'schedule' => array(...)(例如array('interval' => 'month', 'interval_count' => 1)表示月付)。
示例代码片段:
$subscription = wcs_create_subscription(array( 'customer_id' => $old_user_id, 'status' => 'active', 'end_date' => '2024-12-31 23:59:59', 'auto_renew' => true, 'payment_method' => 'opayo', 'payment_method_token'=> $old_opayo_token, 'billing' => array( 'first_name' => $old_user_firstname, 'last_name' => $old_user_lastname, 'email' => $old_user_email, 'address_1' => $old_user_address, 'city' => $old_user_city, 'postcode' => $old_user_postcode, 'country' => $old_user_country ), 'line_items' => array( array( 'product_id' => $wc_subscription_product_id, 'quantity' => 1 ) ) )); // 保存订阅 $subscription->save();
3. 关键注意事项
- PCI合规:禁止直接导入用户完整银行卡信息,仅能使用Opayo返回的支付令牌;无令牌时必须让用户重新绑定支付方式,否则无法实现自动续费;
- 测试验证:迁移前在测试环境创建测试订阅,验证Opayo自动续费是否正常触发;
- 状态检查:导入后确认订阅的
active状态、到期日期、自动续费开关是否配置正确; - 用户通知:迁移后给用户发送通知,告知订阅已迁移、自动续费触发时间,同时提供支付方式查看/修改入口。
内容的提问来源于stack exchange,提问作者mlimon
相关产品推荐
相关产品推荐

