【发布时间】:2014-07-31 10:37:37
【问题描述】:
我正在尝试从贝宝取回用户输入的详细信息。
Q 1) 如何从 paypal 获取电子邮件地址和其他详细信息?
Q 2)系统生成的邮件应该从成功案例还是从ipn案例发送?
Q 3) 成功交易后,我在贝宝屏幕上收到消息 - “我们将向 foo@email.com 发送确认电子邮件”。但我根本没有收到任何电子邮件。
注意:我正在沙盒上进行测试。
Q 4) 我没有将任何物品运送到买家的地址。那么是否可以从贝宝屏幕中删除运送地址?
<?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;
}
?>
【问题讨论】:
-
Q1:请向我们提供有关您如何与 PayPal 集成的更多信息。您使用什么支付产品(快速结账、RESTful 支付、自适应支付等)?没有这个就无法完全回答。
标签: php paypal paypal-ipn paypal-sandbox