【问题标题】:PayPal HTML Button Missing Invoice ParameterPayPal HTML 按钮缺少发票参数
【发布时间】:2021-02-22 17:34:41
【问题描述】:

我实现了一个 Paypal HTML 按钮(支付和订阅)来引导客户到 Paypal 网站进行支付。另外,我将发票 # 作为参数传递。根据以下文件,invoice是一个传递变量。

https://developer.paypal.com/docs/paypal-payments-standard/integration-guide/Appx-websitestandard-htmlvariables/# https://www.paypalobjects.com/webstatic/en_US/developer/docs/pdf/archive/PP_subscriptions.pdf

事实上,在我的沙盒帐户上进行测试时,我确实会以 POST 调用的形式收到所有参数(包括发票)。但是,当我测试实时付款(非沙盒帐户)时,未收到发票。但是,我会收到其他付款信息,例如 item_number、custom、transaction id 等。此外,对于实时付款,这些信息是通过 GET 调用而不是 POST 调用传递的。

总而言之,为什么我会收到来自沙盒付款的发票参数,而不是实时付款。

<form action="https://www.paypal.com/cgi-bin/webscr" method="post" class="message">
    <input type="hidden" name="return" value="<%= (request.isSecure() ? "https" : "http") + "://" + request.getServerName() + "/upgradepayment" %>">
    <input type="hidden" name="rm" value="2">
    <input type="hidden" name="cmd" value="_xclick-subscriptions">
    <input type="hidden" name="hosted_button_id" value="...">
    <input type="hidden" name="business" value="...">
    <input type="hidden" name="item_name" value="...">
    <input type="hidden" name="notify_url" value="..."
    <input type="hidden" name="no_note" value="1">
    <input type="hidden" name="currency_code" value="USD">
    <input type="hidden" name="no_shipping" value="1">
    <input type="hidden" name="a3" value="...">
    <input type="hidden" name="p3" value="1"> 
    <input type="hidden" name="t3" value="M">
    <input type="hidden" name="src" value="1">
    <input type="hidden" name="sra" value="1">
    <input type="hidden" name="invoice" value="...">
    <input type="hidden" name="custom" value="...">
    <input type="hidden" name="item_number" value="...">
    <input id="ok" type="submit" name="submit" value="Pay and Subscribe with PayPal" alt="PayPal - The safer, easier way to pay online" title="PayPal - The safer, easier way to pay online">
</form>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" class="message">
    <input type="hidden" value="<%= (request.isSecure() ? "https" : "http") + "://" + request.getServerName() + "/upgradepayment" %>" name="return">
    <input type="hidden" name="rm" value="2">
    <input type="hidden" name="cmd" value="_xclick">
    <input type="hidden" name="business" value="...">
    <input type="hidden" name="item_name" value="...">                      
    <input type="hidden" name="amount" value="...">
    <input type="hidden" name="no_shipping" value="0">
    <input type="hidden" name="no_note" value="1">
    <input type="hidden" name="currency_code" value="USD">
    <input type="hidden" name="lc" value="CA">
    <input type="hidden" name="bn" value="PP-BuyNowBF">
    <input type="hidden" name="invoice" value="...">
    <input type="hidden" name="custom" value="...">
    <input type="hidden" name="item_number" value="...">
    <input id="ok" type="submit" name="submit" value="Pay with PayPal" alt="PayPal - The safer, easier way to pay online" title="PayPal - The safer, easier way to pay online">
</form> 

编辑:我通过即时付款通知 (IPN) 收到有关订阅的信息

【问题讨论】:

  • “我实现了一个 PayPal HTML 按钮”——如果您需要帮助,请展示您的工作。您如何“接收”信息?这是关于非常古老的支付数据传输 (PDT) 的问题吗?如果是的话,你为什么要集成 2000 年初的这些东西?
  • 感谢您的评论!我将代码添加到我的订阅按钮,并从 IPN 接收信息。
  • "invoice" 因为你传递它应该可以工作。但是,如果有一个 hosts_button_id 并且正在使用它,则可能会因此而忽略值。您的其余代码看起来像一个未托管的按钮,所以我不确定您为什么要包含它
  • 感谢您的建议。我已经尝试删除该行 hosts_button_id 但发票参数仍未通过。我还添加了上述非订阅付款的代码以供参考。非订阅按钮代码不包含hosted_button_id,并且从未传递过“invoice”参数。
  • 嗯,嗯,这是唯一的问题,“发票”是使用正确的参数。上面的按钮值为“...”,并且您没有包含收到的 IPN 消息的相应文本,不能说更多

标签: paypal paypal-sandbox paypal-subscriptions


【解决方案1】:

我刚刚使用下面的这段代码进行了实时付款(您的 HTML,但稍作修改):

<form action="https://www.paypal.com/cgi-bin/webscr" method="post" class="message">
    <input type="hidden" name="rm" value="2">
    <input type="hidden" name="cmd" value="_xclick">
    <input type="hidden" name="business" value="<BUSINESS_PAYPAL_EMAIL>">
    <input type="hidden" name="item_name" value="<ITEM_NAME>">
    <input type="hidden" name="notify_url" value="<CALLBACK_URL>"
    <input type="hidden" name="no_note" value="1">
    <input type="hidden" name="currency_code" value="USD">
    <input type="hidden" name="no_shipping" value="1">
    <input type="hidden" name="p3" value="1"> 
    <input type="hidden" name="t3" value="M">
    <input type="hidden" name="src" value="1">
    <input type="hidden" name="sra" value="1">
    <input type="hidden" name="invoice" value="<INVOICE_ID>">
    <input type="hidden" name="custom" value="<CUSTOM_OPTIONAL>">
    <input type="hidden" name="item_number" value="<ITEM_NUMBER>">
    <input type="hidden" name="amount" value="<AMOUNT>">
    <input id="ok" type="submit" name="submit" value="Pay and Subscribe with PayPal" alt="PayPal - The safer, easier way to pay online" title="PayPal - The safer, easier way to pay online">
</form>

我使用https://requestbin.com/ 收集IPN 回调。这是发票的截图:

【讨论】:

  • 我认为 IPN 事件包括发票,但返回网站 URL 未通过发票字段(除非沙盒)
  • 如果是这样的话很有趣,但是无论如何都不应该依赖返回网站 URL,因为它可能永远不会发生。
【解决方案2】:

确保您正确实施IPN listener request-response flow

您的听众应该向这些地址返回一个空的 200 消息给 Paypal;

之后,您会收到 VERIFIED 消息以及参数。 确保在表单中包含invoice 输入(看起来您已经这样做了)。 发票是可选的,默认为not passed back to you

还有一个IPN simulator,您可以尝试并确保您的侦听器正常工作。

这是一个关于如何处理 IPN 消息的完整示例: https://gist.github.com/xcommerce-gists/3440401

【讨论】:

    猜你喜欢
    • 2015-04-09
    • 2015-03-21
    • 2015-12-07
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2018-08-05
    相关资源
    最近更新 更多