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