为啥已经付款但是订单状态还是待付款?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥已经付款但是订单状态还是待付款?相关的知识,希望对你有一定的参考价值。

参考技术A 出现订单付款状态未变化,有如下几个原因:①由于网络原因,网上支付实际不成功这种情况下,请登录您的相应支出的网上银行或者支付宝,核实该笔资金是否有支出记录;②由于网络原因,网上支付成功但状态未变更如果登录网银或支付宝,或者邮政商务汇款邮局办理成功,但订单状态未变化,可能由于交易障碍造成,使用网银或支付宝的用户请耐心等待,支付宝系统会在三天内自动对账完成并将支付失败款项退还至支出方;使用邮政商务汇款的用户,请将邮局提供的凭单传真、邮件提供给网站客服人工核实处理。③由于店主在付款过程中变更了订单总额造成款项支出失效这种情况下,请直接联系店主将价格还原,系统会自动重新发出对账支付尝试并完成订单,订单实际差价双方可协商处理。本回答被提问者采纳

在 WooCommerce 中付款后更改订单状态 [重复]

【中文标题】在 WooCommerce 中付款后更改订单状态 [重复]【英文标题】:Change order status just after payment in WooCommerce [duplicate] 【发布时间】:2016-08-26 10:57:01 【问题描述】:

我需要在收到付款后自动将订单状态更改为已完成,但前提是订单状态为“处理中”。我发现 sn-p,是什么使订单状态在每种情况下都完成,但是我的付款插件在成功更改付款后返回数据并更改订单状态以进行“处理”。我想在成功后将其更改为“已完成”,如果状态不是“正在处理”,请不要更改它。我遇到的主要问题是我不知道如何获取收到的状态订单。

这是我的代码:

add_filter( 'woocommerce_thankyou', 'update_order_status', 10, 2 );

function update_order_status( $order_id ) 
   $order = new WC_Order( $order_id );
   $order_status = $order->get_status();    
   if ('processing' == $order_status)     
       $order->update_status( 'completed' );    
        
 //return $order_status;


编辑:

我已经想通了。这是对我有用的代码:

add_filter( 'woocommerce_thankyou', 'update_order_status', 10, 1 );

function update_order_status( $order_id ) 
  if ( !$order_id )
    return;
  
  $order = new WC_Order( $order_id );
  if ( 'processing' == $order->status) 
    $order->update_status( 'completed' );
  
  return;

【问题讨论】:

我为代码格式编辑了您的帖子,但有一个错字。 $oder_status 谢谢,错字也更正了。 【参考方案1】:

更新 2 - 2019:使用 WooCommerce: Auto complete paid orders(更新线程)

所以使用正确的钩子是woocommerce_payment_complete_order_status过滤器返回完成


更新 1: 与 WooCommerce 版本 3+ 的兼容性

我改了答案

基于:WooCommerce - Auto Complete paid virtual Orders (depending on Payment methods),您还可以在条件下处理所有付款方式:

// => not a filter (an action hook)
add_action( 'woocommerce_thankyou', 'custom_woocommerce_auto_complete_paid_order', 10, 1 );
function custom_woocommerce_auto_complete_paid_order( $order_id ) 
    if ( ! $order_id )
        return;

    $order = new WC_Order( $order_id );

    // No updated status for orders delivered with Bank wire, Cash on delivery and Cheque payment methods.
    if ( get_post_meta($order_id, '_payment_method', true) == 'bacs' || get_post_meta($order_id, '_payment_method', true) == 'cod' || get_post_meta($order_id, '_payment_method', true) == 'cheque' ) 
        return;
     
    // "completed" updated status for paid "processing" Orders (with all others payment methods)
    elseif ( $order->has_status( 'processing' ) ) 
        $order->update_status( 'completed' );
    
    else 
        return;
    

【讨论】:

谢谢,但我真的不需要检查付款方式,我只有一个。但是我遇到了一个新问题。我想更改订单状态不是在访问感谢页面之后,而是在状态更改为“处理中”的那一刻。有时会发生客户在接受付款后不回到我的商店的情况。你有什么线索吗?【参考方案2】:

函数woocommerce_thankyou 是一个动作。您需要使用add_action 函数来连接它。我建议将优先级更改为20,以便可以在update_order_status 之前应用其他插件/代码更改。

add_action( 'woocommerce_thankyou', 'update_order_status', 20);

【讨论】:

以上是关于为啥已经付款但是订单状态还是待付款?的主要内容,如果未能解决你的问题,请参考以下文章

微店客户支付成功了,银行卡也扣钱了,但是订单显示未付款,店家这边也显示未付款,这是啥情况?

根据 Woocommerce 订单状态禁用特定付款方式

为啥有这么多来自 Google Play 控制台的订阅待付款?

如何更改 Magento 订单状态默认流程?

NetSuite:为啥我们通过网上商店创建的销售订单带有付款事件 = 待处理

我已经付款了,是网银付款,怎么没有改变订单状态?客服电话也没有人接啊!