2

我已将 Pay with Amazon 与我的 Web 应用程序集成,但我确定只有在我逐步完成代码调试时才能捕获资金,并且如果我没有断点则不会发生。对我来说,这表明暂停是必要的。我正在使用定期付款。代码的相关部分如下:

...
//make checkout object
AmazonAutomaticSimpleCheckout asc = new AmazonAutomaticSimpleCheckout(billingAgreeementId);

//capture
CaptureResponse cr = asc.Capture(authId, amount, 1);

//check if capture was successful
if (cr.CaptureResult.CaptureDetails.CaptureStatus.State == PaymentStatus.COMPLETED)
{
     ...
     //give the user the things they paid for in the database
     ...

     return "success";
}
...

因此,如果我在 下的捕获行有一个断点//capture,则该函数返回成功。如果我没有断点,我会收到System.NullReferenceException: Object reference not set to an instance of an object.关于以下if语句的运行时异常。

对我来说,这意味着我应该能够等待捕获方法。

另请注意,该capture(...)方法正在调用该CaptureAction(...)方法,就像 C# 示例一样。

//Invoke the Capture method
public CaptureResponse Capture(string authId, string captureAmount, int indicator)
{
    return CaptureAction(propertiesCollection, service, authId, captureAmount, billingAgreementId, indicator, null, null);
}

我如何等待capture电话?我是否忘记传递参数以指示它应该立即执行操作?

4

3 回答 3

2

似乎经过一些实验,一个基本上可以实现我使用断点手动执行的等待的函数是 function CheckAuthorizationStatus(),它也在文档提供的 C# 示例中。

所以固定代码只是CheckAuthorizationStatus()在调用capture()方法之前添加。CheckAuthorizationStatus()显然循环直到授权状态​​发生变化。这对我来说似乎有点笨拙,但据我所知,这似乎是使用 Amazon API 支付的方式。更正代码如下:

//make checkout object
AmazonAutomaticSimpleCheckout asc = new AmazonAutomaticSimpleCheckout(billingAgreeementId);

//capture
CaptureResponse cr;

GetAuthorizationDetailsResponse gadr = asc.CheckAuthorizationStatus(authId);

cr = asc.Capture(authId, amount, 1);

//gadr = asc.CheckAuthorizationStatus(authId);

//check if capture was succeddful
if (cr.CaptureResult.CaptureDetails.CaptureStatus.State == PaymentStatus.COMPLETED)
{
     ...

     return "success";
 }
于 2015-11-16T22:44:19.800 回答
1

使用异步模式时,您通常会依赖几种处理方式。AuthorizeOnBillingAgreement的结果将返回一个亚马逊授权 ID(例如 P01-1234567-1234567-A000001)。获得授权 ID 后,您可以:

  1. Poll GetAuthorizationDetails - 这将返回包含授权“状态”的授权详细信息。当状态为“打开”时,您可以进行Capture API 调用,并传入授权 ID。

  2. 等待即时付款通知(IPN)。如果您有 IPN 处理程序,您可以监视它并按照步骤 1 中的说明进行捕获 API 调用。IPN 通常在 60 秒内发送,它将具有最终处理状态(打开或拒绝)。

您不应该添加任意暂停。在进行捕获之前,您应该始终检查授权状态。即使付款状态已完成,您仍然需要检查状态。

于 2015-11-18T19:41:39.297 回答
1

免责声明:

实施定期付款,只是简单的付款 - 尽管只是阅读文档,它看起来很相似,或者至少有一个同步选项

因为它符合我的要求,所以我选择了同步过程。本质上把它当作一个“支付网关”——给我“现在”的结果,我会处理任何结果。

此外,AUTHCAPTURE一个步骤中 - 再次,这是基于一个人的操作要求。

2个相关项目是:

  • CaptureNow=true
  • TransactionTimeout=0

    零值始终返回同步打开或拒绝

你会得到(同步):

  • AuthorizeResult.AuthorizationDetails这将有
    • AmazonAuthorizationId, AuthorizationAmount, 等
  • AuthorizeResult.AuthorizationDetails.IdList
    • null失败时
    • 否则它将包含捕获 ID(如果捕获成功)
      AuthorizeResult.AuthorizationDetails.IdList.member- 我只看到它包含 1 个项目(的CaptureId

然后,您可以使用 CaptureId 调用GetCaptureDetails并执行解析后需要执行的操作GetCaptureDetailsResponse

同样,以上基于支付 API流程(不是定期支付/计费协议),所以我希望它至少可以帮助/给您一个测试同步选项的途径/想法。

于 2015-11-22T01:16:10.437 回答