将phpmailer_v5.1 use_gmail与paypal ipn responder结合使用
我有两个脚本,并希望将它们组合在一行中.
我用这个评论标记了这一行:’这里我需要堆栈溢出帮助’. 第一个脚本: <?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.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')); // In wamp like environments that do not come bundled with root authority certificates,// please download 'cacert.pem' from "http://curl.haxx.se/docs/caextract.html" and set the directory path // of the certificate as shown below. // curl_setopt($ch,CURLOPT_CAINFO,dirname(__FILE__) . '/cacert.pem'); if( !($res = curl_exec($ch)) ) { // error_log("Got " . curl_error($ch) . " when processing IPN data"); curl_close($ch); exit; } curl_close($ch); // STEP 3: Inspect IPN validation result and act accordingly if (strcmp ($res,"VERIFIED") == 0) { // check whether the payment_status is Completed // check that txn_id has not been previously processed // check that receiver_email is your Primary PayPal email // check that payment_amount/payment_currency are correct // process payment // assign posted variables to local variables $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']; } else if (strcmp ($res,"INVALID") == 0) { // log for manual investigation } ?> 第二个脚本: 这是phpmailer_v5.1 use_gmail.php: <?php // example on using PHPMailer with GMAIL include("class.phpmailer.php"); include("class.smtp.php"); // note,this is optional - gets called from main class if not already loaded $mail = new PHPMailer(); $body = 'this is the body of the email'; $mail->IsSMTP(); $mail->SMTPAuth = true; // enable SMTP authentication $mail->SMTPSecure = "ssl"; // sets the prefix to the servier $mail->Host = "smtp.gmail.com"; // sets GMAIL as the SMTP server $mail->Port = 465; // set the SMTP port $mail->Username = "yourname@gmail.com"; // GMAIL username $mail->Password = "password"; // GMAIL password $mail->From = "replyto@yourdomain.com"; $mail->FromName = "Webmaster"; $mail->Subject = "This is the subject"; $mail->AltBody = "This is the body when user views in plain text format"; //Text Body $mail->WordWrap = 50; // set word wrap $mail->MsgHTML($body); $mail->AddReplyTo("replyto@yourdomain.com","Webmaster"); $mail->AddAttachment("/path/to/file.zip"); // attachment $mail->AddAttachment("/path/to/image.jpg","new.jpg"); // attachment $mail->AddAddress("username@domain.com","First Last"); //here I need stackoverflow-help $mail->IsHTML(true); // send as HTML if(!$mail->Send()) { echo "Mailer Error: " . $mail->ErrorInfo; } else { echo "Message has been sent"; } ?> 我在同一个文件夹中有class.smtp和class.phpmailer.use_gmail.php经过测试,正在运行并发送电子邮件.但是,当我在此行中写入目标电子邮件地址时: $mail->AddAddress("username@domain.com","First Last"); 我想将电子邮件发送给刚付款的客户.如何从Paypal获取目的地电子邮件地址? 解决方法
在我们的电子商务配置中,我们使用了一种技巧来使真实的用户电子邮件(例如,他用来注册到我们的客户数据库中的电子邮件)由IPN响应者发送.
当用户使用Paypal付款时,表单将被发送到Paypal系统,其中包含有关付款金额,网址桥等的信息.这是一个例子: <form name="autoPayFormSubmit" id="autoPayFormSubmit" method="post" action="https://securepayments.paypal.com/cgi-bin/acquiringweb"> <input type="hidden" name="cmd" value="_hosted-payment" /> <input type="hidden" name="subtotal" value="#SUBTOTAL#" /> <input type="hidden" name="shipping" value="#SHIPCOST#" /> <input type="hidden" name="business" value="#NUMBEROFBUSINESS#" /> <input type="hidden" name="paymentaction" value="sale" /> <input type="hidden" name="custom" value=" ## USE ME TO TRICK THE SYSTEM ##" /> <input type="hidden" name="currency_code" value="EUR" /> <input type="hidden" name="shopping_url" value="http://yourwebsite.domain/##" /> <input type="hidden" name="cbt" value="Go back to the shopping" /> <input type="hidden" name="notify_url" value="http://yourwebsite.domain/##" /> <input type="hidden" name="cancel_return" value="http://yourwebsite.domain/##" /> <input type="hidden" name="return" value="http://yourwebsite.domain/##" /> <input type="submit" value="PAYPAL SAFE PAYMENT" onmouSEOver="this.style.backgroundColor='#CEE4F2';" onmouSEOut="this.style.backgroundColor='#EAF2F6';" style="font-weight: bold; font-size: 14px; padding: 10px 5px; border-radius: 10px; background: #EAF2F6 none no-repeat scroll 0 0; box-shadow: 3px 3px 5px #888; cursor:pointer;"> </form> “技巧”是通过“自定义”输入发送注册到系统中的用户的电子邮件以及其他有用数据. 一旦你收到IPN回复,你也会得到 $custom_encrypted_serialized_variables = $_POST['custom']; 因此,您可以在步骤3中使用以下内容替换您的IPN侦听器代码: ... ... // STEP 3: Inspect IPN validation result and act accordingly if (strcmp ($res,"VERIFIED") == 0) { // check whether the payment_status is Completed // check that txn_id has not been previously processed // check that receiver_email is your Primary PayPal email // check that payment_amount/payment_currency are correct // process payment // assign posted variables to local variables $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']; $custom_encrypted_serialized_variables = $_POST['custom']; ... ... } 然后使用常见的unserialize()和decrypt函数进行变量解密和反序列化. 您可以使用paypal结账表单中的“自定义”变量发送其他有用数据,发送客户的电子邮件,您就完成了! P.S:我知道这个解决方案不是最优的,也许有其他解决方案,但我发现这个解决方案快速有效.提示和更正表示赞赏! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |