php – 电子邮件不使用sandox ipn发送给paypal买家

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 电子邮件不使用sandox ipn发送给paypal买家脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
嗨,我正在使用paypal插件,添加响应器,添加产品.

我正在沙盒上进行测试.

做出响应,而不是添加产品相关的响应者.在前端,当我点击“购买”按钮,它转到sandBox.paypal,在这里我完成付款程序,在我的虚拟商家帐户我接受付款,并知道邮件发送给买家完成但电子邮件没有发送我读了10次代码,但我没有得到问题.

这是我的代码

Paypal表格:

<form name="_xclick" action="https://www.sandBox.paypal.COM/cgi-bin/webscr" method="post" target="_blank">
    <input tyPE="hidden" name="cmd" value="_xclick">
    <input type="hidden" name="business" value="'.$paypalID.'">
    <input type="hidden" name="return" value="'.$return_url.'">
    <input type="hidden" name="currency_code" value="'.$currency.'">
    <input type="hidden" name="ITem_name" value="'.$PRoduct_name.'">
    <input type="hidden" name="amount" id="p'.$product_id.'" value="'.$product_price.'">
    <input type="hidden" name="custom" value="'.$responderID.'">
    <input name="notify_url" value="'.plugin_dir_url( __FILE__ ).'ipn_sandBox.PHP" type="hidden">
    <input type="image" src="'.$upload_image.'" border="0" name="submit" alt="Make payments with PayPal - its fast,free and secure!">
</form>

这是我的ipn_sandBox.PHP代码

<?PHP
    // STEP 1: Read POST data
    // reading posted data From directly from $_POST causes serialization 
    // issues with array data in POST
    // reading raw POST data from input stream instead. 

    $raw_post_data = file_get_contents('PHP://input');
    $raw_post_array = explode('&amp;',$raw_post_data);

    $myPost = array();
    foreach ($raw_post_array as $keyval) {
        $keyval = explode ('=',$keyval);

        if (count($keyval) == 2)
            $myPost[$keyval[0]] = urldecode($keyval[1]);
    }

    // read the post from PayPal system and add 'cmd'
    $req = 'cmd=_notify-validate';
    if(function_exists('get_magic_quotes_gpc')) {
        $get_magic_quotes_exists = true;
    } 

    foreach ($myPost as $key => $value) {        
        if($get_magic_quotes_exists == true && get_magic_quotes_gpc() == 1) { 
            $value = urlencode(stripslashes($value)); 
        } else {
            $value = urlencode($value);
        }
        $req .= "&$key=$value";
    }

    // STEP 2: Post IPN data back to paypal to validate
    $ch = curl_init('https://www.sandBox.paypal.com/cgi-bin/webscr');
    curl_setopt($ch,CURLOPT_HTTP_VERSION,CURL_HTTP_VERSION_1_1);
    curl_setopt($ch,CURLOPT_POST,1);
    curl_setopt($ch,CURLOPT_RETURNtransfer,CURLOPT_POSTFIELDS,$req);
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,CURLOPT_SSL_VERIFYHOST,2);
    curl_setopt($ch,CURLOPT_FORBID_REUSE,CURLOPT_HTTPHEADER,array('Connection: Close'));

    if( !($res = curl_exec($ch)) ) {
        curl_close($ch);
        exit; 
    }
    curl_close($ch);

    $path = $_SERVER['DOCUMENT_ROOT'];

    include_once $path . '/wp-config.php';
    include_once $path . '/wp-load.PHP';
    include_once $path . '/wp-includes/wp-db.PHP';
    include_once $path . '/wp-includes/pluggable.PHP';

    global $wpdb;
    if (strcmp ($res,"VERIFIED") == 0) {
        $item_name              =   $_POST['item_name'];
        $item_number            =   $_POST['item_number'];
        $payment_status         =   $_POST['payment_status'];
        $payment_amount         =   $_POST['mc_gross'];
        $payment_currency       =   $_POST['mc_currency'];
        $txn_id                 =   $_POST['txn_id'];
        $receiver_email         =   $_POST['receiver_email'];
        $payer_email            =   $_POST['payer_email'];
        $responderID            =   $_POST['custom'];
        $name                   =   $_POST['First_name'];
        $payment_status         =   $_POST['payment_status'];
        $site_url               =   get_bloginfo('wpurl');
        $table_resp             =   $wpdb->prefix.'paypal_responders';
        $responder_to_use       =   $wpdb->get_row("SELECT * FROM $table_resp WHERE id ='$responderID'");
        $subject                =   $responder_to_use->subject;
        $from                   =   $responder_to_use->from_email;
        $attachment             =   $responder_to_use->attachment;
        $att_secure             =   $responder_to_use->att_secure;
        $message        .=  $responder_to_use->;message_body;
        $message                .=  '<br /><br />
                                    <a title="Click here to download Attachment" href="'.plugin_dir_url(__FILE__).'responders/download.PHP?filename='.$att_secure.'" width="150" height="150" target="_blank">Click here to download Attachment</a>';

        if($message){
            $message    =   str_replace('[item_name]',$item_name,$message);
            $message    =   str_replace('[txn_id]',$txn_id,$message);
            $message    =   str_replace(' [mc_gross]',$payment_amount,$message);
            $message    =   str_replace('[mc_currency]',$payment_currency,$message);
            $message    =   str_replace('[receiver_email]',$receiver_email,$message);
            $message    =   str_replace('[payer_email]',$payer_email,$message);
            $message    =   str_replace('[name]',$name,$message);
            $message    =   str_replace('[site_url]',$site_url,$message);
            $message    =   str_replace('[payment_status]',$payment_status,$message);
        }else{
            $message    =       'Dear '.$name.',Thank you for your purchase from '.$site_url.'. The details of your purchase are below.
                                Transaction ID: '.$txn_id.'
                                Item Name: '.$item_name.'
                                Payment Amount: '.$payment_amount.'
                                Payment Amount: '.$payment_status.'
                                Paid to: '.$receiver_email.'
                                Thanks and Enjoy!
                                ~Enigma Digital <br />
                                <br />
                                <a title="Click here to download Attachment" href="'.plugin_dir_url(__FILE__).'responders/download.PHP?filename='.$att_secure.'" width="150" height="150" target="_blank">Click here to download Attachment</a>';
        }

        $table          =   $wpdb->prefix . "paypal_transactions";
        $txn_id_check   =   $wpdb->get_results("SELECT * FROM $table WHERE txn_id ='$txn_id'");

        if(!$txn_id_check){
            $data   =   array(
                            'txn_id'            =>      $txn_id,'product_name'      =>      $item_name,'product_price'     =>      $payment_amount,'payer_email'       =>      $payer_email,);

            $wpdb->insert($table,$data) or die(MysqL_error());
            $num = md5(time());

            $headers .= 'From: ' .$from. "\r\n" .'Reply-to: ' .$from . "\r\n";
            $headers  .= 'MIME-Version: 1.0' . "\r\n";
            $headers  .= "Content-Type: text/htML; charset=iso-8859-1 ";
            $headers  .= "--".$num."--";

            //mail to buyer
            mail( $payer_email,$subject,$message,$headers );
        }
    }
