PayPal IPN 消息不发送发票,即使它肯定包含在按钮代码中
PayPal IPN message not sending invoice, even though it was definitely included in button code
我的网站上有一个贝宝结账按钮和资金图标。这是它的部分代码:
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
时,它大多数时候,发票和 custom
字段都没有通过(我在 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¬ify_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=
在给出的示例 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¬ify_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 帐户的单独集成。
我的网站上有一个贝宝结账按钮和资金图标。这是它的部分代码:
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
时,它大多数时候,发票和 custom
字段都没有通过(我在 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
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¬ify_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=
在给出的示例 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¬ify_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 帐户的单独集成。