Paypal 处理 - 需要获取 Transaction Id、Correlation Id 和 TimeStamp
Posted
技术标签:
【中文标题】Paypal 处理 - 需要获取 Transaction Id、Correlation Id 和 TimeStamp【英文标题】:Paypal Processing - Need to grab TransactionId, CorrelationId and TimeStamp 【发布时间】: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:提示!
在买家接受交易的沙盒中,有一个小注释,“您将能够在完成交易之前查看交易”或类似的内容 - 表明没有出现额外的页面,并且用户被毫不客气地转回到成功页面。为什么是成功页面?没有线索。但它正在发生。
【问题讨论】:
【参考方案1】:听起来你只是在做这个过程的第一部分。
Express Checkout 包含 3 个 API 调用:
SetExpressCheckout GetExpressCheckoutDetails DoExpressCheckoutPaymentSEC 生成一个令牌,然后您重定向到用户登录的 PayPal,并在同意付款之前查看交易。
然后它们会被发送到您的 SEC 请求中包含的 ReturnURL,您将在此处调用 GECD 以获取自他们登录以来现在可用的所有买家详细信息。
使用这些数据,您可以完成最终的 DECP 请求,这就是完成程序的内容。在此最终通话成功完成之前,不会实际处理任何款项。
【讨论】:
是的,周末也想通了。做 PayPal 的方式有很多,所以很少有像样的例子。我把它摆平了,但我会把你的答案标记为正确的,因为你实际上花时间回答,并且把问题钉在了头上。我将发布完整的解决方案(针对处于相同位置的其他可怜的灵魂)并链接到它。以上是关于Paypal 处理 - 需要获取 Transaction Id、Correlation Id 和 TimeStamp的主要内容,如果未能解决你的问题,请参考以下文章