[英]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后,您可以:
輪詢GetAuthorizationDetails-這將返回授權詳細信息,其中將包含授權的“狀態”。 當狀態為“打開”時,您可以進行Capture API調用,並傳遞授權ID。
等待即時付款通知 (IPN)。 如果您具有IPN處理程序,則可以按照步驟1中的說明進行監視並進行捕獲API調用。IPN通常在60秒內發送,並且將具有最終處理狀態(“打開”或“已拒絕”)。
您不應添加任意暫停。 進行捕獲之前,您應始終檢查授權狀態。 即使付款狀態已完成,您仍然需要檢查狀態。
免責聲明:
我不執行定期付款,僅執行簡單的付款-盡管只是閱讀文檔,但看起來相似或至少有一個同步選項 。
因為它符合我的要求,所以我選擇同步過程。 本質上,將其視為“支付網關”-給我結果“現在”,我將處理任何結果。
此外, AUTH
和CAPTURE
一步-再次基於一個人的操作要求。
這兩個相關的項目是:
CaptureNow=true
TransactionTimeout=0
零值總是返回同步打開或拒絕
您將(同步)獲得:
AuthorizeResult.AuthorizationDetails
將具有
AmazonAuthorizationId
, AuthorizationAmount
等 AuthorizeResult.AuthorizationDetails.IdList
null
AuthorizeResult.AuthorizationDetails.IdList.member
我只看到它包含1個項目( CaptureId
) 然后,您可以使用CaptureId調用GetCaptureDetails
,並在解析GetCaptureDetailsResponse
之后執行GetCaptureDetailsResponse
同樣,以上內容基於Payments API流程(不是周期性的 Payments / Billing Agreement),因此,我希望它至少可以幫助/為您提供測試同步選項的途徑/想法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.