Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 结账时的电子商务安全_Php_Wordpress_Woocommerce - Fatal编程技术网

Php 结账时的电子商务安全

Php 结账时的电子商务安全,php,wordpress,woocommerce,Php,Wordpress,Woocommerce,我一直在尝试向结帐表单添加一种安全性,比如验证码或安全问题。我尝试过使用PHP、附加组件和插件,但找不到任何有效的方法。你们知道我怎么做吗?这样我就不会收到很多机器人的订单了。最好是代码。我试着用它 $number = 2 //other wordpress/woocommerce code 'human' => array( 'label' => __( 'Are you a human?', 'woocommerce' ),

我一直在尝试向结帐表单添加一种安全性,比如验证码或安全问题。我尝试过使用PHP、附加组件和插件,但找不到任何有效的方法。你们知道我怎么做吗?这样我就不会收到很多机器人的订单了。最好是代码。我试着用它

$number = 2
//other wordpress/woocommerce code
'human' => array(
            'label'       => __( 'Are you a human?', 'woocommerce' ),
            'placeholder' => __( 'What is 1 + 1?', 'woocommerce' ),
            'required'    => true,
            'validate'    => $number
        ),
在woocommerce/includes/class-wc-countries.php中
但它不起作用:它显示了表单,但我可以输入任何内容,它只会继续,即使我输入了例如324。

出于安全目的,您可以使用Google NoCaptcha Recaptcha

您可以按照以下说明生成自己的验证码:


展开我的教程,我们可以从添加和显示一些字段开始:

这将添加计算检查字段:

function so_31413975_filter_checkout_fields($fields){
    $fields['extra_fields'] = array(
            'human_check' => array(
                'type' => 'text',
                'label' => __( 'What is 1+1?', 'stack-overflow' ),
                'placeholder' => __( 'Enter a number', 'stack-overflow' )
                )
            );

    return $fields;
}
add_filter( 'woocommerce_checkout_fields', 'so_31413975_filter_checkout_fields' );
这会显示在收银台上

function so_31413975_extra_checkout_fields(){ 

    $checkout = WC()->checkout(); ?>

    <div class="extra-fields">
    <h3><?php _e( 'Are you human?', 'stack-overflow' ); ?></h3>

    <?php 
    // because of this foreach, everything added to the array in the previous function will display automagically
    foreach ( $checkout->checkout_fields['extra_fields'] as $key => $field ) : ?>

            <?php woocommerce_form_field( $key, $field, $checkout->get_value( $key ) ); ?>

        <?php endforeach; ?>
    </div>

<?php }
add_action( 'woocommerce_checkout_after_customer_details' ,'so_31413975_extra_checkout_fields' );

您可以编辑表单所在的页面:隐藏按钮,直到用户正确输入验证码,或正确回答数学问题:


下单

[woocommerce\u签出]

你是人类吗? 函数启用(){ var user=document.getElementById(“用户”).value; 如果(用户===答案){ var docu=document.getElementById(“下订单”).style; docu.display=“块”; var eneb=document.getElementById(“enable”).style; eneb.display=“无”; var met=document.getElementById(“数学”).style; met.display=“无”; var user=document.getElementById(“用户”).style; user.display=“无”; }否则{ makeMath(); } } 函数makeMath(){ var random1=Math.floor(Math.random()*5); var random2=Math.floor(Math.random()*5); 答案=随机1+随机2; var mat=document.getElementById(“数学”); mat.innerHTML=“” mat.innerHTML+=“是什么”; 开关(1){ 案例0: mat.innerHTML+=“零”; 打破 案例1: mat.innerHTML+=“一”; 打破 案例2: mat.innerHTML+=“两个”; 打破 案例3: mat.innerHTML+=“三个” 打破 案例4: mat.innerHTML+=“四”; 打破 案例5: mat.innerHTML+=“五”; 打破 案例6: mat.innerHTML+=“六”; 打破 违约: mat.innerHTML+=1; 打破 } /* //mat.innerHTML+=“加”; */ mat.innerHTML+=“加”; 开关(2){ 案例0: mat.innerHTML+=“零”; 打破 案例1: mat.innerHTML+=“一”; 打破 案例2: mat.innerHTML+=“两个”; 打破 案例3: mat.innerHTML+=“三个” 打破 案例4: mat.innerHTML+=“四”; 打破 案例5: mat.innerHTML+=“五”; 打破 案例6: mat.innerHTML+=“六”; 打破 违约: mat.innerHTML+=1; 打破 } /* 笔记 */ mat.innerHTML+=“?”; /* 笔记 */ 开关(应答){ 案例1: 回答:“一”; 打破 案例2: 回答:“两个”; 打破 案例3: 回答:“三”; 打破 案例4: 回答:“四”; 打破 案例5: 回答:“五”; 打破 案例6: 回答:“六”; 打破 案例7: 回答:“七”; 打破 案例8: 回答:“八”; 打破 案例9: 回答:“九”; 打破 案例10: 回答:“十”; 打破 案例11: 回答=“十一” 打破 案例12: 回答=“十二” 打破 违约: 答案=答案; 打破 } } makeMath(); 去

