无法在 IPN 上获得贝宝“已验证”或“无效”

Posted

技术标签:

【中文标题】无法在 IPN 上获得贝宝“已验证”或“无效”【英文标题】:Cannot get paypal "VERIFIED" or "INVALID" on IPN 【发布时间】:2018-08-12 19:29:22 【问题描述】:

我正在尝试通过他们的 API 实现一个贝宝支付系统。不要问我为什么不使用braintree 或stripe ......这是一个客户端规范,由于某些原因它通过普通的paypal,现在我正在努力实现支付验证。

我使用有效的沙盒实现了贝宝付款表单。我提到了一个 notify-url 来获得反馈,然后我必须根据这个文档进行 paypal 验证(以确保我收到的付款信息是真实的):https://developer.paypal.com/docs/classic/ipn/integration-guide/IPNImplementation/ 和这个https://developer.paypal.com/docs/classic/ipn/integration-guide/IPNIntro/#id08CKFJ00JYK

我的代码如下:

import  Meteor  from 'meteor/meteor';

import moment from 'moment';
import bodyParser from 'body-parser';

import  HTTP  from 'meteor/http'

Picker.middleware(bodyParser.urlencoded( extended : false ));
// Picker.middleware(bodyParser.json());


let postRoutes = Picker.filter(function(req, res) 
    return req.method === "POST"
);

postRoutes.route('/payment_received', function(params, request, response, next)
    response.statusCode = 200;
    response.end();

  let convertAsyncToSync = Meteor.wrapAsync(HTTP.call);
    let test = JSON.stringify(request.body);

    let body2 = 'cmd=_notify-validate&' + test.slice(1, -1).replace(/"/g,'').replace(/:/g,"=").replace(/,/g,'&')
    console.log('-------body2-----------')
    console.log(body2)
  let result2 = convertAsyncToSync('POST', "https://ipnpb.sandbox.paypal.com/cgi-bin/webscr", 
    headers: 
        'Connection': 'close'
    ,
    body: body2
  );

    console.log('----------------result2------------')
    console.log(result2);
  console.log('----------------result2.BODY------------')
    console.log(result2.body);

)

根据文档,虽然我应该得到“已验证”或“无效”响应,但我得到了一个完整的 html 页面,但我不知道为什么。

即使我使用简单的 REST 客户端测试发布请求,我也没有得到好的答复。不知道为什么,我被困在那里。有paypal经验的吗?

【问题讨论】:

【参考方案1】:

试试这个包,它对我很有效。 https://github.com/mbreuer23/meteor-ipn-listener/

【讨论】:

以上是关于无法在 IPN 上获得贝宝“已验证”或“无效”的主要内容,如果未能解决你的问题,请参考以下文章

贝宝沙盒 IPN 模拟器 - 没有得到响应

Paypal IPN 获得空白确认(应为“已验证”或“无效”)

在IPN上无法获得Paypal“验证”或“无效”

paypal 验证付款

为啥我的贝宝 ipn 验证总是返回无效?

PayPal IPN 已验证握手但 IPN 无效