?>

除了mail()之外我还使用wp_mail()但没有任何反应.

任何人都可以帮助解决问题所在.

解决方法@H_301_33@
代码存在一些问题,您可以采取一些措施来开始调试过程.你不太可能在这里得到一个简单解决方案,因为它是一个开放式的问题.

在执行任何操作之前,请确保将error_reporting设置为E ^ ALL并在PHP.ini中将display_errors设置为On. (Turorial,if you need it).检查你的error_LOG – 如果存在 – 以获得即时线索.

您需要在向其附加更多数据之前声明$message.您开始在第77行($message.= $responder_to_use-> message_body;)上向$message附加数据,但尚未设置,这将产生警告.

现在有三个原因导致电子邮件本身无法发送:

>您的服务器未设置为发送邮件.
> $txn_id_check未设置或为false.如果$txn_id不在您的数据库中,则会出现这种情况.我假设你在开始交易时添加了这一行 – 但是你检查了吗?
>您在其中一个包含的文件中出现语法错误.

我们的地址是#1.在服务器上创建一个文件,其中包含1行,向您发送简单的电子邮件

<?PHP mail('your@email','test email','Yay,I can send mail!'); ?>

在浏览器中访问该文件.检查您的收件箱,并检查您的垃圾邮件.没有邮件?这就是问题所在.

下一步#2:这可能是脚本在用户甚至到达PayPal之前将事务添加数据库的问题.我们没有这个代码,但是您可以轻松检查 – 只需检查数据库以查看是否存在任何行.

#3:语法错误应该很容易检查,只需直接在浏览器中访问ipN脚本即可.将显示致命错误.

还是行不通?其他地方可能存在问题.检查的最佳方法是进行一些基本的调试……

首先通过电子邮件将完整的$_POST数组发送给自己,就在脚本的顶部.

<?PHP
    mail('your@email','Full Post Data - '.time(),print_r($_REQUEST,true));

    // STEP 1: Read POST data
    // reading posted data from directly from $_POST causes serialization 
    // issues with array data in POST
    // reading raw POST data from input stream instead. 

    $raw_post_data = file_get_contents('PHP://input');
    $raw_post_array = explode('&',$raw_post_data);

    [...]

并在最后通过电子邮件发送脚本的输出.

<?PHP
    ob_start();

    $time = time(); // Referenced in your email subjects. It will get confusing with lots of these emails otherwise. Gmail and other clients who use a conversation view will properly catalogue these emails if the subjects match.

    mail('your@email','Full Post Data - '.$time,true));

    // STEP 1: Read POST data
    // reading posted data from directly from $_POST causes serialization 
    // issues with array data in POST
    // reading raw POST data from input stream instead. 

    [...] // Rest of your script here...

    $output_buffer = ob_get_contents();
    ob_end_clean();

    mail('your@email','Output buffer - '.$time,$output_buffer);
?>

脚本宝典总结

以上是脚本宝典为你收集整理的php – 电子邮件不使用sandox ipn发送给paypal买家全部内容,希望文章能够帮你解决php – 电子邮件不使用sandox ipn发送给paypal买家所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。