使用 PayPal 定期付款订阅和 ASP.Net 会员的障碍?
Posted
技术标签:
【中文标题】使用 PayPal 定期付款订阅和 ASP.Net 会员的障碍?【英文标题】:Roadblocks with using PayPal Recurring Payment Subscription with ASP.Net Membership? 【发布时间】:2016-07-07 07:35:18 【问题描述】:我正在使用 ASP.Net Membership Provider 登录本网站的高级内容。内容不是下载,而是信息和折扣等网页。这部分已经完成。我们希望他们也有一个 PayPal 订阅年度付款来查看高级内容。我希望 ASP Membership 和 PayPal Subscription 尽可能地协同工作,但至少我认为他们必须在付款之前创建一个 MemberId。然后我会将该 MemberId 发送到 PayPal 以将两者关联起来。
我想我可以这样做:
在界面中设置“自动返回”,以便在付款时重定向到返回URL。
将“返回 URL”查询字符串设置为 MemberId。这需要不使用预编译的“已保存”按钮。我必须使用名称值对在代码隐藏中设置它,将“NVP”设置为 PayPal。我希望只是粘贴愚蠢的按钮。
但是,按钮制造商中有那些“高级变量”。问题是它们被编译到“保存”按钮中,所以我不能为每个人更改它们。但也许那个参数可以与编译参数分开?这比破解返回 URL 更好吗? “高级变量”对任何事情都有好处吗?
如果我输入正确的代码(可能是 rm=2),有关交易的所有详细信息都将发布到返回 URL。 (对吧?)那我就可以录了。
不过,据说此过程不可靠,PayPal 建议使用他们拥有的辅助系统“IPN”。 PayPal 将交易详情发送给我。我将它们发回 http 200 代码。然后我按照收到的顺序把它寄回给他们。然后他们给我发了http 200。然后我们都知道这很好。对我来说,这听起来像是几个小时的研究,但如果你已经做过一次,这听起来像是复制和粘贴。我讨厌重新发明***。是否有此 IPN 握手/舞蹈的 .Net 示例?
另外,如果我做 IPN 的事情,也许我不需要自动返回。也许我将 MemberId 添加到“通知”URL 而不是“返回”URL。那么paypal就可以处理确认页面、email等了,这样更好吗?
假设我们使用 MemberId 支付订阅费用并记录,每个用户会话至少一次,在他们登录后,我必须检查他们是否已经支付了他们的 PayPal 订阅费用以及它是否是最新的。 “GetRecurringPaymentsProfileDetails”执行此操作,但它是一个 API 操作。这是有道理的,但我希望避免学习他们的 REST API。 (有“NVP”版本吗?)
REST API OAUTH 令牌每隔几分钟就会过期,但它告诉我们获取令牌的唯一方法是使用“Bash”来“cURL”一些 Linux 命令。同样,这似乎是一种只需要编写一次的东西。这是否已经作为示例代码存在于某处?
(我不想使用 API 进行订阅,因为我不希望信用卡号码进入我们的网站。责任太多。这就是我想要 PayPal 的原因。)
这甚至会起作用吗?我知道 PayPal 有 18 种方法可以做任何事情,而且它们都相互排斥,我只是觉得我正在创造一种拼凑不相关的想法,以欺骗自己相信隧道尽头有光。我已经研究和试验了 10 个小时左右。我真的以为,进去,我只是在粘贴一个愚蠢的按钮。
【问题讨论】:
【参考方案1】:如果您只想“复制愚蠢的按钮”,那么您将不得不遵守 Payments Standard,然后您的能力就会受到限制。例如,您将无法将 GetRecurringPaymentsProfileDetails 用于标准订阅。
相反,您需要使用 Express Checkout 和/或 Payments Pro。这些确实有一个 NVP API 可用,并且还有一个 SOAP/XML 版本。可以在此处找到有关这些的详细信息:https://developer.paypal.com/docs/classic/api/
具体来说,对于 Express Checkout,您需要 SetExpressCheckout、GetExpressCheckoutDetails、DoExpressCheckoutPayment 和 CreateRecurringPaymentsProfile。其中一些调用是可选的,具体取决于您使用结帐流程配置的准确程度。
对于 Payments Pro,您将使用 DoDirectPayment / CreateRecurringPaymentsProfile 或 PayFlow,具体取决于他们为您设置的版本。
无论如何,IPN 绝对是进行交易后处理的方式。
.NET IPN 示例 - https://github.com/paypal/ipn-code-samples/blob/master/paypal_ipn.asp
【讨论】:
谢谢安德鲁!这非常有帮助。 我的新理解是: 1) 我会做一个普通的按钮,但它不会被预编译。我会让页面 POST 回到自身,然后在代码隐藏中我会将所有 NVP 放在一起。通知 URL 将在查询字符串中包含用户的 MemberID。 2) 他们将通过 PayPal 付款。 3) PayPal 将在通知 URL 处进行 IPN。我会得到 MemberID 和他们的付款是否有效的消息。 4) 他们将点击最终 PayPal 页面上的链接返回我的网站。 5) 那时,无论他们何时登录,我都会使用 Payments Pro 的 NVP api 检查他们的付款是否是最新的。 我刚刚意识到定期付款和订阅之间存在差异。我拥有的按钮是订阅按钮。这对我来说很有意义,因为他们购买了一年访问该网站高级部分的权限。但是,这意味着“GetRecurringPaymentsProfileDetails”可能是错误的命令,因为它用于定期付款并且我需要订阅。我可以使用什么命令来判断他们的订阅仍然有效? 我找到了***.com/questions/9359442/…,这对我的最新评论很有帮助。以上是关于使用 PayPal 定期付款订阅和 ASP.Net 会员的障碍?的主要内容,如果未能解决你的问题,请参考以下文章