有人也可以在控制台中得到答案,但只有人类知道,对吗?;)

最好不要验证码,因为它们很难。这是一个简单的问题,比如“一加二是什么”听到机器人在买东西,我非常惊讶。他们是如何通过付款处理的?@helgatheviking付款方式是直接银行转账,所以机器人可以发送垃圾邮件,我收到很多假订单,这让我很恼火。它被搁置,所以我就把它贴在这里:好吧,你可以很容易地关掉客人点菜,然后从你的登记表中取出垃圾:)那是用来登录/登记的。我需要它用于订单页面登录和注册与您的订单页面在现实中没有什么不同,它们都只是在某个地方提交的表单,因此使用Recaptcha不应该是一个问题。您可能应该.R.,您可以将其粘贴到functions.php主题文件中(就像人们提供给您用于WordPress的几乎所有php代码一样)这是一个非常简单的答案,不使用插件。我认为这应该被认为是正确的答案。谢谢你,海尔加!很高兴你喜欢它,希望它能帮助你!另外,我非常喜欢让新用户粘贴到代码片段中。
function so_31413975_add_honeypot(){ ?>
    <p style="display:none" id="sweetness"><label for="sweetness" class=""><?php _e('Leave this field blank', 'stack-overflow' );?> </label><input type="text" class="input-text " name="sweetness" id="sweetness" placeholder="<?php _e( 'Do not write here', 'stack-overflow' );?>" value=""></p>
<?php
}
add_action( 'woocommerce_checkout_before_order_review', 'so_31413975_add_honeypot' );
function so_31413975_validate_checkout(){
    if ( !isset( $_POST['sweetness'] ) || ( isset( $_POST['sweetness'] ) && trim( $_POST['sweetness'] ) !== '' ) ){
        wc_add_notice( __( 'You seem like a bot.', 'stack-overflow' ), 'error' );
    }

    if ( ! isset( $_POST['human_check'] ) || ( isset( $_POST['human_check'] )&& intval( $_POST['human_check'] ) !== 2 ) ){
        wc_add_notice( __( 'Please enter the correct number', 'stack-overflow' ), 'error' );
    }
}
add_action( 'woocommerce_checkout_process', 'so_31413975_validate_checkout' );
    <div id="place_order" style="display:none">
    <button onclick="alert('yay')">Place Order</button>
</div>
<p style="text-align: left;">[woocommerce_checkout]</p>

<h2>are you human?</h2>

<script>
    function enable() {
        var user = document.getElementById("user").value;
        if (user === answer) {
            var docu = document.getElementById("place_order").style;
            docu.display = "block";
            var eneb = document.getElementById("enable").style;
            eneb.display = "none";
            var met = document.getElementById("math").style;
            met.display = "none";
            var user = document.getElementById("user").style;
            user.display = "none";
        } else {
            makeMath();
        }
    }
</script>
<div id="math"></div>
<script>
    function makeMath() {
        var random1 = Math.floor(Math.random() * 5);
        var random2 = Math.floor(Math.random() * 5);
        answer = random1 + random2;
        var mat = document.getElementById("math");
        mat.innerHTML = ""
        mat.innerHTML += "what is ";
        switch (random1) {
            case 0:
                mat.innerHTML += "zero";
                break;
            case 1:
                mat.innerHTML += "one";
                break;
            case 2:
                mat.innerHTML += "two";
                break;
            case 3:
                mat.innerHTML += "three"
                break;
            case 4:
                mat.innerHTML += "four";
                break;
            case 5:
                mat.innerHTML += "five";
                break;
            case 6:
                mat.innerHTML += "six";
                break;
            default:
                mat.innerHTML += random1;
                break;
        }
        /* 
//mat.innerHTML += " plus ";
*/
        mat.innerHTML += " plus ";
        switch (random2) {
            case 0:
                mat.innerHTML += "zero";
                break;
            case 1:
                mat.innerHTML += "one";
                break;
            case 2:
                mat.innerHTML += "two";
                break;
            case 3:
                mat.innerHTML += "three"
                break;
            case 4:
                mat.innerHTML += "four";
                break;
            case 5:
                mat.innerHTML += "five";
                break;
            case 6:
                mat.innerHTML += "six";
                break;
            default:
                mat.innerHTML += random1;
                break;
        }
        /*
note
*/
        mat.innerHTML += "?";
        /*
note
*/
        switch (answer) {
            case 1:
                answer = "one";
                break;
            case 2:
                answer = "two";
                break;
            case 3:
                answer = "three";
                break;
            case 4:
                answer = "four";
                break;
            case 5:
                answer = "five";
                break;
            case 6:
                answer = "six";
                break;
            case 7:
                answer = "seven";
                break;
            case 8:
                answer = "eight";
                break;
            case 9:
                answer = "nine";
                break;
            case 10:
                answer = "ten";
                break;
            case 11:
                answer = "eleven"
                break;
            case 12:
                answer = "twelve"
                break;
            default:
                answer = answer;
                break;
        }
    }
    makeMath();
</script>
<input id="user"></input>
<div onclick="enable()" id="enable">
    <button style="color: white; background-color: #d64181;">Go</button>
</div>