首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >设置PayPal返回地址并使其自动返回吗?

设置PayPal返回地址并使其自动返回吗?
EN

Stack Overflow用户
提问于 2011-10-04 11:11:17
回答 6查看 239.1K关注 0票数 129

这是一个后续问题:PHP: Easy way to start PayPal checkout?

所以,我的问题是我指定了返回的url。然而,在使用PayPal支付后,我最终看到一个屏幕,上面写着:

你刚刚完成了付款。XXXX,你刚刚完成你的付款。此付款的交易ID为: XXXXXXXXXXXXX。

我们会给XX@XXXX.com发一封确认邮件。此交易将在您的对账单上显示为PAYPAL。

转到PayPal帐户概述

我需要它不显示此屏幕,并直接转到返回的URL。我有:

  • 设置" return“变量
  • 将"rm”变量设置为:2(根据指南=“使用POST方法将买家的浏览器重定向到返回URL,并且所有支付变量都是included")

实际上,这是我的整个表单:

代码语言:javascript
复制
<form method="post" action="https://www.sandbox.paypal.com/cgi-bin/webscr">
  <input type="hidden" value="_xclick" name="cmd">
  <input type="hidden" value="onlinestore@thegreekmerchant.com" name="business">
  <!-- <input type="hidden" name="undefined_quantity" value="1" /> -->
  <input type="hidden" value="Order at The Greek Merchant:&lt;Br /&gt;Goldfish Flock BLG&lt;br /&gt;" name="item_name">
  <input type="hidden" value="NA" name="item_number">
  <input type="hidden" value="22.16" name="amount">
  <input type="hidden" value="5.17" name="shipping">
  <input type="hidden" value="0" name="discount_amount">        
  <input type="hidden" value="0" name="no_shipping">
  <input type="hidden" value="No comments" name="cn">
  <input type="hidden" value="USD" name="currency_code">
  <input type="hidden" value="http://XXX/XXX/XXX/paypal/return" name="return">
  <input type="hidden" value="2" name="rm">      
  <input type="hidden" value="11255XXX" name="invoice">
  <input type="hidden" value="US" name="lc">
  <input type="hidden" value="PP-BuyNowBF" name="bn">
  <input type="submit" value="Place Order!" name="finalizeOrder" id="finalizeOrder" class="submitButton">
</form>

你知道怎么才能让它自动返回吗?或者,我如何将支付结果返回到我的网站,以便我可以更新数据库?什么是IPN?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-10-10 12:05:45

您必须在您的PayPal账户中启用自动退货功能,否则它将忽略return字段。

来自文档(更新以反映2019年1月新布局):

默认情况下,

自动返回处于关闭状态。要启用自动返回,请执行以下操作:

  1. 登录您的PayPal帐户,网址为https://www.paypal.comhttps://www.sandbox.paypal.com。此时将显示我的帐户概述页面。
  2. 单击右上角的齿轮图标。此时将显示配置文件摘要页面。单击左侧的My left (我的销售首选项)链接,然后单击网站首选项所在行的
  3. (更新)链接。网站付款首选项页面appears
  4. Under自动退货对于网站付款,请单击打开单选按钮以启用自动退货。
  5. 在返回网址字段中,输入付款人完成付款后要重定向至的网址。注意: PayPal会检查您输入的返回URL。如果网址格式不正确或无法验证,PayPal将不会激活自动返回。
  6. 滚动到页面底部,然后单击保存按钮。

IPN用于即时支付通知。它将为您提供比自动返回更可靠/有用的信息。

IPN的文档在这里:https://www.x.com/sites/default/files/ipnguide.pdf

IPN的在线文档:https://developer.paypal.com/docs/classic/ipn/gs_IPN/

一般流程是,在请求中传入一个IPN参数,设置一个处理和验证notify_url通知的页面,PayPal会向该页面发送请求,在支付/退款等处理通过时通知您。然后,该IPN处理程序页面将是更新数据库以将订单标记为已支付的正确位置。

票数 200
EN

Stack Overflow用户

发布于 2011-10-14 04:04:09

示例表单使用PHP进行直接付款。

