【问题标题】:How to connect XML API into PHP Code如何将 XML API 连接到 PHP 代码中
【发布时间】:2016-11-28 01:41:47
【问题描述】:

我是新开发者,我需要连接XML API Hotel,文档中提到了启动指南,首先我们需要添加客户登录和用户,一开始有两个步骤,但我不知道如何使用它们,以及如何使用如下密码登录信息将 Main XML URL 连接到 PHP:

一般请求/请求格式:

    <customer>  
    <username>username</username>  
    <password>md5(password)</password>  
    <id>company code</id>  
    <source>1</source>  
    <request command="getallcities">  
        <return>  
            <filters>  
                <countryCode></countryCode>  
                <countryName></countryName>  
            </filters>  
            <fields>  
                <field>countryName</field>  
                <field>countryCode</field>  
            </fields>  
        </return>  
    </request>  
</customer> 

一般回复/回复格式:

    <result command=" " date="" ip="">  
    <request>  
        <error>  
            <class></class>  
            <code>error code</code>  
            <details></details>  
            <extraDetails></extraDetails>  
            <postXml></postXml>  
        </error>  
        <successful>FALSE</successful>  
    </request>  
</result>  

一般请求 XSD

getallcities.xsd

我非常感谢有人会指导我如何使用它们以及如何将 PHP 连接到 Main XML Url。

非常感谢您在这个问题上的帮助。

提前致谢

【问题讨论】:

标签: php xml api


【解决方案1】:

好的,所以,你没有付出太多的努力,但我会尽力帮助你解决这个问题。

首先,让我们使用 PHP 包来简化将数组转换为有效 XML 的过程。这将节省您在路上的时间。我推荐Spatie's Array to Xml package

如果您熟悉 composer,请继续安装它。如果您从未使用过 composer,请继续下载 src/ArrayToXml.php 并将其放入您的项目中。 (如果您不使用,我强烈建议您使用 composer,我只是提供一些额外的说明,因为我不知道您的经验水平。

现在,我假设您设置了 Array To Xml 包。让我们在将其转换为 xml 之前构造一个数组。

// Structure the payload as an array and pass in any data you need dynamically
$payload = [
  'username' => 'username',
  'password' => 'md5(password)',
  'id' => 'company code',
  'source' => '1',
  'request' => [
    'return' => [
      'filters' =>  [
        'countryCode' => [],
        'countryName' => [],
      ],
      'fields' => [
        'field' => [
          'countryName',
          'countryCode',
        ],
      ],
    ],
    '@attributes' => [
      'command' => 'getallcities',
    ],
  ],
];

// Convert the array to xml with a root of 'customer'
$xml = \Spatie\ArrayToXml\ArrayToXml::convert($payload, 'customer');

从那里,我们将使用您的有效负载启动对端点的 curl 调用。

// Set the url you're making an api call to
$endpoint = 'https://yoursite.com/your-endpoint';

$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => $endpoint,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => $xml,
    CURLOPT_HTTPHEADER => [
        "Content-Type: application/xml"
    ]
]);

$response = curl_exec($curl);
$error = curl_error($curl);

curl_close($curl);

if ($error) {
  echo "cURL Error #:" . $error;
} else {
  echo $response;
}

现在您需要将响应 xml 解析回一个数组,以便处理它。我创建了一个包来帮助你做到这一点。你可以在这里找到它:https://github.com/mtownsend5512/xml-to-array

安装它的基本前提是一样的。你会做$response = \Mtownsend\XmlToArray\XmlToArray::convert($response);

看看它是如何工作的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    • 2021-03-30
    • 2018-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-19
    相关资源
    最近更新 更多