PayPal IPN 消息未发送发票,即使它肯定包含在按钮代码中

Posted

技术标签:

【中文标题】PayPal IPN 消息未发送发票,即使它肯定包含在按钮代码中【英文标题】:PayPal IPN message not sending invoice, even though it was definitely included in button code 【发布时间】:2021-11-21 11:27:54 【问题描述】:

我的网站上有一个贝宝结帐按钮以及资金图标。这是它的部分代码:

                 style: 
                    label: 'checkout',
                    fundingicons: true, // optional
                    size: 'responsive', // small | medium | large | responsive
                    shape: 'rect',   // pill | rect
                    color: 'gold'   // gold | blue | silver | black
                ,
                payment: function (data, actions) 
                    return actions.payment.create(
                        payment: 
                            transactions: [
                                
                                    amount: 
                                        total: amount,
                                        currency: currency
                                    ,
                                    invoice_number: '$invoice',
                                    custom: '$invoice'
                                
                            ],
                            "redirect_urls": 
                                "return_url":  , // these are both filled correctly
                                "cancel_url": 
                            
                        
                    );

如您所见,发票字段是明确定义的,但是,当收到回发 IPN 消息时,我的 ipn.php 文件由于缺少发送给它的发票编号而失败。

更奇怪的是,每当 txn_type 是 express_checkout 时,发票就在那里,但当它是 web_accept 时,大多数时候,发票和 @987654325 都不是@ 字段正在通过(当 IPN 消息开始失败时,我添加了自定义字段)。

我们用于按钮的api是https://www.paypalobjects.com/api/checkout.js

是我遗漏了什么,还是只是 api 已被弃用,这是另一个需要切换的标志?

编辑:

在其他浏览器上对此进行测试后,adblock 似乎阻止了部分 checkout.js 依赖项的加载:

火狐:Cross-Origin Request Blocked 歌剧:Failed to load resource: net::ERR_BLOCKED_BY_ADBLOCKER 边缘:POST https://www.paypal.com/xoplatform/logger/api/logger net::ERR_BLOCKED_BY_CLIENT

没有来自 chrome 的错误消息。

编辑 2:

web_accept 类型的示例 IPN

mc_gross=300.00&protection_eligibility=Ineligible&payer_id=SOMEREALID&
            payment_date=11:32:11 Sep 27, 2021 PDT&payment_status=Completed&charset=windows-1252&
            first_name=&mc_fee=9.00&notify_version=3.9&custom=&payer_status=unverified&
            business=our_business_email&quantity=1&
            verify_sign=sign_in_alpha_numeric&
            payer_email=random_alpha_numeric@dcc2.paypal.com&txn_id=1KM93595HU1361254&payment_type=instant&
            last_name=NotProvided&receiver_email=same_as_business_email&payment_fee=&
            shipping_discount=0.00&receiver_id=more_alpha_numeric&insurance_amount=0.00&
            txn_type=web_accept&item_name=&discount=0.00&mc_currency=CAD&item_number=&
            residence_country=OUR_COUNTRY_CODE&receipt_id=1111-1111-1111-1111&shipping_method=Default&
            transaction_subject=&payment_gross=

【问题讨论】:

您确定那些web_accept 付款来自上述代码吗?最可能的解释是它们来自标准 html 按钮或链接 我们使用 paypal api 来创建 ipn 消息的唯一地方就是这里,我不认为他们可以来自其他任何地方 如果在 PayPal 账户中配置了 IPN 监听 URL,则该账户收到的任何付款都会触发 IPN 消息。 发布您收到的示例 web_accept IPN(保留任何 ID,但编辑掉个人身份数据) 【参考方案1】:

在给出的示例 IPN 中:

mc_gross=300.00&protection_eligibility=Ineligible&payer_id=SOMEREALID&
payment_date=11:32:11 Sep 27, 2021 PDT&payment_status=Completed&charset=windows-1252&
first_name=&mc_fee=9.00&notify_version=3.9&custom=&payer_status=unverified&
business=our_business_email&quantity=1&
verify_sign=sign_in_alpha_numeric&
payer_email=random_alpha_numeric@dcc2.paypal.com&txn_id=1KM93595HU1361254&payment_type=instant&
last_name=NotProvided&receiver_email=same_as_business_email&payment_fee=&
shipping_discount=0.00&receiver_id=more_alpha_numeric&insurance_amount=0.00&
txn_type=web_accept&item_name=&discount=0.00&mc_currency=CAD&item_number=&
residence_country=OUR_COUNTRY_CODE&receipt_id=1111-1111-1111-1111&shipping_method=Default&
transaction_subject=&payment_gross=

注意:@dcc2.paypal.com

这来自直接的信用卡集成,可能使用经典的 NVP DoDirectPayment API 或虚拟终端 [或使用 PayPal 作为处理器的 Payflow,碰巧]

因此,与问题中的按钮代码无关——而是与此 PayPal 帐户的单独集成。

【讨论】:

哦,有趣。我们确实有支付流集成,但我被引导相信支付流不使用任何 IPN 消息。我们使用 paybridge.php 文件处理这些支付流付款,不需要 ipn 消息。非常感谢! Payflow 本身不发送 IPN 消息,但 PayPal 帐户收到的任何付款都会向该帐户中配置的 IPN 侦听器发送 IPN 消息(除非交易通过指定不同的 notify_url 覆盖此消息)跨度>

以上是关于PayPal IPN 消息未发送发票,即使它肯定包含在按钮代码中的主要内容,如果未能解决你的问题,请参考以下文章

未收到 Paypal 沙箱 IPN 消息

PayPal 订阅 - 缺少 PDT 发票

Paypal:IPN 侦听器未收到 IPN 消息

Paypal IPN:notify_url 未调用

如何传递 Paypal ipn 自定义和发票变量?

Paypal 中定期付款的 IPN 与普通发票付款有啥不同的参数吗?