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

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

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

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

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

【问题讨论】:

    标签: asp.net paypal


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2017-07-02
      • 1970-01-01
      • 2013-08-20
      • 1970-01-01
      • 2021-12-07
      • 2014-11-20
      • 2011-07-25
      • 2014-08-02
      • 2010-12-09
      相关资源
      最近更新 更多