UPSAPIエンドポイントとサンプルPHPテストコード
私たちは WooCommerce 今のクライアント UPS配送 住所の検証と送料の計算が機能しなくなりました。 私たちが特定した最初の問題は、UPS配送プラグインが古く、それを開発した会社のコアドメインにマルウェアが含まれていたことでした…これは決して良い兆候ではありません。 そこで、 WooCommerceUPSプラグイン Woocommerceの開発者によって十分にサポートされているからです。
サイトが住所を検証せず、配送を統合していないため、最初のステップは、UPSアプリケーションプログラミングインターフェイス(API)稼働していた。 UPSには、 APIのステータス.
APIが実行されていないように見えたため、次のステップは問題をローカルでデバッグすることでした。 興味深いことに、プラグインには、UPS配送統合が実際に機能するかどうかを確認するためのログ記録もテストもありませんでした。 デバッグ設定でさえフィードバックを提供せず、ログファイルも提供しませんでした。 そのため、APIをテストするには、実際にAPIをテストするスクリプトをプログラムする必要がありました。
私がダウンロードしました UPSAPI開発者キット…コードサンプルが含まれていました…そして相変わらず混乱していました。 ドキュメントは限られており、APIのエンドポイントもリストされておらず、コードサンプルも十分にドキュメント化されていません。
その結果、私はいくつかの掘り下げをしなければなりませんでした…最初は、APIのエンドポイントを特定することでした。 文書化されたテストエンドポイントを見つけ、コードを記述してテストしましたが、成功しませんでした。 もう少し掘り下げてみると、テストエンドポイントは基本的に役に立たないことがわかりました。 うーん。
UPSAPIエンドポイント
開発サイトで、 UPSAPI本番エンドポイント:
- https://onlinetools.ups.com/ups.app/xml/TimeInTransit
- https://onlinetools.ups.com/ups.app/xml/License
- https://onlinetools.ups.com/ups.app/xml/QVEvents
- https://onlinetools.ups.com/ups.app/xml/Register
- https://onlinetools.ups.com/ups.app/xml/AV
- https://onlinetools.ups.com/ups.app/xml/ShipAccept
- https://onlinetools.ups.com/ups.app/xml/Void
- https://onlinetools.ups.com/ups.app/xml/XAV
- https://onlinetools.ups.com/ups.app/xml/Track
- https://onlinetools.ups.com/ups.app/xml/Rate
- https://onlinetools.ups.com/ups.app/xml/ShipConfirm
- https://onlinetools.ups.com/ups.app/xml/LabelRecovery
テストするのが最も簡単なのは 住所の検証 (上記の太字)エンドポイントなので、提供されたコードを使用して、アドレスを渡し、成功したか失敗したかで応答する小さなPHPスクリプトを記述しました。 使用したい場合のコードは次のとおりです。
アドレス検証用のUPSAPIPHPテストファイル
アドレス検証UPSAPIエンドポイントをテストするための更新されたPHPスクリプトは次のとおりです。
<html>
<head>UPS Address Validation Test</head>
<body>Response: <?php
// Configuration
$accessLicenseNumber = "Insert Your API Key";
$userId = "Insert Your User ID";
$password = "Insert Your Password";
$endpointurl = 'https://onlinetools.ups.com/ups.app/xml/AV';
try {
// Create AccessRequest XMl
$accessRequestXML = new SimpleXMLElement ( "<AccessRequest></AccessRequest>" );
$accessRequestXML->addChild ( "AccessLicenseNumber", $accessLicenseNumber );
$accessRequestXML->addChild ( "UserId", $userId );
$accessRequestXML->addChild ( "Password", $password );
// Create AddressValidationRequest XMl
$avRequestXML = new SimpleXMLElement ( "<AddressValidationRequest ></AddressValidationRequest >" );
$request = $avRequestXML->addChild ( 'Request' );
$request->addChild ( "RequestAction", "AV" );
$address = $avRequestXML->addChild ( 'Address' );
$address->addChild ( "City", "ALPHARETTA" );
$address->addChild ( "PostalCode", "300053778" );
$requestXML = $accessRequestXML->asXML () . $avRequestXML->asXML ();
$form = array (
'http' => array (
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => "$requestXML"
)
);
// get request
$request = stream_context_create ( $form );
$browser = fopen ( $endpointurl, 'rb', false, $request );
if (! $browser) {
throw new Exception ( "Connection failed." );
}
// get response
$response = stream_get_contents ( $browser );
fclose ( $browser );
if ($response == false) {
throw new Exception ( "Bad data." );
} else {
// get response status
$resp = new SimpleXMLElement ( $response );
echo $resp->Response->ResponseStatusDescription . "\n";
}
} catch ( Exception $ex ) {
echo $ex;
}
?>
</body>
</html>
このスクリプトは、少なくとも、資格情報がUPSAPIアドレス検証エンドポイントで機能しているかどうかを示します。 上記の例では、APIに投稿するPHPの方法論(fopen)が少し古くなっていることに気付きました…しかし、テストコードを機能させたかっただけです。
情報開示: Martech Zone そのを使用しています WooCommerce この記事のアフィリエイトリンク。