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 用于确定 successsuccesswithwarning 的位置,所以我无法理解。

我还发现 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() 内和包括在内的所有内容都是我添加的内容。正如我提到的,CorrelationIdTimeStamp 可以通过,但我还没有成功获得TransactionId


编辑 2:

更多问题——通过沙盒网站“成功”的交易(ReturnUrl 被调用)没有正确反映在我的促进者和买家账户上,即使我直接从买家的 PayPal 账户(不是使用信用卡)。我知道我应该通过整个开发帐户(帐户 -> 个人资料 -> 余额或帐户 -> 通知)或通过沙盒前端中的买方帐户查看买方帐户中的交易。然而 - 多个交易将我返回到 ReturnUrl 路径,但两者都没有交易。


编辑 3:

好吧,这真的,真的很奇怪。我用细齿梳检查了所有设置,并故意引入错误以查看应该在哪里出错。事实证明,整个过程进行得很顺利——除了我的通知中没有显示任何内容,并且我的不同账户(促进者和买方)之间没有任何金额移动。就像我所有的交易都进入了/dev/null,但是这个过程是成功的。


编辑 4:提示!

在买家接受交易的沙盒中,有一个小注释,“您将能够在完成交易之前查看交易”或类似的内容 - 表明没有出现额外的页面,并且用户被毫不客气地转回到成功页面。为什么是成功页面?没有线索。但它正在发生。

【问题讨论】:

【参考方案1】:

听起来你只是在做这个过程的第一部分。

Express Checkout 包含 3 个 API 调用:

SetExpressCheckout GetExpressCheckoutDetails DoExpressCheckoutPayment

SEC 生成一个令牌,然后您重定向到用户登录的 PayPal,并在同意付款之前查看交易。

然后它们会被发送到您的 SEC 请求中包含的 ReturnURL,您将在此处调用 GECD 以获取自他们登录以来现在可用的所有买家详细信息。

使用这些数据,您可以完成最终的 DECP 请求,这就是完成程序的内容。在此最终通话成功完成之前,不会实际处理任何款项。

【讨论】:

是的,周末也想通了。做 PayPal 的方式有很多,所以很少有像样的例子。我把它摆平了,但我会把你的答案标记为正确的,因为你实际上花时间回答,并且把问题钉在了头上。我将发布完整的解决方案(针对处于相同位置的其他可怜的灵魂)并链接到它。

以上是关于Paypal 处理 - 需要获取 Transaction Id、Correlation Id 和 TimeStamp的主要内容,如果未能解决你的问题,请参考以下文章

如何获取令牌以根据需要向授权的 PayPal 账户收费?

从 Paypal NVP 请求中获取送货地址

通过 PHP 的 PayPal API TransactionSearch

java处理paypal支付

java处理paypal支付

如何使用 php 在 PayPal 订阅中获取付款详细信息?