Php wp_mail正在发送具有相同数据的邮件

Php wp_mail正在发送具有相同数据的邮件,php,wordpress,plugins,mailer,Php,Wordpress,Plugins,Mailer,我对wp_mail()函数有问题。它正确地向我发送消息,但在调用它之后,它向我发送了多条具有相同数据的消息,我应该如何正确地调用它或终止进程以只发送一次 以下是我如何称呼wp_mail() //确认预订-对wp_mail()不重要 $CLASS->ConfirmReservation($data); //它获取有关当前预订的所有更新数据 $info=$CLASS->GetReservationInfo($\u POST['operation\u number'])[0]; //它使用参数为我准备

我对wp_mail()函数有问题。它正确地向我发送消息,但在调用它之后,它向我发送了多条具有相同数据的消息,我应该如何正确地调用它或终止进程以只发送一次

以下是我如何称呼wp_mail()

//确认预订-对wp_mail()不重要
$CLASS->ConfirmReservation($data);
//它获取有关当前预订的所有更新数据
$info=$CLASS->GetReservationInfo($\u POST['operation\u number'])[0];
//它使用参数为我准备数组:to、subject、msg
$msgHTML=$CLASS->PrepareOrderHTMLmsg($info);
//向数组添加头
$msgHTML['headers']=array('Content-Type:text/html;charset=UTF-8','From:'。get_bloginfo('name'));
//发送电子邮件
wp_邮件($msgHTML['send_'to']、$msgHTML['subject']、$msgHTML['msg']、$msgHTML['headers']);

从发送邮件的表单开始,当用户单击“发送”时,用javascript捕获事件“
onclick
”或“submit”,并立即将按钮“发送”的状态更改为“
disabled
”(这样可以防止他们多次按下),然后在调用函数后,在服务器端“
wp_-mail()
”调用函数“
wp_-die()
”来停止php脚本。

从其他页面,我只是通过简单的POST-to-payments API发送表单收集的数据,作为响应,我还获得了一些定义url的POST数据,该url从下面调用函数

function DC_Shortcode(){
        ob_start();
        isset($_POST) ? DotpayCallback() : '';
        return ob_get_clean();
    }
    add_shortcode('DCallback', 'DC_Shortcode');

// DOTPAY
    function DotpayCallback() {
        $CLASS= new CLASS();
        $dotpaySettings = $BOANERGES->getDotpaySettings();


        $PIN = $dotpaySettings[0]['pin_setting'];
        $verify = 1;        //verify data and save, requires valid PIN (above)

        if($verify)
        {
            if($_SERVER['REQUEST_METHOD'] != 'POST') //URLC always uses POST
                die($_SERVER['REQUEST_METHOD']." is incorrect request method");

            if($_SERVER['REMOTE_ADDR'] != '195.150.9.37') //Dotpay IP for URLC is always 195.150.9.37
                die("Unexpected IP: ".$_SERVER['REMOTE_ADDR']);

            if(strlen($_POST['signature']) != '64') //signature always has 64 characters
                die("Invalid POST content");

            $sign=
                $PIN.
                $_POST['id'].
                $_POST['operation_number'].
                $_POST['operation_type'].
                $_POST['operation_status'].
                $_POST['operation_amount'].
                $_POST['operation_currency'].
                $_POST['operation_withdrawal_amount'].
                $_POST['operation_commission_amount'].
                $_POST['operation_original_amount'].
                $_POST['operation_original_currency'].
                $_POST['operation_datetime'].
                $_POST['operation_related_number'].
                $_POST['control'].
                $_POST['description'].
                $_POST['email'].
                $_POST['p_info'].
                $_POST['p_email'].
                $_POST['credit_card_issuer_identification_number'].
                $_POST['credit_card_masked_number'].
                $_POST['credit_card_brand_codename'].
                $_POST['credit_card_brand_code'].
                $_POST['credit_card_id'].
                $_POST['channel'].
                $_POST['channel_country'].
                $_POST['geoip_country'];
            $signature = hash('sha256', $sign);

            if($signature != $_POST['signature']) //compare POST signature with calculated one
                die("Signature mismatch! Expected: ".$signature." Received: ".$_POST['signature']);
        }

        if($_POST['operation_status'] == 'completed') {
            $data = array(
                'id' => $_POST['operation_number'],
                'control' => $_POST['control'],
                'cs' => 1
            );
            // confirms reservation
            $CLASS->ConfirmReservation($data);

            // it gets all updated data about current reservation
            $info = $CLASS->GetReservationInfo($_POST['operation_number'])[0];

            // it prepares me array with parameters to, subject, msg
            $msgHTML = $CLASS->PrepareOrderHTMLmsg($info);

            // adding headers to array
            $headers = array('Content-Type: text/html; charset=UTF-8','From: '.get_bloginfo('name').' <'.get_bloginfo('admin_email').'>');

            // send e-mail
            wp_mail($msgHTML['send_to'], $msgHTML['subject'], $msgHTML['msg'] , $headers);
            wp_die();
            die();
        }

        if($_POST['operation_status'] == 'rejected' || $_POST['operation_status'] == 'fail'){
            $data = array(
                'id' => $_POST['operation_number'],
                'control' => $_POST['control'],
                'cs' => 2
            );
            $CLASS->ConfirmReservation($data);
        }
    }
函数DC\u短码(){
ob_start();
isset($\u POST)?DotpayCallback():“”;
返回ob_get_clean();
}
添加_短代码(“DCallback”、“DC_短代码”);
//多付
函数DotpayCallback(){
$CLASS=新类();
$dotpaySettings=$BOANERGES->getDotpaySettings();
$PIN=$dotpaySettings[0]['PIN_setting'];
$verify=1;//验证数据并保存,需要有效的PIN(如上)
如果($verify)
{
if($\u服务器['REQUEST\u方法]!='POST')//URLC始终使用POST
骰子($_服务器['REQUEST_METHOD']”是不正确的请求方法);
如果($\u SERVER['REMOTE\u ADDR']!='195.150.9.37')//URLC的Dotpay IP始终为195.150.9.37
die(“意外IP:.$”服务器['REMOTE\u ADDR']);
if(strlen($\u POST['signature'])!='64')//签名始终包含64个字符
死亡(“无效帖子内容”);
美元符号=
$PIN。
$\u POST['id']。
$\u POST['操作编号']。
$\u POST['operation\u type']。
$\u POST[“操作状态”]。
$\u POST[“操作金额”]。
$\u POST['operation\u currency']。
$\u POST[“操作\提取\金额”]。
$\邮政['业务\佣金\金额']。
$\u POST[“操作\原始\金额”]。
$\u POST['操作\原始\货币']。
$\u POST['operation\u datetime']。
$\u POST[“与操作相关的\u编号”]。
$\u POST['control']。
$\u POST['description']。
$\u POST['email']。
$\u POST['p\u info']。
$\u POST['p_email']。
$\邮政['信用卡\发卡机构\标识\号码']。
$\u POST['信用卡\蒙面\号码']。
$\u POST['credit\u card\u brand\u codename']。
$\u POST['信用卡\品牌\代码']。
$\u POST['credit\u card\u id']。
$\u POST['channel']。
$\邮政['channel\u country']。
美元邮政['geoip_country'];
$signature=hash('sha256',$signal);
if($signature!=$\u POST['signature'])//比较POST签名和计算签名
die(“签名不匹配!预期:.$Signature.”收到:.$\u POST['Signature']);
}
如果($\u POST['operation\u status']=='completed'){
$data=数组(
'id'=>$\u POST['operation\u number'],
'control'=>$\u POST['control'],
‘cs’=>1
);
//确认预订
$CLASS->ConfirmReservation($data);
//它获取有关当前预订的所有更新数据
$info=$CLASS->GetReservationInfo($\u POST['operation\u number'])[0];
//它为我准备了一个数组,其中包含参数to、subject、msg
$msgHTML=$CLASS->PrepareOrderHTMLmsg($info);
//向数组添加头
$headers=array('Content-Type:text/html;charset=UTF-8','From:'。get_bloginfo('name'));
//发送电子邮件
wp_邮件($msgHTML['send_'to']、$msgHTML['subject']、$msgHTML['msg']、$headers);
wp_die();
模具();
}
如果($_POST['operation_status']=='rejected'|$|$_POST['operation_status']=='fail'){
$data=数组(
'id'=>$\u POST['operation\u number'],
'control'=>$\u POST['control'],
‘cs’=>2
);
$CLASS->ConfirmReservation($data);
}
}

没有直接发送电子邮件的表单,我正在尝试将其与dotpay(支付系统)集成,在回调验证后,dotpay(支付系统)会自动发送一封包含一些数据的电子邮件。同样,如果所有内容都是通过ajax调用执行的,则必须执行“wp_die()“在发送邮件后,它不是由ajax调用执行的,而且你建议的方法对我不起作用。我已将wp_die()放置在;还有简单的php die();只是为了确保在wp_mail()之后立即发送;几分钟后,我仍然收到了第二条消息,数据与几分钟前相同。奇怪的是,你在调用哪个文件和函数?在同一邮件中重复的消息数是多少?我定义了短代码,它在特定页面调用我的函数。它调用放置在主插件文件中的函数DotpayCallback()。一个小时内我收到了大约
function DC_Shortcode(){
        ob_start();
        isset($_POST) ? DotpayCallback() : '';
        return ob_get_clean();
    }
    add_shortcode('DCallback', 'DC_Shortcode');

// DOTPAY
    function DotpayCallback() {
        $CLASS= new CLASS();
        $dotpaySettings = $BOANERGES->getDotpaySettings();


        $PIN = $dotpaySettings[0]['pin_setting'];
        $verify = 1;        //verify data and save, requires valid PIN (above)

        if($verify)
        {
            if($_SERVER['REQUEST_METHOD'] != 'POST') //URLC always uses POST
                die($_SERVER['REQUEST_METHOD']." is incorrect request method");

            if($_SERVER['REMOTE_ADDR'] != '195.150.9.37') //Dotpay IP for URLC is always 195.150.9.37
                die("Unexpected IP: ".$_SERVER['REMOTE_ADDR']);

            if(strlen($_POST['signature']) != '64') //signature always has 64 characters
                die("Invalid POST content");

            $sign=
                $PIN.
                $_POST['id'].
                $_POST['operation_number'].
                $_POST['operation_type'].
                $_POST['operation_status'].
                $_POST['operation_amount'].
                $_POST['operation_currency'].
                $_POST['operation_withdrawal_amount'].
                $_POST['operation_commission_amount'].
                $_POST['operation_original_amount'].
                $_POST['operation_original_currency'].
                $_POST['operation_datetime'].
                $_POST['operation_related_number'].
                $_POST['control'].
                $_POST['description'].
                $_POST['email'].
                $_POST['p_info'].
                $_POST['p_email'].
                $_POST['credit_card_issuer_identification_number'].
                $_POST['credit_card_masked_number'].
                $_POST['credit_card_brand_codename'].
                $_POST['credit_card_brand_code'].
                $_POST['credit_card_id'].
                $_POST['channel'].
                $_POST['channel_country'].
                $_POST['geoip_country'];
            $signature = hash('sha256', $sign);

            if($signature != $_POST['signature']) //compare POST signature with calculated one
                die("Signature mismatch! Expected: ".$signature." Received: ".$_POST['signature']);
        }

        if($_POST['operation_status'] == 'completed') {
            $data = array(
                'id' => $_POST['operation_number'],
                'control' => $_POST['control'],
                'cs' => 1
            );
            // confirms reservation
            $CLASS->ConfirmReservation($data);

            // it gets all updated data about current reservation
            $info = $CLASS->GetReservationInfo($_POST['operation_number'])[0];

            // it prepares me array with parameters to, subject, msg
            $msgHTML = $CLASS->PrepareOrderHTMLmsg($info);

            // adding headers to array
            $headers = array('Content-Type: text/html; charset=UTF-8','From: '.get_bloginfo('name').' <'.get_bloginfo('admin_email').'>');

            // send e-mail
            wp_mail($msgHTML['send_to'], $msgHTML['subject'], $msgHTML['msg'] , $headers);
            wp_die();
            die();
        }

        if($_POST['operation_status'] == 'rejected' || $_POST['operation_status'] == 'fail'){
            $data = array(
                'id' => $_POST['operation_number'],
                'control' => $_POST['control'],
                'cs' => 2
            );
            $CLASS->ConfirmReservation($data);
        }
    }