当前项目:
我正在使用this example为自己构建一个PayPal事务(是的,我的代码几乎完全相同),因为我不知道任何其他方法会返回标题中的三个值。
我的主要问题是,我使用的示例比我用于更旧的Web窗体应用程序的示例更简洁和紧凑,因此,我不确定在哪里甚至如何抓住这三个我需要的价值观。
我最初的想法是在ACK之后立即这样做,事实上我能够获得CorrelationId以及TimeStamp,但是因为这是之前给用户被推送到PayPal的站点(在这种情况下为沙箱 - 请参阅return new PayPalRedirect
中包含的if
),TransactionId为空。在此示例中,PayPal显式地将用户重定向到Success页面,而不返回到首先将用户发送到PayPal的Action,除了{{1}之外,我在URL中看不到任何GET值。和Token
,更不用说可以为我提供TransactionId。
建议?
我还看了下面的例子:
PayerId
,但看起来做得很好。我真的很喜欢这些值是如何在列表中汇总的。appsettings.json
用于确定ACK
或success
的位置,因此我无法理解这一点。我还发现PayPal的内容就像是试图从消防水管中彻底喝水 - 不仅内容已经过时了(Web Forms代码,FTW!),而且还有很多不同的例子我需要几天的时间来确定哪一个最适合使用。
非常感谢任何协助。
编辑:我最初尝试修改链接代码的部分是:
successwithwarning
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
。
编辑2:
更多问题 - 通过沙箱网站“成功”的交易(ReturnUrl被调用)在我的主持人和买方账户上没有正确反映,即使我直接从买方的PayPal账户付款(不是使用信用卡)。我知道我应该通过整个开发帐户(帐户 - >个人资料 - >余额或帐户 - >通知)或通过沙箱前端的买方帐户查看买方帐户中的交易。然而 - 多个事务将我返回到ReturnUrl路径,但两个事务中都没有事务。
编辑3:
好的,这真的非常奇怪。我已经使用精细齿梳梳理了所有设置,故意引入错误以查看应该废弃的地方。事实证明,整个过程都是顺利进行的 - 除了我的通知中没有显示任何内容,并且我的不同账户(主持人和买方)之间没有任何金额。这就像我的所有交易都进入TransactionId
,但过程是成功的。
编辑4:提示!
在买方接受交易的沙箱中,有一个小注释,“您可以在完成交易之前查看交易”或类似内容 - 建议不会出现其他页面,并且用户被毫不客气地转回成功页面。为什么成功页面?没有线索。但它正在发生。
答案 0 :(得分:1)
听起来你只是在做这个过程的第一部分。
Express Checkout包含3个API调用:
SEC生成令牌,然后您重定向到PayPal,用户在同意付款之前登录并查看交易。
然后将它们发送到您的SEC请求中包含的ReturnURL,这是您致电GECD以获取自登录以来现在可用的所有买方详细信息的地方。
使用该数据,您可以完成最终的DECP请求,这是最终确定的过程。在最终通话成功完成之前,实际上并没有处理任何款项。