验证IPN呼叫来自PayPal?

sil*_*npi 8 php security paypal paypal-ipn

如何确认对指定notifyURL的PayPal IPN POST请求确实来自PayPal?

我并不是说将数据与我之前发送的数据进行比较,但是如何验证此PayPal请求来自的服务器/ IP地址确实是有效的?

Amb*_*ber 15

IPN协议包括三个步骤:

  1. PayPal会向您的IPN侦听器发送一条消息,通知您该事件
  2. 您的监听器将完整的未更改的消息发送回PayPal; 消息必须包含相同顺序的相同字段,并以与原始消息相同的方式进行编码
  3. PayPal会发回一个单词,如果邮件来自PayPal则为VERIFIED,如果与最初发送的内容有任何差异,则为VERALID

https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_admin_IPNIntro

  • +1,其他答案只是随机的背叛. (4认同)

Lob*_*bos 11

根据PayPal的建议,这是我发现的最简单的方法.我使用http_build_query()从paypal发送到网站的帖子构建网址.Paypal文档声明您应该将其发送回来进行验证,这就是我们对file_get_contents的处理方式.你会注意到我使用strstr来检查'VERIFIED'这个词是否存在,所以我们继续在函数中,如果不是,我们返回false ...

$verify_url = 'https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_notify-validate&' . http_build_query( $_POST );   

if( !strstr( file_get_contents( $verify_url ), 'VERIFIED' ) ) return false;
Run Code Online (Sandbox Code Playgroud)