【问题标题】:Can I send a variable to paypal, and have it post it back to me when payment completes?我可以将变量发送到贝宝,并在付款完成后将其发回给我吗?
【发布时间】:2011-02-20 06:51:29
【问题描述】:

我一直在使用快速结帐 API 将我网站上的人们的帐户在付款后转换为高级帐户。唯一的问题是,在用户单击返回按钮之前,它不会将用户发送回站点,并且在发生这种情况时会更新他们的权限。大约 40% 的用户似乎没有这样做......所以他们的账户在付款后永远不会被记入贷方。

虽然 paypal 会在成功付款后立即回发,但我无法让它立即真正更新用户的帐户,因为我无法让它发回某种可以识别用户的信息完成付款。只有当您被发送回发送交易 ID 的站点时,我才能这样做,我通过回发记录了该站点。它会搜索它,如果在 DB 中找到它就会授予权限。

有没有办法向贝宝提交某种变量,然后它会发回给我?像 &user_id=123 这样的东西,可以很方便地更新用户的权限。

【问题讨论】:

    标签: paypal


    【解决方案1】:

    Iten_number 隐藏变量在我的应用程序中不起作用。但我发现 custom 隐藏字段工作正常。只需将此字段添加到由 paypal 生成的表单中:<input type="hidden" name="custom" value="YOUR VALUE FROM DB"/>。之后,您可以读取此值以识别例如已购买的产品。 (Java代码):String custom = request.getParameter("custom");

    【讨论】:

    • 最佳答案!在 PHP 中,您可以使用 ipn 脚本中的 $_POST['custom'] 轻松读取此字段。
    • @dsplatonov 我们可以在哪个页面上阅读它?我的意思是返回 url 或 notify_url
    • @KaiNoack 我尝试使用除 custom 之外的另一个名称:<input type="hidden" name="my_id" value="YOUR VALUE FROM DB"/>,但没有任何到达 IPN 的 $_POST['my_id'] :( 所以可能name="custom" 是唯一有效的名称。跨度>
    • 只是说,虽然这是高度赞成的(我不理会它)“自定义”值实际上会以“cm=”的形式返回。 2016 年可能发生了变化,因此之前的所有答案都说它以“自定义”的形式返回,但之后的所有答案都说它以“cm”的形式返回。
    • @Colin custom 变量工作正常,它没有返回为 cm
    【解决方案2】:

    是的,如果您发送 item_numberIPN notification 将在回复给您时包含该信息。当用户开始付款过程时,我在数据库中记录了一个唯一 ID,并在将其发送到 PayPal 时将其包含在内。当 IPN 进入时,该唯一 ID 会与数据库中的记录相匹配,从而为我提供所需的所有信息。

    编辑回复您的评论:

    我希望上面链接的网站上的某处有一个代码示例,但基本上就我而言,我使用的是我发布到https://www.paypal.com/cgi-bin/webscr 的表单。在该表单中是 IPN 内容中记录的各种隐藏字段(cmd 用于执行什么命令,business 用于指定您的业务 ID,item_name 用于 PayPal UI 中的一个很好的描述,item_number 用于项目编号我在上面提到过,等等等等)。当 IPN 回帖到您的 IPN 地址时,它会包含各种字段(例如 payment_status - 有点重要!&mdash 以及您在向他们发帖时输入的 item_number)。

    【讨论】:

    • 有这样的代码示例吗?如何将项目 # 传递给它?
    • @Yegor:更新了更多信息。从任何的角度来看,我都不是 PayPal 集成专家,但希望这很有用。
    • 我认为 item_number 不适合这种用途。 item_number 必须是您的产品数据库的内部 id,您不应修改。要传回值,您可以使用可选字段 on0、on1... 并在 IPN 回传中获取它们的值。
    • 这是一个架构设计问题。您可以为此目的使用 item_number,但我认为这是不正确的。 item_number 值应该是您唯一的产品 ID,始终相同。在此链接中,您可以看到“传递”变量。 developer.paypal.com/docs/classic/paypal-payments-standard/… 。我认为最好使用自定义或发票变量或可选字段来解决这个问题。
    • @T.J.Crowder 我目前必须在结账时将 8 个变量传递给 PayPal。我正在考虑预先将它们全部压缩成一个数组。你的想法?
    【解决方案3】:

    只是为了补充这个老问题......

    有一些选项参数通常用于通过paypal发送自定义数据。

    这些选项标签是 on0on1on2 用于自定义字段名称和 os0、os1 和 os2 用于自定义字段值。

    我会发送值为“UserID”的 on0os0 实际 ID。

    这些值将在 IPN 中表示如下:

    os0 表示为 option_selection1

    os1 表示为 option_selection2

    os2 表示为 option_selection3

    on0 表示为 option_name1

    on1 表示为 option_name2

    on2 表示为 option_name3

    Here's the info on PayPal's HTML parameters

    【讨论】:

      【解决方案4】:

      根据HTML Variables for PayPal Payments Standard,您可以发送所有“传递”变量:

      item_number 用于跟踪产品或服务的传递变量 购买或作出的贡献。您指定的值被传递 付款完成后返回给您。如果您需要此变量 希望 PayPal 跟踪库存或跟踪商品的损益 按钮卖出。

      自定义传递变量,用于您自己的跟踪目的,买家看不到。默认 - 没有变量传回给您。

      invoice 传递变量,您可以使用该变量来标识此次购买的发票编号。默认 - 没有变量被传递回 你。

      所有这些传递变量都由 IPN 在支付响应信息中发回。

      您只需在服务器端呈现您的 HTML 模板并将字段写回 HTML 代码中,例如

      <input type="hidden" name="item_number" value="{{ productID }}">
      <input type="hidden" name="invoice_id" value="{{ invoiceID }}">
      <input type="hidden" name="custom" value="{{ jsonInfo }}">
      

      如果您想处理更多数据,例如

      ,从技术上讲,“自定义”字段可以是 JSON 编码的字符串
      myItemObject = {
         "customerEmail" : "john@doe.com
         "customerID: "AAFF324"
      }
      jsonInfo = json.dumps( myItemObject )
      return render_template(tmpl_name, jsonInfo=jsonInfo, productID=productID, invoiceID=invoiceID)
      

      【讨论】:

        【解决方案5】:

        终于得到了这个答案,想和大家分享一下:

        在您的 HTML 表单上输入此代码(这是 Paypal 沙箱):

        form action="https://www.sandbox.paypal.com/cgi-bin/webscr?custom=YOUR_VAR" method="post"
        

        Paypal 重定向到您的页面成功后在您的 PHP 上:使用 cm GET 变量:

        $example = $_GET["cm"];
        

        【讨论】:

        • 我测试并确认了这项工作。 2016 年之前的其他答案说“自定义”值返回为“自定义”,但一段时间后,系统发生了变化,现在返回为“厘米”。
        【解决方案6】:

        希望this URL 能解决您的问题。因为它也解决了我的问题。将自定义变量添加到您的表单,然后在您的成功付款页面上检索它。 例子 : &lt;input type='hidden' name='custom' value='&lt;?php echo $email; ?&gt;'/&gt;

        然后将其检索为:

         $_POST['custom']
        

        【讨论】:

          【解决方案7】:

          2021 年对我有用的是在我的客户端应用程序中将“custom_id”(在“purchase_units”数组中)传递给 PayPal,并在我的后端检查“custom”。

          是的,看起来 PayPal 出于某种原因重命名了参数。

          【讨论】:

            【解决方案8】:
            <input type="hidden" name="on0" value="Ajay Gadhavana">
            <input type="hidden" name="on1" value="my_phone_number">
            <input type="hidden" name="on2" value="my_third_extra_field">
            

            来自贝宝的回应是

            [option_name1] => Ajay Gadhavana [option_name1] => my_phone_number [option_name1] => my_third_extra_field

            【讨论】:

              猜你喜欢
              • 2014-06-30
              • 2018-01-06
              • 1970-01-01
              • 2011-10-08
              • 2012-08-30
              • 2015-06-05
              • 1970-01-01
              相关资源
              最近更新 更多