【问题标题】:ups tracking api - set response languageups tracking api - 设置响应语言
【发布时间】:2018-01-15 12:47:44
【问题描述】:

我有一个用于 UPS 跟踪的 php 解决方案。 我从 UPS 得到的使用“英语”语言的回复 有没有办法获得另一种语言的回复?

这是我在 ups 开发者文档中的代码: 这是我在 ups 开发者文档中的代码: 这是我在 ups 开发者文档中的代码: 这是我在 ups 开发者文档中的代码:这是我在 ups 开发者文档中的代码:

// Configuration
$accessLicenseNumber = "xxx";
$userId = "xxx";
$password = "xxx";
$endpointurl = 'https://onlinetools.ups.com/ups.app/xml/Track';


try {

    // Create AccessRequest XMl
    $accessRequestXML = new SimpleXMLElement ( "<AccessRequest></AccessRequest>" );
    $accessRequestXML->addChild ( "AccessLicenseNumber", $accessLicenseNumber );
    $accessRequestXML->addChild ( "UserId", $userId );
    $accessRequestXML->addChild ( "Password", $password );

    // Create TrackRequest XMl
    $trackRequestXML = new SimpleXMLElement ( "<TrackRequest></TrackRequest  >" );
    $request = $trackRequestXML->addChild ( 'Request' );
    $request->addChild ( "RequestAction", "Track" );
    $request->addChild ( "RequestOption", "activity" );

    $trackRequestXML->addChild ( "TrackingNumber", "xxx" );

    $requestXML = $accessRequestXML->asXML () . $trackRequestXML->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 );
    }

    Header ( 'Content-type: text/xml' );
} catch ( Exception $ex ) {}
}

【问题讨论】:

  • 语言似乎是在&lt;AccessRequest xml:lang="en-US"&gt;标签中定义的。
  • 是的,我在 $accessRequestXML = new SimpleXMLElement ( "&lt;AccessRequest xml:lang='de_DE'&gt;&lt;/AccessRequest&gt;");$accessRequestXML = new SimpleXMLElement ( "&lt;AccessRequest xml:lang='de-DE'&gt;&lt;/AccessRequest&gt;"); 之前试过这个 - 但它仍然是英文
  • 您在发送请求之前是否检查了请求的输出 ($requestXML)?格式可以吗?
  • 格式应该没问题,否则我不会得到正确的响应,不是吗?
  • 是的。我主要考虑xml:lang="de-DE"的格式。

标签: php xml api tracking ups


【解决方案1】:

您不能通过 XML 执行此操作,您需要使用 WSDL (SOAP) 或 JSON。 您可以在/TrackRequest/Locale => &lt;v3:Locale&gt;it_IT&lt;/v3:Locale&gt; 中使用本地标签

WSDL (SOAP) 请求

测试网络服务的网址https://wwwcie.ups.com/webservices/Track

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:v1="http://www.ups.com/XMLSchema/XOLTWS/UPSS/v1.0"
xmlns:v3="http://www.ups.com/XMLSchema/XOLTWS/Track/v2.0"
xmlns:v11="http://www.ups.com/XMLSchema/XOLTWS/Common/v1.0">
    <soapenv:Header>
        <v1:UPSSecurity>
            <v1:UsernameToken>
                <v1:Username>USERID</v1:Username>
                <v1:Password>PASSWORD</v1:Password>
            </v1:UsernameToken>
            <v1:ServiceAccessToken>
                <v1:AccessLicenseNumber>API KEY</v1:AccessLicenseNumber>
            </v1:ServiceAccessToken>
        </v1:UPSSecurity>
    </soapenv:Header>
    <soapenv:Body>
        <v3:TrackRequest>
            <v11:Request>
                <v11:RequestOption>1</v11:RequestOption>
                <v11:TransactionReference>
                    <v11:CustomerContext>Your Test Case Summary Description</v11:CustomerContext>
                </v11:TransactionReference>
            </v11:Request>
            <v3:Locale>it_IT</v3:Locale>
            <v3:InquiryNumber>TRACKING NUMBER</v3:InquiryNumber>
        </v3:TrackRequest>
    </soapenv:Body>
</soapenv:Envelope>

我使用 Tracking Number of tests 进行了一些测试,但对于那些它不起作用。
然后,我使用发送到我的国家(意大利)的真实跟踪代码,它可以正常工作

响应 WSDL(SOAP)

..........
<trk:Status>
   <trk:Type>M</trk:Type>
   <trk:Description>Ordine elaborato: Pronto per UPS</trk:Description>
   <trk:Code>MP</trk:Code>
</trk:Status>
..........

我使用 Postman 提出请求

您也可以使用 JSON(请参阅 UPS 网站上的指南)

【讨论】:

  • 也就是说,只有php和json/soap才能实现? :( => 我没有这方面的经验 :(
  • @Ghost108 以获取您的语言的翻译是的
【解决方案2】:

这是开发套件 UPS 中的一个肥皂客户端示例

<?php

  //Configuration
  $access = " Add License Key Here";
  $userid = " Add User Id Here";
  $passwd = " Add Password Here";
  $wsdl = " Add Wsdl File Here ";
  $operation = "ProcessTrack";
  $endpointurl = ' Add URL Here';
  $outputFileName = "XOLTResult.xml";

  function processTrack()
  {
      //create soap request
    $req['RequestOption'] = '15';
    $tref['CustomerContext'] = 'Add description here';
    $req['TransactionReference'] = $tref;
    $request['Request'] = $req;
    $request['InquiryNumber'] = '';
    $request['TrackingOption'] = '02';

    echo "Request.......\n";
    print_r($request);
    echo "\n\n";
    return $request;
  }

  try
  {

    $mode = array
    (
         'soap_version' => 'SOAP_1_1',  // use soap 1.1 client
         'trace' => 1
    );

    // initialize soap client
    $client = new SoapClient($wsdl , $mode);

    //set endpoint url
    $client->__setLocation($endpointurl);


    //create soap header
    $usernameToken['Username'] = $userid;
    $usernameToken['Password'] = $passwd;
    $serviceAccessLicense['AccessLicenseNumber'] = $access;
    $upss['UsernameToken'] = $usernameToken;
    $upss['ServiceAccessToken'] = $serviceAccessLicense;

    $header = new SoapHeader('http://www.ups.com/XMLSchema/XOLTWS/UPSS/v1.0','UPSSecurity',$upss);
    $client->__setSoapHeaders($header);


    //get response
    $resp = $client->__soapCall($operation ,array(processTrack()));

    //get status
    echo "Response Status: " . $resp->Response->ResponseStatus->Description ."\n";

    //save soap request and response to file
    $fw = fopen($outputFileName , 'w');
    fwrite($fw , "Request: \n" . $client->__getLastRequest() . "\n");
    fwrite($fw , "Response: \n" . $client->__getLastResponse() . "\n");
    fclose($fw);

  }
  catch(Exception $ex)
  {
    print_r ($ex);
  }

?>

【讨论】:

    猜你喜欢
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-30
    相关资源
    最近更新 更多