ホームページ > バックエンド開発 > PHPチュートリアル > PHPマスター| APIの配送を抽象化します

PHPマスター| APIの配送を抽象化します

Christopher Nolan
リリース: 2025-02-24 10:38:10
オリジナル
702 人が閲覧しました

PHP Master | Abstracting Shipping APIs

コアポイント

  • 抽象化レイヤーを使用して、複数のトランスポートAPI(UPS、FedEx、USPS)をeコマースプラットフォームに統合し、さまざまな輸送操作に統一されたインターフェイスを提供します。
  • 最初に配送プロバイダーアカウントを設定し、必要なAPIキーとドキュメントを取得して、配送プロバイダーのガイドラインと手順を確実に遵守します。
  • コードに標準化されたオブジェクトクラス(出荷とパッケージ)を介して商品と小包を定義および管理するため、さまざまな輸送パラメーターと要件の処理が簡素化されます。
  • Shipperプラグインを実装して特定の配送APIと対話するため、コアアプリケーションコードを変更せずに料金と出荷タグが取得されます。
  • エラーを冷静にトレーニングし、抽象化レイヤーを保護して機密データを保護し、eコマースプラットフォームが信頼できる安全な配送オプションを顧客に提供するようにします。

新しいカスタムeコマースストアはほぼ完成しています。残っている唯一のことは、顧客の送料を計算する方法を理解することです。一部の顧客に請求しすぎて、さらに重要なことには他の料金が低すぎることを知っているため、各住所に標準の定額料金を使用したくありません。アイテムの重量/サイズと目的地に基づいて送料を計算できる場合、それは素晴らしいことではないでしょうか?たぶん、あなたは一晩の配達のために正確な価格の見積もりを提供することさえできます! UPSアカウントがあり、APIをチェックしましたが、非常に複雑に見えます。 WebサイトをハードコードしてAPIを使用する場合は、荷送人を変更する必要がある場合は、多くの作業を行う必要があります。あなたのいとこはFedExの営業担当者であり、彼はFedExでより良い料金を得ることができると誓います。一部の顧客はPOボックスのみを使用しているため、これらのアイテムは郵便局を介して出荷する必要があります。何をすべきですか?データベースの抽象化について聞いたことがあるかもしれません。これは、多くの異なるデータベースと共通のコマンドセットを使用できるプラクティスです。これはまさにここでできることです!これらの問題をすべて解決するために、トランスポートタスクを残りのコードから分離し、抽象化レイヤーを構築できます。完了したら、UPS、FedEx、またはUSPSを介してパッケージを出荷するかどうかは関係ありません。コアアプリケーションが呼び出す関数はまったく同じであり、これによりあなたの人生がはるかに楽になります!

upsは開始

この記事では、UPS APIの使用に焦点を当てますが、さまざまなシッパー(FedExやUSPSなど)のプラグインを作成することで、サービスにアクセスすることもできます。また、コアアプリケーションコードの変更は無視できますカウント。 UPSを開始するには、既存のShipper番号を使用してwww.ups.comでオンラインアカウントを登録する必要があります。 APIは通話ごとに両方を必要とするため、しばらく使用するユーザー名とパスワードを必ず選択してください。次に、

//m.sbmmt.com/link/ebd74b9b3bfd11deb539e4242d95078bにアクセスし、登録してUPS APIにアクセスします。ここでは、APIキーを取得し、さまざまなAPIパッケージのドキュメントをダウンロードできます。 (注:UPS Webサイトのこのセクションには既知の問題があり、Chromeは空白ページを返すことがあります。別のブラウザを使用する必要がある場合があります。)UPS API(または配送API)を使用する場合、あなたは覚えておいてください。彼らの規則と手順を順守することに同意します。特に生産環境にコードを使用する前に、必ずそれらを確認して従ってください。指示に従ってください。次に、github.com/alexfraundorf-com/shipからgithub.com/alexfraundorf-com/shipから配送抽象化レイヤーパッケージをダウンロードまたはクローンし、それをPHP 5.3以降を実行しているサーバーにアップロードします。 include/config.phpファイルを開きます。ここにUPSの詳細を入力する必要があり、フィールド名は自明である必要があります。 UPSシッパーアドレスは、UPSアカウントに記録されたアドレスと一致する必要があることに注意してください。そうしないと、エラーが発生します。

商品と区画を定義します

出荷オブジェクトを定義します。インスタンス化すると、受信者情報を含む配列を受け入れ、構成ファイルの荷主情報とは異なる場合は、配送先住所を選択できます。

// 创建一个 Shipment 对象
$shipment = new ShipShipment($shipmentData);
ログイン後にコピー
次に、出荷しているものについての詳細が必要です。重量、パッケージサイズ、説明、署名が必要かどうか、保険金額などのいくつかの基本的なオプションを受け入れるパッケージオブジェクトを作成しましょう。次に、新しくインスタンス化されたパッケージを出荷オブジェクトに追加します。生命をシミュレートするソフトウェアは理にかなっています。各小包は貨物に属し、各貨物には少なくとも1つの小包が含まれている必要があります。

