4

私は paypalplatform.php をダウンロードしましたが、どこから来たのか思い出せませんが、支払いの状態を確認できる素敵な小さな機能を提供してくれます:

CallPaymentDetails( $payKey, $transactionId, $trackingId );

statusこれにより、などの多くの有用なデータが返されますpaymentInfoList.paymentInfo(0).transactionStatus

ifを呼び出したときに返されるすべての値を説明するために、多くのステートメントを記述できることはわかっていますがCallPaymentDetails、これは非常にエラーが発生しやすいと感じたり、シナリオを見落としたりする可能性があります。

だから私の質問は、すべての値を考慮に入れるサンプルテンプレートが存在するか、つまり、すべてのシナリオを処理する車輪を再発明する必要がないかということです。

たとえば、現時点では次のようなものがあります。

$resArray = CallPaymentDetails( $payKey, $transactionId, $trackingId );

if(strtoupper($resArray["responseEnvelope.ack"]) == "SUCCESS") {

    if(strtoupper($resArray["status"]) == "CREATED") {

        // do something

    } elseif(strtoupper($resArray["status"]) == "EXPIRED") {

        // do something

    } elseif(strtoupper($resArray["status"]) == "COMPLETED") {

        // do something

        if(strtoupper($resArray["paymentInfoList.paymentInfo(0).transactionStatus"]) == "PENDING") {

            // do something

        } elseif(strtoupper($resArray["paymentInfoList.paymentInfo(0).transactionStatus"]) == "FAILED") {

            // do something

        } else {

            // what other value could be returned

        }

    } else {

        // what other value could be returned

    }

} else {

    // what other value could be returned

}

すべての変数を実行しようとすると、永遠にすべてのシナリオをキャプチャしようとする可能性があります。そのため、if ステートメントを介してすべてのシナリオに対応するテンプレートが既に存在するかどうか疑問に思っていました。

4

1 に答える 1

3

まず第一に、インターネット上のファイルを のように取得しないでくださいpaypalplatform.php

Paypal は Githubを多用して、すべての異なる言語のすべての API を共有しています。次のようなリポジトリを確認することをお勧めします。

最後の 2 つは興味深いものです。どちらも、ケースに役立つコード サンプルを提供します。

コードサンプル-php

言及した関数への単純な呼び出しを示し、1 つの variable を使用して見つけることができるすべての戻りメッセージを説明します$response->status。コメントは、この変数が持つことができるすべてのケースを明らかにします:

if ($response->responseEnvelope->ack == "Success")
{

  // The status of the payment. Possible values are:
  //
  // * CREATED - The payment request was received; funds will be
  // transferred once the payment is approved
  // * COMPLETED - The payment was successful
  // * INCOMPLETE - Some transfers succeeded and some failed for a
  // parallel payment or, for a delayed chained payment, secondary
  // receivers have not been paid
  // * ERROR - The payment failed and all attempted transfers failed
  // or all completed transfers were successfully reversed
  // * REVERSALERROR - One or more transfers failed when attempting
  // to reverse a payment
  // * PROCESSING - The payment is in progress
  // * PENDING - The payment is awaiting processing
  $logger->log("Payment Status : ".$response->status);
}

アダプティブペイメント-sdk-php

関数の使用方法に関するより詳細な例を示します。HTMLフォームから値を取得するため、テストが容易です。前の例と同様に、API によって返される同じ状態を確認できます。

$ack = strtoupper($response->responseEnvelope->ack);
if($ack != "SUCCESS"){
  echo "<b>Error </b>";
  echo "<pre>";
  print_r($response);
  echo "</pre>";
} else {
/*
 *       The status of the payment. Possible values are:

       * CREATED - The payment request was received; funds will be
       transferred once the payment is approved
       * COMPLETED - The payment was successful
       * INCOMPLETE - Some transfers succeeded and some failed for a
       parallel payment or, for a delayed chained payment, secondary
       receivers have not been paid
       * ERROR - The payment failed and all attempted transfers failed
       or all completed transfers were successfully reversed
       * REVERSALERROR - One or more transfers failed when attempting
       to reverse a payment
       * PROCESSING - The payment is in progress
       * PENDING - The payment is awaiting processing
 */
  echo "<table>";
  echo "<tr><td>Ack :</td><td><div id='Ack'>$ack</div> </td></tr>";
  echo "<tr><td>PayKey :</td><td><div id='PayKey'>$response->payKey</div> </td></tr>";
  echo "<tr><td>Status :</td><td><div id='Status'>$response->status</div> </td></tr>";
  echo "</table>";
  echo "<pre>";
  print_r($response);
  echo "</pre>";
}

どちらの場合も、応答状態を処理するために必要なのは単純なスイッチ/ケースだけです。そんな感じ:

switch ($status)
{
  case 'CREATED':
    // handle CREATED state
    break;
  case 'COMPLETED':
    // handle COMPLETED state
    break;
  case 'INCOMPLETE':
    // handle INCOMPLETE state
    break;
  case 'ERROR':
    // handle ERROR state
    break;
  case 'REVERSALERROR':
    // handle REVERSALERROR state
    break;
  case 'PROCESSING':
    // handle PROCESSING state
    break;
  case 'PENDING':
    // handle PENDING state
    break;

  default:
    throw new Exception(sprintf("State '%s' isn't handle.", $status));
}
于 2013-09-30T18:27:34.330 に答える