微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我在 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-customversion=2.notify1020000000000000000000000 -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-1110716-1 BP3_3726.jpg :: 下载原件&shipping_discount=0.00&quantity1=1&insurance_am 'mount = 0.00&quantity2 = 1&receiver_id = 3SKEBUJZCV7AS&quantity3 = 1&txn_type =购物&折扣= 0.00&mc_gross_1 = 3.99&mc_currency = USD&mc_gross_2 = 3.99&mc_gross_3 = 3.99&residence_country = US&SHIPPING_METHOD =认&transaction_subject =&payment_gross = 11.97&ipn_track_id = e0b32d1a10a85

解决方法

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

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

类似于:

    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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。