codeigniter で構築しているカートの USPS レート計算機を開発しようとしています。USPS テスト サーバーとその API から成功の応答を取得する際に問題が発生しています。私は自分の問題について電話をかけましたが、明らかに、彼らはカスタム ソリューションを作成しようとしている人にサポートを提供したくないようです。さらに混乱させるために、彼らは私が知る必要があることはすべて開発ガイド v3.pdfに記載されていると言いましたが、その中で次のように述べています。
ステップ 3: テスト サーバーから「定型」テストを実行する
該当する API: すべて
次のステップは、API インターフェイスをテストすることです。登録済みの API ユーザーとして、Shipping API テスト サーバーへのアクセスが許可されています。重要な注意: テスト サーバーは、事前定義された XML トランザクションのサブセットのみを受け入れ、このドキュメントで提供されている事前定義された XML 応答を返すように設定されています。
API のテストが完了し、運用サーバーにアクセスできる場合は、この手順をスキップして、手順 5: 運用サーバーから「サンプル」を実行するに進みます。
ここでの問題は、前述の「事前定義された XML トランザクションのサブセット」が提供されないことです。彼らはテストサンプルを提供していますが、テストサーバーでテストに成功したホエイにのみアクセスできる本番サーバー用に設計されているようです(以下のスクリプトでは、失敗したサンプルの1つがあります). そのため、 USPS Rate Calculators v1-5-1.pdfを参照して、特定のテスト トランザクション サンプルを提供します。せいぜい、次のようなエラー応答が返されるだけです。
<Error>
<Number>80040b1a</Number>
<Description>Authorization failure. You are not authorized to connect to this server. </Description>
<Source>UspsCom:: DoAuth</Source>
</Error>
人々がこれを解決したことは知っています。これに似たクローズドな質問がいくつかありますが、どれも解決策を示していません。私のコードは次のとおりです。
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Usps_curl extends CI_Controller {
public function index()
{
$devurl = "testing.shippingapis.com/ShippingAPITest.dll";
$puburl = "https://secure.shippingapis.com/ShippingAPITest.dll";
$service = "RateV4";
// ALTHOUGH THE USPS DEV GUIDE V3 SAYS
// $xml = '<RateV4Request USERID="225XXXXX5943">
// <Revision>2</Revision>
// <Package ID="1">
// <Service>PRIORITY</Service>
// <Container>FLAT RATE BOX</Container>
// <ZipOrigination>20012</ZipOrigination>
// <ZipDestination>20007</ZipDestination>
// <Pounds>1</Pounds>
// <Ounces>0.0</Ounces>
// <Size>REGULAR</Size>
// </Package>
// </RateV4Request>';
// THIS IS AN EXACT EXAMPLE PROVIDED IN THE USPS DEV GUIDE V3 - BUT I BELIEVE IT IS ONE OF THE FOUR "CANNED" TEST FOR THE PRODUCTION SERVER
//$xml = '<AddressValidateRequest USERID="225XXXXX5943">
// <Address ID="0">
// <Address1></Address1>
// <Address2>6406 Ivy Lane</Address2>
// <City>Greenbelt</City>
// <State>MD</State>
// <Zip5></Zip5>
// <Zip4></Zip4>
// </Address>
// </AddressValidateRequest>';
// THIS IS THE SAMPLE CODE FROM USPS RATE CALCULATORS V1-5-1 PDF
$xml = rawurlencode('<RateV4Request USERID="225XXXXX5943">
<Revision>2</Revision>
<Package ID="1ST">
<Service>FIRST CLASS</Service>
<FirstClassMailType>LETTER</FirstClassMailType>
<ZipOrigination>44106</ZipOrigination>
<ZipDestination>20770</ZipDestination>
<Pounds>0</Pounds>
<Ounces>3.5</Ounces>
<Container/>
<Size>REGULAR</Size>
<Machinable>true</Machinable>
</Package>
<Package ID="2ND">
<Service>PRIORITY</Service>
<ZipOrigination>44106</ZipOrigination>
<ZipDestination>20770</ZipDestination>
<Pounds>1</Pounds>
<Ounces>8</Ounces>
<Container>NONRECTANGULAR</Container>
<Size>LARGE</Size>
<Width>15</Width>
<Length>30</Length>
<Height>15</Height>
<Girth>55</Girth>
<Value>1000</Value>
<SpecialServices>
<SpecialService>1</SpecialService>
</SpecialServices>
</Package>
<Package ID="3RD">
<Service>ALL</Service>
<ZipOrigination>90210</ZipOrigination>
<ZipDestination>96698</ZipDestination>
<Pounds>8</Pounds>
<Ounces>32</Ounces>
<Container/>
<Size>REGULAR</Size>
<Machinable>true</Machinable>
<ShipDate>13-Dec-2010</ShipDate>
</Package>
</RateV4Request>');
$request = $devurl . "?API=" . $service . "&xml=" . $xml;
// echo "<pre>";
// print_r($request);
// die;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $request);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_HTTPGET, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
// echo "<pre>";
// print_r($response);
// echo "</pre>";
}
}
/* End of file usps_curl.php */
/* Location: ./application/controllers/usps_curl.php */
ご覧のとおり、さまざまな文字列をコメント化およびコメント化しています。これらのそれぞれをrawurlencode、urlencode、およびエンコードされていないもので試しましたが、どれも機能しません。どんな助け/提案も大歓迎です!
ときどき適切なエラー メッセージが表示されるので、近くにいる必要があることはわかっていますが、ここで何かが欠けているに違いありません。