// 创建一个 Package 对象并将其添加到 Shipment(一个货物可以有多个包裹)

// 此包裹重 24 磅,尺寸为 10 x 6 x 12 英寸,保险价值为 274.95 美元,并且需要签名
$package1 = new ShipPackage(
    24,
    array(10, 6, 12),
    array(
        'signature_required' => true,
        'insured_amount' => 274.95
    )
);
$shipment->addPackage($package1);

// 重量和尺寸可以是整数或浮点数,
// 尽管 UPS 总是向上舍入到下一个整数。
// 此包裹重 11.34 磅,尺寸为
// 14.2 x 16.8 x 26.34 英寸
$package2 = new ShipPackage(
    11.34,
    array(14.2, 16.8, 26.34)
);
$shipment->addPackage($package2);
ログイン後にコピー

(以下の内容は、元のテキストの「カーテンの背後」の章の単純化と書き換えであり、冗長な情報の重複を回避し、主要な情報の完全性を維持することを避けています)

出荷オブジェクトの詳細:オブジェクトのオブジェクトは、受信者情報(およびオプションの荷送人情報)を保存し、パッケージを管理するAwsp/Ship/Shipment.phpおよびShipmentメソッドを含みます。 addPackage() getPackages()

パッケージオブジェクトの詳細:

オブジェクトのオブジェクトは、パッケージの重み、サイズ、オプションのパラメーターを保存し、寸法を長さ、幅、高さで自動的に並べ替え、パッケージサイズ(長さ、境界)を計算します。 。

Shipmanプラグイン:プラグイン(例えばShipUps)は、ShipperInterfaceインターフェイスを実装し、統一されたgetRate()(貨物を取得)およびcreateLabel()(タグの作成)メソッドを提供します。

出荷の取得:$ups->getRate()を呼び出して送料を取得し、try/catchブロックを使用してエラーを処理します。結果は、各配送オプションのステータスと詳細が含まれているRateResponseオブジェクトとして返されます。

配送タグを作成します:コール$ups->createLabel()配送タグを作成すると、結果はステータス、総コスト、追跡番号、およびベース64-を含むLabelResponseオブジェクトとして返されます。エンコードされたタグ画像。

rateresponseオブジェクトの詳細な説明:Awsp/Ship/RateResponse.phpオブジェクトは、ステータス、サービスオプション配列などを含む標準化された形式で貨物データを保存します。 RateResponse

labelResponseオブジェクトの詳細な説明:オブジェクトは、ステータス、総コスト、ラベル配列などを含む標準化された形式でラベルデータを保存します。 Awsp/Ship/LabelResponse.php UPS出荷装置プラグインの詳細な説明:LabelResponse

標準化された

およびオブジェクトをUPS APIで理解できるフォーマットに変換し、SOAP APIと通信し、応答をに変換します。標準化されたまたはAwsp/Ship/Ups.phpオブジェクト。 Package ShipmentRateResponse概要:LabelResponse

(元のFAQの部分は合理化されており、コア情報を保持し、重複を回避します)

FAQ(FAQ)

  • 抽象輸送APIの目的は何ですか? さまざまな輸送サービスを単一のアプリケーションに統合し、統一されたインターフェイスを提供し、複雑さを減らすプロセスを簡素化します。
  • 抽象輸送APIはあなたのビジネスにどのように利益をもたらしますか? 複数の配送オプションをシームレスに統合して、顧客満足度を向上させ、操作を簡素化し、プロセスを自動化し、エラーを削減します。
  • 抽象輸送APIの課題は何ですか? 異なるAPIの構造的、機能的、ドキュメントの違いは、柔軟で強力な抽象化レイヤーを必要とし、API更新に対処するために継続的なメンテナンスが必要です。
  • 抽象輸送APIのエラーを処理する方法は? 堅牢なエラー処理メカニズムを実装し、API応答を検証し、例外をキャッチし、意味のあるエラーメッセージを提供します。
  • サードパーティライブラリを使用して配送APIを抽象化できますか? はい。ただし、特定のニーズが満たされ、積極的に維持されるように慎重に評価する必要があります。
  • 抽象化レイヤーをテストする方法は? ユニットテストと統合テストを作成し、モックAPIを使用してテストします。
  • 抽象輸送APIでのレート制限にどのように対処するか? 要求の再試行や要求レートの削減など、レート制限を処理するメカニズムを実装します。
  • 抽象的なレイヤーを保護する方法は? 機密データの暗号化、安全な通信プロトコルを使用したセキュリティ対策、およびセキュリティの脆弱性を修正するための定期的な更新などのセキュリティ対策を実装します。
  • 抽象輸送APIでバージョンコントロールを処理する方法は? バージョン固有のエンドポイントやパラメーターを使用するなど、さまざまなAPIバージョンを処理するための抽象化レイヤーを設計します。
  • 抽象化レイヤーを配送APIの変更と同期させる方法は? 配送APIの変更を定期的に監視し、APIの更新を購読し、更新をすばやくテストおよび展開します。
  • 以上がPHPマスター| APIの配送を抽象化しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    著者別の最新記事
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート