Paypal + ASP .NET Web 应用程序集成的基本工作流程问题

Posted

技术标签:

【中文标题】Paypal + ASP .NET Web 应用程序集成的基本工作流程问题【英文标题】:Basic workflow issue with Paypal + ASP .NET web app integration 【发布时间】:2011-04-13 03:35:43 【问题描述】:

我正在为我的软件产品设置一个支付网关,用户可以从网上购买并使用它。我正在使用 paypal 网站付款标准来开始使用。

有一个基本问题困扰着我。我的用户的工作流程是: 登录我的产品网站(试用期免费许可证)-> 付费以延长许可证

现在假设一个用户 - xyz@abc.com 在我的网站上注册并登录。然后我向他展示立即购买按钮(paypal 的)。他点击它,被重定向到贝宝,支付,被重定向回我的网站。在后台,我设置了 paypal 的 IPN 功能并收到有关此交易及其详细信息的通知。现在 - 我如何将此购买与我的用户联系起来?我怎么知道 xyz@abc.com 付款了。

注意:我没有使用 autoreturn + PDT 方法,因为它的基本缺陷 - 如果用户在付款后关闭浏览器但在返回到 autoreturn 页面之前,我的付款后逻辑永远不会运行。使用 IPN 可以保证后付款逻辑的运行,但我如何将付款与我网站上发起并完成付款的用户名相关联?

【问题讨论】:

【参考方案1】:

对于您的用户付款,您创建一个唯一的 ID,您发送该 ID 用于付款,然后您可以在 IPN 上取回它。

用于将其放入 PayPal 的代码:"invoice"

代码如下: https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_html_Appx_websitestandard_htmlvariables

请看表 4。

发票 -> 您可以使用传递变量来标识此次购买的发票编号。

这是 IPN 的代码https://www.paypal.com/us/cgi-bin/webscr?cmd=p/pdn/ipn-codesamples-pop-outside

if (strResponse == "VERIFIED")...您可以获取发票...只需阅读Request.Form["invoice"]强>

Ps 您可以同时使用 PDT 和 IPN,并且可以合并两者的结果。

【讨论】:

“发送付款,然后您在 IPN 上取回”...具体如何?你能给我一个例子吗? @SaM 我已经更新了我的答案,在您发送给您的数据上,在您发送的“发票”字段中放置一个您与用户连接的唯一 ID,然后您将其取回您从 IPN(或 PDT)获得的数据。【参考方案2】:

您需要设置 ASP.NET 配置文件以注册订阅者。这允许您在通过 IPN 验证后将每个用户的额外详细信息存储在数据库中。在将详细信息发送到 PayPal 之前,您可以创建一个 GUID 以将订单与注册用户相关联。

如果您使用的是 ASP.NET 网站项目模板,则您可以使用开箱即用的配置文件。如果您使用的是 ASP.NET Web 应用程序项目模板,则可以使用 Web Profile Builder 来设置配置文件:

http://weblogs.asp.net/joewrobel/archive/2008/02/03/web-profile-builder-for-web-application-projects.aspx

这是另一种很酷的方法:

http://leedumond.com/blog/asp-net-profiles-in-web-application-projects/

要将付款与您网站上的用户名相关联,生命周期如下:

1) 使用PayPal Subscriptions 处理初始免费期:-)

2) 用户在您的网站上订阅并被定向到 PayPal 网站

3) 你的 IPN 类与 PayPal 握手并获取 PayPal 返回的值

4) 您的 IPN 类会更新您的应用程序数据库并生成一封电子邮件给订阅者,其中包含返回 URL 以在您的网站上注册

5) 您的 IPN 类生成一封包含订阅数据的电子邮件(备份)给商家

6) 订阅者在您的网站上创建了一个用户帐户,并且您设置了任何要存储在其个人资料中的额外会员信息

protected void Createuserwizard1_CreatingUser(object sender, EventArgs e)

    WebProfile p = WebProfile.GetProfile(CreateUserWizard1.UserName, true);
    p.Initialize(CreateUserWizard1.UserName, true);

    p.subscriberID = ViewState["SubscriberID"].ToString();
    p.subscriberExpireDate = ViewState["ExpireDate"].ToString();

    p.Save();
 

一些陷阱:

不要使用来自 PayPal 的返回 URL

Do not mix IPN and PDT。只需 IPN 即可

创建配置文件时不要忘记 Save() 方法:-S

【讨论】:

以上是关于Paypal + ASP .NET Web 应用程序集成的基本工作流程问题的主要内容,如果未能解决你的问题,请参考以下文章

沙盒测试第二次支付失败 Paypal 集成 asp.net mvc

ASP.NET MVC C# PayPal Rest API - UNAUTHORIZED_PAYMENT

ASP.NET MVC 创建 paypal webhook

等待 Paypal 付款通知 ASP.NET

为啥 Azure Web 角色上的 IIS 需要如此频繁地重新编译 ASP.NET 应用程序?

如何在 ASP.NET Core 中获取 Web 根路径和内容根路径?