代码语言:javascript
复制
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
    <input type="hidden" name="cmd" value="_cart">
    <input type="hidden" name="upload" value="1">
    <input type="hidden" name="business" value="you@youremail.com">

    <input type="hidden" name="item_name_' . $x . '" value="' . $product_name . '">
    <input type="hidden" name="amount_' . $x . '" value="' . $price . '">
    <input type="hidden" name="quantity_' . $x . '" value="' . $each_item['quantity'] . '"> 
    <input type="hidden" name="custom" value="' . $product_id_array . '">
    <input type="hidden" name="notify_url" value="https://www.yoursite.com/my_ipn.php">
    <input type="hidden" name="return" value="https://www.yoursite.com/checkout_complete.php">
    <input type="hidden" name="rm" value="2">
    <input type="hidden" name="cbt" value="Return to The Store">
    <input type="hidden" name="cancel_return" value="https://www.yoursite.com/paypal_cancel.php">
    <input type="hidden" name="lc" value="US">
    <input type="hidden" name="currency_code" value="USD">
    <input type="image" src="http://www.paypal.com/en_US/i/btn/x-click-but01.gif" name="submit" alt="Make payments with PayPal - its fast, free and secure!">
</form>

请查看字段notify_url、return、cancel_return

示例代码用于处理ipn (my_ipn.php),这是由贝宝支付后要求支付。

有关创建IPN的更多信息,请参考this链接。

代码语言:javascript
复制
<?php
// Check to see there are posted variables coming into the script
if ($_SERVER['REQUEST_METHOD'] != "POST")
    die("No Post Variables");
// Initialize the $req variable and add CMD key value pair
$req = 'cmd=_notify-validate';
// Read the post from PayPal
foreach ($_POST as $key => $value) {
    $value = urlencode(stripslashes($value));
    $req .= "&$key=$value";
}
// Now Post all of that back to PayPal's server using curl, and validate everything with PayPal
// We will use CURL instead of PHP for this for a more universally operable script (fsockopen has issues on some environments)
//$url = "https://www.sandbox.paypal.com/cgi-bin/webscr";
$url = "https://www.paypal.com/cgi-bin/webscr";
$curl_result = $curl_err = '';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/x-www-form-urlencoded", "Content-Length: " . strlen($req)));
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$curl_result = @curl_exec($ch);
$curl_err = curl_error($ch);
curl_close($ch);

$req = str_replace("&", "\n", $req);  // Make it a nice list in case we want to email it to ourselves for reporting
// Check that the result verifies
if (strpos($curl_result, "VERIFIED") !== false) {
    $req .= "\n\nPaypal Verified OK";
} else {
    $req .= "\n\nData NOT verified from Paypal!";
    mail("you@youremail.com", "IPN interaction not verified", "$req", "From: you@youremail.com");
    exit();
}

/* CHECK THESE 4 THINGS BEFORE PROCESSING THE TRANSACTION, HANDLE THEM AS YOU WISH
  1. Make sure that business email returned is your business email
  2. Make sure that the transaction�s payment status is �completed�
  3. Make sure there are no duplicate txn_id
  4. Make sure the payment amount matches what you charge for items. (Defeat Price-Jacking) */

// Check Number 1 ------------------------------------------------------------------------------------------------------------
$receiver_email = $_POST['receiver_email'];
if ($receiver_email != "you@youremail.com") {
//handle the wrong business url
    exit(); // exit script
}
// Check number 2 ------------------------------------------------------------------------------------------------------------
if ($_POST['payment_status'] != "Completed") {
    // Handle how you think you should if a payment is not complete yet, a few scenarios can cause a transaction to be incomplete
}

// Check number 3 ------------------------------------------------------------------------------------------------------------
$this_txn = $_POST['txn_id'];
//check for duplicate txn_ids in the database
// Check number 4 ------------------------------------------------------------------------------------------------------------
$product_id_string = $_POST['custom'];
$product_id_string = rtrim($product_id_string, ","); // remove last comma
// Explode the string, make it an array, then query all the prices out, add them up, and make sure they match the payment_gross amount
// END ALL SECURITY CHECKS NOW IN THE DATABASE IT GOES ------------------------------------
////////////////////////////////////////////////////
// Homework - Examples of assigning local variables from the POST variables
$txn_id = $_POST['txn_id'];
$payer_email = $_POST['payer_email'];
$custom = $_POST['custom'];
// Place the transaction into the database
// Mail yourself the details
mail("you@youremail.com", "NORMAL IPN RESULT YAY MONEY!", $req, "From: you@youremail.com");
?>

下图将帮助您了解paypal流程。

如需进一步阅读,请参阅以下链接;

希望这对你有帮助..:)

票数 44
EN

Stack Overflow用户

发布于 2013-09-25 20:50:01

我发现的一种方法是:

尝试将此字段插入到生成的表单代码中:

代码语言:javascript
复制
<input type='hidden' name='rm' value='2'>

rm表示返回方法

2表示(post)

在用户购买并返回到您的站点url之后,该url也会获得帖子参数。

附注:如果使用php,尝试在返回的url (脚本)中插入var_dump($_POST);,然后进行一次测试购买,当您返回您的站点时,您将看到您的url上有哪些变量。

票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7642895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档