限制woocommerce订单结账时间,减少恶意刷单

前几天做一个wordpress网站维护时遇到一个疑似“恶意刷单”的问题,客户后台出现了很多未付款的订单,而且订单来源都是未知。

这种情况一般只需要关闭游客购买就可以避免,但客户考虑关闭会影响客户下单,所以不能关闭,那就只能做一些限制,有很多防火墙插件可以拦截,但是这种插件又会大大降低购物体验,最好别用。

根据客户的网站情况,处理方法如下(仅供参考):

1.限制下单最小时间

限制woocommerce订单结账时间,减少恶意刷单-悦然跨境出海

我在AI协助下写了一个简易插件,安装后可以对同一IP的访问次数和下单最小操作时间进行调整。上面的参数需要根据自身网站的实际情况调整,边调边测试。

2.修改被刷产品的URL

很多时候被刷的产品可能是同一个,修改URL可能就没事了。

3.禁用Rest API

有部分刷新可能是通过Rest API进行的,如果能禁用Rest API就可以避免这类刷单。但完全禁用Rest API又可能影响正常用户注册。所以可以通过下面的代码禁用一部分,保留WooCommerce相关的。

add_filter( 'rest_endpoints', function( $endpoints ) {
    // 允许已登录用户访问所有API
    if ( is_user_logged_in() ) {
        return $endpoints;
    }

    // 定义需要保留的WooCommerce端点(关键:用户注册和登录)
    $allowed_endpoints = [
        '/wc/store/v1/cart',                // 购物车功能
        '/wc/store/v1/products',            // 产品展示
        '/wc/store/v1/checkout',            // 结账流程
        '/wc/v3/customers',                 // 用户注册(POST请求)
        '/wc/v3/customers/(?P<id>[\d]+)',   // 用户资料(部分公开)
    ];

    // 遍历所有端点,仅保留允许的列表
    foreach ( $endpoints as $route => $details ) {
        $is_allowed = false;
        foreach ( $allowed_endpoints as $allowed_route ) {
            if ( preg_match( "@^{$allowed_route}@i", $route ) ) {
                $is_allowed = true;
                break;
            }
        }
        if ( ! $is_allowed ) {
            unset( $endpoints[ $route ] );
        }
    }

    return $endpoints;
});

总结

通过以上操作,目前观察还是有点效果,但其实也只能防一部分,如果实在不行就只能上专业的验证或防火墙了。


如果需要上面用到的插件,可以在【wodpress建站开发】公众号回复【checkout】获取。插件仅在我自己的项目中测试过,其他网站使用时请先备份,再尝试,最好在测试环境使用,出问题的话别怪我,哈哈😃。

购物车
优惠劵
搜索