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、関数は成功を返します。ブレークポイントがない場合、次のifステートメントSystem.NullReferenceException: Object reference not set to an instance of an object.に関して実行時例外が発生します。

私にとって、これはキャプチャ メソッドを待機できる必要があることを意味します。

また、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電話を待つことができますか? 操作をすぐに実行する必要があることを示すパラメーターを渡すのを忘れていませんか?

4

3 に答える 3

2

いくつかの実験の後、ブレークポイントを使用して手動で実行していた待機を本質的に達成する関数は functionCheckAuthorizationStatus()であり、ドキュメントで提供される C# サンプルにもあるようです。

したがって、修正されたコードは、メソッドCheckAuthorizationStatus()を呼び出す前に追加するだけです。明らかに、承認の状態が変わるまでループします。これは私にはやや不器用に思えますが、私が知る限り、Pay with Amazon API の使用方法のように思えます。以下のコードを修正しました。capture()CheckAuthorizationStatus()

//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

免責事項:

私は定期的な支払いを実装しておらず、単純な支払いのみを実装しています-ドキュメントを読んだだけでは似ているように見えるか、少なくとも同期オプションがあります.

私の要件を満たしているため、同期プロセスを選択します。本質的には「支払いゲートウェイ」のように扱います。「今」結果を出してください。どんな結果でも対処します。

さらに、AUTH1CAPTUREつのステップで、これも運用上の要件に基づいています。

関連する 2 つのアイテムは次のとおりです。

  • CaptureNow=true
  • TransactionTimeout=0

    ゼロの値は、常に同期 Open または Declined を返します。

あなたは(同期的に)得るでしょう:

  • AuthorizeResult.AuthorizationDetails持つだろう
    • AmazonAuthorizationIdAuthorizationAmount、など
  • AuthorizeResult.AuthorizationDetails.IdList
    • null失敗時
    • それ以外の場合は、キャプチャ ID が含まれます (キャプチャが成功した場合) -
      AuthorizeResult.AuthorizationDetails.IdList.memberこれには 1 つのアイテム (CaptureId

その後、CaptureId を使用して呼び出しGetCaptureDetails、解析後に必要なことを実行できます。GetCaptureDetailsResponse

繰り返しますが、上記はPayments APIフロー (定期的な支払い/請求契約ではありません) に基づいているため、少なくとも同期オプションをテストするための手段/アイデアを提供/提供することを願っています.

于 2015-11-22T01:16:10.437 に答える
1

非同期モードを使用する場合、通常はいくつかの方法で処理します。AuthorizeOnBillingAgreementの結果は、Amazon 認証 ID (例: P01-1234567-1234567-A000001) を返します。認証 ID を取得したら、次のことができます。

  1. ポーリングGetAuthorizationDetails - これは、承認の「状態」を含む承認の詳細を返します。状態が「オープン」の場合、認証 ID を渡すCapture API 呼び出しを行うことができます。

  2. 即時支払い通知(IPN)を待ちます。IPN ハンドラーがある場合は、それを監視し、ステップ 1 で説明されているようにキャプチャ API 呼び出しを行うことができます。IPN は通常 60 秒以内に送信され、最終的な処理ステータス (オープンまたは拒否) になります。

任意の一時停止を追加しないでください。キャプチャを行う前に、常に承認の状態を確認する必要があります。支払いステータスが完了していても、ステータスを確認する必要があります。

于 2015-11-18T19:41:39.297 に答える