PayPal IPN 适用于单个购物车项目,但不适用于多个购物车项目

Posted

技术标签:

【中文标题】PayPal IPN 适用于单个购物车项目,但不适用于多个购物车项目【英文标题】:PayPal IPN working for single cart items but not multiple cart items 【发布时间】:2021-08-03 09:11:57 【问题描述】:

我在 Google 表格中找到了这个 Paypal IPN 代码,它确实适用于我购物车中的单个商品,但不适用于任何多购物车商品。我不知道我在做什么,我希望稍微编辑一下这段代码,让它适用于多个购物车项目。任何帮助将非常感激。谢谢!

 function doPost(e) 

  var rowData = [];

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet()

  rowData.push(new Date(e.parameter.payment_date));
    rowData.push(e.parameter.payment_type);
    rowData.push(e.parameter.payment_status);    
    rowData.push(e.parameter.payer_email);
    rowData.push(e.parameter.item_name1);
    rowData.push(e.parameter.item_number1);
    rowData.push(e.parameter.quantity);
    rowData.push(e.parameter.first_name);
    rowData.push(e.parameter.last_name);
        rowData.push(e.parameter.address_street);
        rowData.push(e.parameter.address_city);
        rowData.push(e.parameter.address_state);
        rowData.push(e.parameter.address_zip);
  
  sheet.appendRow(rowData);

这是我收到的 IPN 消息减去编辑我的一些个人信息...

mc_gross=11.97&protection_eligibility=合格&address_status=确认&item_number1=&item_number2=&payer_id=HJXtestY&item_number3=&address_street=testS。 test Road&payment_date=19:07:58 May 12, 2021 PDT&payment_status=Completed&charset=windows-1252&address_zip=test&first_name=Brett&mc_fee=0.65&address_country_code=US&address_name=Brett-detestto&notify_version=3.9&custom=/xotio-media/2019/2019-07-1 -Crusher,照片及payer_status =验证的&商务= xotestail.com&ADDRESS_COUNTRY =美国及num_cart_items = 3&ADDRESS_CITY =测试&verify_sign =测试test.test-cfj7Q1YCC6WrT&PAYER_EMAIL = testl.com&txn_id = 0BFtest11545&payment_type =即时与payer_business_name =布雷特testphy - detestoto及姓氏= testr&ADDRESS_STATE = UT&item_name1 = 2019年7月13日,图莎尔-Crusher-Photos/Top-Col-de-Crush/19-TC-111644-190713-BP3_3724.jpg :: 下载原文&receiver_email=testil.com&item_name2=2019-07-13-Tushar-Crusher-Photos/Top-Col-de -Crush/19-TC-111645-190713-BP3_3725.jpg :: 下载原创&payment_fee=0.65&item_name3=2019-07-13-Tushar-Crusher-Photos/Top-Col-de-Crush/19-TC-111646-190713- BP3_3726.jpg :: 下载原文&shipping_discount=0.00&quantity1=1&insurance_am outl = 0.00和数量2 = 1&Receiver_ID = 3SKEBUJZCV7AS和数量3 = 1&Txn_type = 0.00&Mc_Gross_1 = 3.99&MC_GROST_1 = 3.99&MC_GROST_3 = 3.99&RESINDE_COUNTRY = US&Shipper_Method =默认值&transaction_11.97&ipn_track_id = e0b32d1a10a85

【问题讨论】:

【参考方案1】:

当有多个项目时记录您收到的文本,并相应地更改代码以解析它。

您还可以通过以下方式查看接收方帐户的 IPN 历史记录:

直播https://www.paypal.com/webscr?cmd=_display-ipns-history

沙盒:https://www.sandbox.paypal.com/webscr?cmd=_display-ipns-history

类似:

    rowData.push(e.parameter.payment_type);
    rowData.push(e.parameter.payment_status);    
    rowData.push(e.parameter.payer_email);
    rowData.push(e.parameter.first_name);
    rowData.push(e.parameter.last_name);
    rowData.push(e.parameter.address_street);
    rowData.push(e.parameter.address_city);
    rowData.push(e.parameter.address_state);
    rowData.push(e.parameter.address_zip);

    e.parameter.quantity1 = e.parameter.quantity1 || e.parameter.quantity || '';
    let i = 1;
    while(e.parameter['item_name'+i]) 
        rowData.push(e.parameter['item_name'+i]);
        rowData.push(e.parameter['item_number'+i]);
        rowData.push(e.parameter['quantity'+i]);
        i++;
    

更好的是,停止使用像 IPN 这样古老的东西,改用当前的 v2/checkout/orders 集成。在您的服务器上创建两条路由,一条用于“创建订单”,一条用于“捕获订单”,documented here。这些路由应该只返回 JSON 数据(没有 html 或文本)。后者应该(成功时)在返回之前将购物车项目和付款详细信息存储在您的数据库(或者,嗯,电子表格)中——尤其是purchase_units[0].payments.captures[0].id,PayPal 交易 ID。

将这两条路线与以下批准流程配对:https://developer.paypal.com/demo/checkout/#/pattern/server

【讨论】:

感谢您的快速回复!就像我说的。我不知道我在做什么。 我已添加我收到的 IPN 消息。感谢您的帮助。 你需要一个循环,^有个主意

以上是关于PayPal IPN 适用于单个购物车项目,但不适用于多个购物车项目的主要内容,如果未能解决你的问题,请参考以下文章

是否有适用于不同 Paypal IPN 的模式?

Paypal REST api 调用适用于 cURL,但不适用于 C# 代码

PayPal item_name 作为“购物车”传递给 IPN 和 PDP

PayPal 的 IPN 不会因购物车上传而触发

“PayPal Here”是不是发送 IPN 通知?

Paypal IPN 不适用于 woocommerce