簡體   English   中英

與亞馬遜進行異步付款

[英]Pay with Amazon behaving async

我已將Pay與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.收到運行時異常System.NullReferenceException: Object reference not set to an instance of an object. 關於以下if語句。

對我來說,這意味着我應該能夠等待捕獲方法。

還要注意,就像C#示例一樣, capture(...)方法正在調用CaptureAction(...)方法。

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

我怎么能等待capture電話嗎? 我是否忘記傳遞參數來指示它應立即執行操作?

經過一些試驗,似乎可以基本實現我使用斷點手動執行的等待的功能是功能CheckAuthorizationStatus() ,該功能也在文檔隨附的C#示例中。

因此,固定代碼只需在調用capture()方法之前添加CheckAuthorizationStatus()即可。 CheckAuthorizationStatus()顯然一直循環到授權狀態​​更改為止。 在我看來,這似乎有些k蹺,但據我所知,這似乎是如何使用“使用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";
 }

使用異步模式時,通常將依賴於幾種處理方式。 AuthorizeOnBillingAgreement的結果將返回一個Amazon授權ID(例如P01-1234567-1234567-A000001)。 獲得授權ID后,您可以:

  1. 輪詢GetAuthorizationDetails-這將返回授權詳細信息,其中將包含授權的“狀態”。 當狀態為“打開”時,您可以進行Capture API調用,並傳遞授權ID。

  2. 等待即時付款通知 (IPN)。 如果您具有IPN處理程序,則可以按照步驟1中的說明進行監視並進行捕獲API調用。IPN通常在60秒內發送,並且將具有最終處理狀態(“打開”或“已拒絕”)。

您不應添加任意暫停。 進行捕獲之前,您應始終檢查授權狀態。 即使付款狀態已完成,您仍然需要檢查狀態。

免責聲明:

執行定期付款,僅執行簡單的付款-盡管只是閱讀文檔,但看起來相似或至少有一個同步選項

因為它符合我的要求,所以我選擇同步過程。 本質上,將其視為“支付網關”-給我結果“現在”,我將處理任何結果。

此外, AUTHCAPTURE一步-再次基於一個人的操作要求。

這兩個相關的項目是:

  • CaptureNow=true
  • TransactionTimeout=0

    零值總是返回同步打開或拒絕

您將(同步)獲得:

  • AuthorizeResult.AuthorizationDetails將具有
    • AmazonAuthorizationIdAuthorizationAmount
  • AuthorizeResult.AuthorizationDetails.IdList
    • 失敗時為null
    • 否則將包含捕獲ID(如果捕獲成功)
      AuthorizeResult.AuthorizationDetails.IdList.member我只看到它包含1個項目( CaptureId

然后,您可以使用CaptureId調用GetCaptureDetails ,並在解析GetCaptureDetailsResponse之后執行GetCaptureDetailsResponse

同樣,以上內容基於Payments API流程(不是周期性的 Payments / Billing Agreement),因此,我希望它至少可以幫助/為您提供測試同步選項的途徑/想法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM