我试图让用户从paypal返回详细信息。
问1)如何从paypal获取电子邮件地址和其他详细信息?
问2)系统生成的邮件应该是从成功案例还是从ipn案例发送的?
问3)成功交易后,我在paypal屏幕上收到消息 - '我们会向foo@email.com发送确认电子邮件'。但我根本没有收到任何电子邮件。
注意:我正在测试沙盒。
问4)我没有将任何商品运送到买家的地址。那么是否可以从paypal屏幕删除送货地址?
<?php
switch($action){
case "process": // case process insert the form data in DB and process to the paypal
echo "in process";
mysql_query("INSERT INTO `purchases` (`invoice`, `product_id`, `product_name`, `product_quantity`, `product_amount`, `payer_fname`, `payer_lname`, `payer_address`, `payer_city`, `payer_state`, `payer_zip`, `payer_country`, `payer_email`, `payment_status`, `posted_date`) VALUES ('".$_POST["invoice"]."', '".$_POST["product_id"]."', '".$_POST["product_name"]."', '".$_POST["product_quantity"]."', '".$_POST["product_amount"]."', '".$_POST["fname"]."', '".$_POST["lname"]."', '".$_POST["address"]."', '".$_POST["city"]."', '".$_POST["state"]."', '".$_POST["zip"]."', '".$_POST["ccCountry"]."', '".$_POST["email"]."', 'pending', NOW())");
$this_script = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
$p->add_field('business', PAYPAL_EMAIL_ADD); // Call the facilitator eaccount
$p->add_field('cmd', $_POST["cmd"]); // cmd should be _cart for cart checkout
$p->add_field('upload', '1');
$p->add_field('return', $this_script.'?action=success'); // return URL after the transaction got over
$p->add_field('cancel_return', $this_script.'?action=cancel'); // cancel URL if the trasaction was cancelled during half of the transaction
$p->add_field('notify_url', $this_script.'?action=ipn'); // Notify URL which received IPN (Instant Payment Notification)
$p->add_field('currency_code', $_POST["currency_code"]);
$p->add_field('invoice', $_POST["invoice"]);
$j=1;
for ($i = 0; $i < $N; $i++) {
$p->add_field('item_name_'.$j, $_POST["product_name"]);
$p->add_field('item_number_'.$j, $test[$i]);
$p->add_field('quantity_'.$j, $_POST["product_quantity"]);
$p->add_field('amount_'.$j, $_POST["product_amount"]);
$j++;
}
$p->add_field('first_name', $_POST["fname"]);
$p->add_field('last_name', $_POST["lname"]);
$p->add_field('address1', $_POST["address"]);
$p->add_field('city', $_POST["city"]);
$p->add_field('state', $_POST["state"]);
$p->add_field('country', $_POST["country"]);
$p->add_field('zip', $_POST["zip"]);
$p->add_field('email', $_POST["email"]);
$p->submit_paypal_post(); // POST it to paypal
$p->dump_fields(); // Show the posted values for a reference, comment this line before app goes live
break;
case "success": // success case to show the user payment got success
echo '<title>Payment Done Successfully</title>';
echo '<style>.as_wrapper{
font-family:Arial;
color:#333;
font-size:14px;
padding:20px;
border:2px dashed #17A3F7;
width:600px;
margin:0 auto;
}</style>
'; echo '<div class="as_wrapper">';
echo "<h1>Payment Transaction Done Successfully</h1>";
echo '<h4>Use this below URL in paypal sandbox IPN Handler URL to complete the transaction</h4>';
echo '<h3>http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?action=ipn</h3>';
echo '</div>';
echo 'email'.$_POST['email'];
echo 'product name'.$_POST['item_name'];
if (!$mail->Send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message has been sent";
}
//==================================================================================================================
break;
case "cancel": // case cancel to show user the transaction was cancelled
echo "<h1>Transaction Cancelled";
break;
case "ipn": // IPN case to receive payment information. this case will not displayed in browser. This is server to server communication. PayPal will send the transactions each and every details to this case in secured POST menthod by server to server.
$trasaction_id = $_POST["txn_id"];
$payment_status = strtolower($_POST["payment_status"]);
$invoice = $_POST["invoice"];
$log_array = print_r($_POST, TRUE);
$log_query = "SELECT * FROM `paypal_log` WHERE `txn_id` = '$trasaction_id'";
$log_check = mysql_query($log_query);
if(mysql_num_rows($log_check) <= 0){
mysql_query("INSERT INTO `paypal_log` (`txn_id`, `log`, `posted_date`) VALUES ('$trasaction_id', '$log_array', NOW())");
}else{
mysql_query("UPDATE `paypal_log` SET `log` = '$log_array' WHERE `txn_id` = '$trasaction_id'");
} // Save and update the logs array
$paypal_log_fetch = mysql_fetch_array(mysql_query($log_query));
$paypal_log_id = $paypal_log_fetch["id"];
if ($p->validate_ipn()){ // validate the IPN, do the others stuffs here as per your app logic
mysql_query("UPDATE `purchases` SET `trasaction_id` = '$trasaction_id ', `log_id` = '$paypal_log_id', `payment_status` = '$payment_status' WHERE `invoice` = '$invoice'");
$subject = 'Instant Payment Notification - Recieved Payment';
$p->send_report($subject); // Send the notification about the transaction
echo 'email'.$_POST['payer_email'];
echo 'product name'.$_POST['item_name'];
//==================================================================================================================
if (!$mail->Send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message has been sent";
}
}else{
$subject = 'Instant Payment Notification - Payment Fail';
$p->send_report($subject); // failed notification
}
break;
}
?>
答案 0 :(得分:0)
如果没有关于PayPal集成的更多信息,则无法完全回答,但是:
Q1:PayPal向买家提供有关IPN和大多数相关API调用(DoExpressCheckout等)的回复信息。在某些情况下,它甚至在付款完成之前就有单独的专用电话来获取买家信息(例如GetExpressCheckout)。如果不知道您正在整合哪种支付产品/ API,就无法说出更多信息。
Q2:无论卖家是否使用IPN,都会在成功付款后发送电子邮件。 IPN和电子邮件是不同的功能,彼此无关。
问题3:沙盒帐户仅发送沙盒电子邮件(以防止人们将其误认为是真正的付款电子邮件)。查看如何在PayPal沙箱中查看沙箱电子邮件。
问题4:是的,许多PayPal产品都可以实现这一点,但具体情况因您所使用的产品而异。例如。您可以在POST参数中传递&amp; shipping = 0,或者您可能需要设置NoShipping = True ...读取您用于设置/将用户重定向到PayPal授权流程的特定PayPal操作的文档。