【发布时间】:2019-05-06 22:15:47
【问题描述】:
我遇到了奇怪的问题,有时会发生这种情况,当用户通过贝宝支付课程费用时,订单状态从待处理变为处理中,而不是已完成。
在这张图片中,收到了 IPIN 通知,但订单仍处于处理阶段,可能是什么原因导致了此问题。我试图复制这个问题,但它最终没有复制,它有时会发生。
这是产品信息:
- 产品是虚拟产品
- 库存被禁用
【问题讨论】:
标签: php wordpress woocommerce paypal payment-gateway
我遇到了奇怪的问题,有时会发生这种情况,当用户通过贝宝支付课程费用时,订单状态从待处理变为处理中,而不是已完成。
在这张图片中,收到了 IPIN 通知,但订单仍处于处理阶段,可能是什么原因导致了此问题。我试图复制这个问题,但它最终没有复制,它有时会发生。
这是产品信息:
【问题讨论】:
标签: php wordpress woocommerce paypal payment-gateway
如果您只销售虚拟产品,您可以在 Paypal 的付款完成功能上强制订单状态为“已完成”,这样:
add_filter('woocommerce_payment_complete_order_status', 'paypal_payment_complete_order_status', 10, 2 );
function paypal_payment_complete_order_status( $status, $order_id, $order ){
if( $order->get_payment_method() === 'paypal' )
$status = 'completed';
return $status;
}
代码进入您的活动子主题(或活动主题)的 function.php 文件中。经过测试和工作。
此挂钩仅在成功支付时触发,最初有 2 个可能的订单状态值“处理中”或“已完成”(取决于是否需要“处理”)。所以这个答案代码只是将订单状态强制为“已完成”,目标是 Paypal 支付网关(对于虚拟产品)。 This hook 位于
WC_Orderpayment_complete()方法上。
所有支付网关都使用payment_complete()方法成功支付,Paypal 使用WC_Gateway_Paypal_Response类。
【讨论】: