将 PayPal IPN 集成到网站中

Posted

技术标签:

【中文标题】将 PayPal IPN 集成到网站中【英文标题】:Integrating PayPal IPN into website 【发布时间】:2012-05-05 08:29:21 【问题描述】:

我正在开发一个捐款页面,该页面允许用户输入捐款金额,然后使用 PayPal 付款。我已经使用 PayPal 成功创建了一个沙盒帐户。完成此操作后,我创建了一个用于接收付款的企业帐户和一个用于付款的个人帐户。

我正在尝试使用即时付款通知功能,它允许开发人员验证用户是否确实在 PayPal 的付款页面上进行了交易(以便我可以将其记录在数据库中)。

我尝试在企业帐户上发布我的 IPN 页面的 URL。问题是它不接受 URL。这是我提供的网址:

http://localhost:54866/Default.aspx

该网站不是在线托管的。请问这怎么做?我应该如何提供网址?谢谢:)

附:我正在使用 C# 和 ASP.NET

【问题讨论】:

【参考方案1】:

是的,你是对的,你不能给本地主机(它会尝试解析到贝宝自己的服务器......)所以你必须做一些诡计。

你需要做的是:

假设您的商店将成为 www.mynewshop.com

1) 在贝宝中将其设置为 IPN 重定向

2) Change your HOST 文件将 www.mynewshop.com 重定向到 127.0.0.1(例如 localhost)

您可以通过尝试在浏览器中键入例如 www.mynewshop.com 来测试第 2 步是否正常工作 - 如果您在端口 80 上有一个服务器,它将解析为 localhost:80 或者说您有 devweb 服务器在 :1234 类型上运行浏览器地址栏中的 www.mynewshop.com:1234 并检查解决

3) 将您在项目上的端口设置为 :80 (因为我认为您不能在贝宝中指定除 :80 以外的任何内容)。您可以通过 project.properties 设置项目测试服务器端口 - 将其设置为非动态端口,然后您可以设置固定 :80

Paypal 会尝试将您重定向回您的电脑尝试访问的 www.mynewshop.com,但在幕后您最终会访问 localhost。

您还可以根据记忆设置项目属性以启动浏览器,例如 www.mynewshop.com,这意味着即使在开发中您似乎也在使用实时 URL。这可以有它的优点,例如它将帮助您发现由于 localhost 与实时主机 URL 而导致的错误 URL/部署差异。

玩得开心! :)(并将其标记为答案 - 我知道它有效,因为我很久以前自己解决了这个问题)

【讨论】:

感谢您的详细回复。我会试试的。 我认为 IPN 不像你描述的那样工作。是的,如果您使用http redirect,您可以欺骗您的主机。但是您不能这样做,因为 Paypal 会在自己的一端向您的服务器发起 POST,而与您的访问者在做什么无关。 @Matthew => 你能确认一下吗? 我觉得可以调和。 IPN 独立于用户操作而工作。结帐完成后,您的网站会收到 PayPal 的通知(即 PayPal 服务器 => 您的服务器)。当用户点击返回时,重定向回你的页面时会携带POST 数据,与IPN 相同。希望我做对了。【参考方案2】:

您必须在路由器上设置端口转发。 “localhost”不可公开路由,因此 PayPal 无法访问它。

如果您将路由器上的端口(公共 IP)转发到本地 PC,您可以使用 IP 地址和端口组合作为您的 IPN url 进行测试。例如。 1.2.3.4:8080 将转发到您的测试服务器的内部 IP 地址。

PayPal IPN 的工作方式是在交易发生后或交易信息发生变化时联系您的服务器,因此 PayPal 必须能够访问您的 IPN URL。它独立于您的主机文件或任何访问者。

【讨论】:

以上是关于将 PayPal IPN 集成到网站中的主要内容,如果未能解决你的问题,请参考以下文章

将 PayPal IPN 集成到网站中

laravel 中的 PayPal IPN 集成(需要在我的后端实时更新定期付款状态)

通过存储用户凭据在 php 中集成 Paypal

使用 c# 在 asp.net 中集成 paypal

如何更好地为第三方卖家集成 Paypal“立即购买”按钮?

PayPal 集成 (IPN) - 真的有多大可能?