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('&',$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. "rn" .'Reply-To: ' .$from . "rn"; $headers .= 'MIME-Version: 1.0' . "rn"; $headers .= "Content-Type: text/html; charset=iso-8859-1 "; $headers .= "--".$num."--"; //mail to buyer mail( $payer_email,$subject,$message,$headers ); } } ?> 除了mail()之外我还使用wp_mail()但没有任何反应. 任何人都可以帮助解决问题所在. 解决方法
代码存在一些问题,您可以采取一些措施来开始调试过程.你不太可能在这里得到一个简单的解决方案,因为它是一个开放式的问题.
在执行任何操作之前,请确保将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附加数据,但尚未设置,这将产生警告. 现在有三个原因导致电子邮件本身无法发送: >您的服务器未设置为发送邮件. 我们的地址是#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); ?> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |