【发布时间】:2017-02-24 06:20:40
【问题描述】:
当前项目:
- ASP.NET 4.5.2
- MVC 5
- 贝宝 API
我正在使用this example 为自己构建一个 PayPal 交易(是的,我的代码几乎相同),因为我不知道有任何其他方法可以返回标题中的三个值。
我的主要问题是,我使用的示例比我用于更旧的 Web 窗体应用程序的示例更简洁和紧凑,因此,我不确定在哪里甚至如何获取这三个我需要的值。
我最初的想法是在 ACK 之后立即这样做,实际上我能够获得 CorrelationId 以及 TimeStamp,但因为这是在用户被运送到 PayPal 之前站点(在这种情况下为沙箱 - 请参阅 if 中包含的 return new PayPalRedirect),TransactionId 为空白。在此示例中,PayPal 将用户显式重定向到 Success 页面,而不返回首先将用户发送到 PayPal 的操作,除了Token 和之外,我在 URL 中根本看不到任何 GET 值PayerId,更不用说可以为我提供 TransactionId 的了。
建议?
我还看过以下示例:
-
For ASP.NET Core,不确定如何适应我当前的项目,特别是由于
appsettings.json,但它看起来做得很好。我真的很喜欢这些值在列表中的汇总方式。 -
For MVC 4,但我找不到
ACK用于确定success或successwithwarning的位置,所以我无法理解。
我还发现 PayPal 的内容就像试图从消防水管中猛烈地喝水一样——不仅内容已经过时了(Web Forms 代码,FTW!),而且还有很多不同的示例我会花几天时间来确定哪个最适合使用。
任何帮助将不胜感激。
编辑:我最初尝试修改链接代码有这部分:
values = Submit(values);
var ack = values["ACK"].ToLower();
if(ack == "success" || ack == "successwithwarning") {
using(_db = new ApplicationDbContext()) {
var updateOrder = await _db.Orders.FirstOrDefaultAsync(x => x.OrderId == order.OrderId);
if(updateOrder != null) {
updateOrder.OrderProcessed = false;
updateOrder.PayPalCorrelationId = values["CORRELATIONID"];
updateOrder.PayPalTransactionId = values["TRANSACTIONID"];
updateOrder.PayPalTimeStamp = values["TIMESTAMP"];
updateOrder.IPAddress = HttpContext.Current.Request.UserHostAddress;
_db.Entry(updateOrder).State = EntityState.Modified;
await _db.SaveChangesAsync();
}
}
return new PayPalRedirect {
Token = values["TOKEN"],
Url = $"https://{PayPalSettings.CgiDomain}/cgi-bin/webscr?cmd=_express-checkout&token={values["TOKEN"]}"
};
}
using() 内和包括在内的所有内容都是我添加的内容。正如我提到的,CorrelationId 和TimeStamp 可以通过,但我还没有成功获得TransactionId。
编辑 2:
更多问题——通过沙盒网站“成功”的交易(ReturnUrl 被调用)没有正确反映在我的促进者和买家账户上,即使我直接从买家的 PayPal 账户(不是使用信用卡)。我知道我应该通过整个开发帐户(帐户 -> 个人资料 -> 余额或帐户 -> 通知)或通过沙盒前端中的买方帐户查看买方帐户中的交易。然而 - 多个交易将我返回到 ReturnUrl 路径,但两者都没有交易。
编辑 3:
好吧,这真的,真的很奇怪。我用细齿梳检查了所有设置,并故意引入错误以查看应该在哪里出错。事实证明,整个过程进行得很顺利——除了我的通知中没有显示任何内容,并且我的不同账户(促进者和买方)之间没有任何金额移动。就像我所有的交易都进入了/dev/null,但是这个过程是成功的。
编辑 4:提示!
在买家接受交易的沙盒中,有一个小注释,“您将能够在完成交易之前查看交易”或类似的内容 - 表明没有出现额外的页面,并且用户被毫不客气地转回到成功页面。为什么是成功页面?没有线索。但它正在发生。
【问题讨论】:
标签: asp.net asp.net-mvc paypal asp.net-mvc-5