使用PHP/cURL/JSON将XML数据推送到restapi
我有点被一个问题困住了。我正在尝试编写一个应用程序,它主要从包含客户的在线XML文件中读取和排序数据,并通过cURL/php/JSON在Wordpress/woocommerce中重新创建这些客户。我用失眠来测试我的呼叫和代码 到目前为止,我得到的是:使用PHP/cURL/JSON将XML数据推送到restapi,php,json,xml,php-curl,woocommerce-rest-api,Php,Json,Xml,Php Curl,Woocommerce Rest Api,我有点被一个问题困住了。我正在尝试编写一个应用程序,它主要从包含客户的在线XML文件中读取和排序数据,并通过cURL/php/JSON在Wordpress/woocommerce中重新创建这些客户。我用失眠来测试我的呼叫和代码 到目前为止,我得到的是: 将在线数据库中的客户数据拉入xml[但其原始数据未分类且信息太多] 通过JSON/PHP/cURL中的POST请求在Woocommerce/Wordpress中创建客户 我目前缺少将XML数据排序到一个表中和将该数据填充到一段包含变量的代码中之间
简而言之,我想: 1.将客户数据拉入XML-确定 2.读取XML客户数据并将其分配给变量 3.使用上述变量在Woocommerce/wordpress中推送和重新创建客户
我应该如何处理这个问题 这就是我在woocommerce中创建客户的方式基本上,CURL_POSTFIELDS标记应该包含客户XML表中的一行及其赋值数据。
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://www.testsite.com/wp-json/wc/v3/customers?consumer_key=XXXXXXXXXXXX&consumer_secret=XXXXXXXXXXXXXXXXX",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "{\n \"email\": \"john.doe@example.com\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"username\": \"john.doe\",\n \"billing\": {\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"company\": \"\",\n \"address_1\": \"969 Market\",\n \"address_2\": \"\",\n \"city\": \"San Francisco\",\n \"state\": \"CA\",\n \"postcode\": \"94103\",\n \"country\": \"US\",\n \"email\": \"john.doe@example.com\",\n \"phone\": \"(555) 555-5555\"\n },\n \"shipping\": {\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"company\": \"\",\n \"address_1\": \"969 Market\",\n \"address_2\": \"\",\n \"city\": \"San Francisco\",\n \"state\": \"CA\",\n \"postcode\": \"94103\",\n \"country\": \"US\"\n }\n}",
CURLOPT_HTTPHEADER => [
"Authorization: Basic Og==",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
下面是来自XML数据的响应示例。我已扩展帐户代码2以显示其内容。obv我不想要它的一切,我只对名字、电子邮件、地址、电话和增值税号码感兴趣
<eExact
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="eExact-XML.xsd">
<Accounts>
<Account code="0" searchcode="" status="A" ID="{2723dc8f-33d0-XXXX-9710-XXXXXXXXXXXX}">
</Account>
<Account code="1" searchcode="" status="A" ID="{7c6f362c-79e1-XXXX-8822-XXXXXXXXXXXX}">
</Account>
<Account code="2" searchcode="" status="C" ID="{132c9c6b-dd66-XXXX-b276-XXXXXXXXXXXX}">
<Name>BOB</Name>
<Phone>6845641564564654156454</Phone>
<PhoneExt />
<Fax />
<Email>example@example.com</Email>
<HomePage>example.com<</HomePage>
<Language code="EN" />
<IsSupplier>1</IsSupplier>
<CanDropShip>0</CanDropShip>
<IsBlocked>0</IsBlocked>
<IsReseller>0</IsReseller>
<IsSales>1</IsSales>
<IsPurchase>1</IsPurchase>
<ShowRemarkForSales>0</ShowRemarkForSales>
<Contact number="2090075" gender="M" default="1" ID="{2449ce5d-41b3-XXXX-bab3-XXXXXXXXXXXX}">
<LastName>BOB</LastName>
<MiddleName />
<BirthName>BOB</BirthName>
<BirthNamePrefix />
<PartnerName />
<PartnerNamePrefix />
<FirstName>BOB</FirstName>
<Initials />
<Language code="SAMPLE" />
<Phone>44546456456e</Phone>
<PhoneExt />
<Fax />
<Mobile>eeeeeeeeeeeeeee</Mobile>
<Email>example@example.com</Email>
<BirthPlace />
<IsMailingExcluded>0</IsMailingExcluded>
<Job>
<Description>role</Description>
</Job>
<IsAnonymised>0</IsAnonymised>
</Contact>
<Address type="TES" default="1" ID="{41bde841-afde-XXXX-9cd0-XXXXXXXXXXXX}">
<AddressLine1>sampleroad</AddressLine1>
<AddressLine2 />
<AddressLine3 />
<PostalCode>1000000</PostalCode>
<City>Appels</City>
<State code="O-V" />
<Country code="EN" />
<Phone />
<Fax />
<Contact number="2090075" ID="{2449ce5d-41b3-XXXX-bab3-XXXXXXXXXXXX}" />
</Address>
<VATNumber>VATXXXXXXXX</VATNumber>
<VATLiability>L</VATLiability>
<GovernmentVATSystem>0</GovernmentVATSystem>
<ChamberOfCommerce />
<ChamberOfCommerceEstablishment />
<GlnNumber />
<SalesCurrency code="EUR" />
<PurchaseCurrency code="EUR" />
<CreditLine>
<Sales>0</Sales>
<Purchase>0</Purchase>
</CreditLine>
<Discount>
<SalesPercentage>0.9</SalesPercentage>
<PurchasePercentage>0</PurchasePercentage>
</Discount>
<AccountClassifications />
<IsMailing>0</IsMailing>
<IsCompetitor>0</IsCompetitor>
<StartDate>2020-11-25</StartDate>
<IntraStat>
<System />
<TransactionA />
<TransactionB />
<TransportMethod />
<DeliveryTerm />
<Area />
</IntraStat>
<InvoicingMethod>0</InvoicingMethod>
<IsAnonymised>0</IsAnonymised>
</Account>
</Accounts>
<Topics>
<Topic code="Accounts" ts_d="XXXXXXXXXXXX" count="3" pagesize="1000" />
</Topics>
<Messages />
</eExact>
上下快速移动
6845641564564654156454
example@example.com
com使用DOM+Xpath从XML构建一个数组结构,并将其序列化为JSON。Xpath表达式允许您使用位置路径和条件从DOM获取节点列表和标量值
例如:
- 任何
账户
/eExact/Accounts/Account
- 具有
状态的
C
/eExact/Accounts/Account[@status=“C”]
- 只有最后一个节点
(/eExact/Accounts/Account[@status=“C”])[last()]
位置路径开头的/
将其锚定到文档,否则表达式将使用当前上下文(DOMXpath::evaluate()
的第二个参数)
例如:
- 任何
子元素电子邮件
电子邮件
- 将首次发现的
转换为字符串电子邮件
字符串(电子邮件)
{
"email": "example@example.com",
"username": "BOB",
"first_name": "BOB",
"last_name": "BOB",
"billing": {
"first_name": "BOB",
"last_name": "BOB",
"postcode": "1000000"
}
}
使用DOM+Xpath从XML构建数组结构,并将其序列化为JSON。Xpath表达式允许您使用位置路径和条件从DOM获取节点列表和标量值 例如:
- 任何
账户
/eExact/Accounts/Account
- 具有
状态的
C
/eExact/Accounts/Account[@status=“C”]
- 只有最后一个节点
(/eExact/Accounts/Account[@status=“C”])[last()]
/
将其锚定到文档,否则表达式将使用当前上下文(DOMXpath::evaluate()的第二个参数)
例如:
- 任何
子元素电子邮件
电子邮件
- 将首次发现的
转换为字符串电子邮件
字符串(电子邮件)
{
"email": "example@example.com",
"username": "BOB",
"first_name": "BOB",
"last_name": "BOB",
"billing": {
"first_name": "BOB",
"last_name": "BOB",
"postcode": "1000000"
}
}
将XML解析为一个对象,然后将该对象编码为JSON。你试过什么特别的方法吗?请注意“将在线数据库中的客户数据转换成xml”…它必须是xml吗?该数据库不输出任何其他内容吗?e、 它能直接返回JSON吗?我只是想说出来,以防过程可以简化,但很明显,我对这个系统一无所知,也不知道你有什么访问权限,也不知道你可以从中获得什么。@ADyson,它也可以导出为.csv,但我认为这比xml更难处理。。。还没有尝试过任何具体的方法。如果你有一个嵌套的数据结构,这可能会更难,看起来你已经有了。所以,是的,也许还是坚持使用XML。您应该已经能够找到解释如何使用PHP解析XML的教程等。试试看。如果你被卡住了,问我们一些更具体的问题。将XML解析为一个对象,然后将该对象编码为JSON。你试过什么特别的方法吗?请注意“将在线数据库中的客户数据转换成xml”…它必须是xml吗?该数据库不输出任何其他内容吗?e、 它能直接返回JSON吗?我只是想说出来,以防过程可以简化,但很明显,我对这个系统一无所知,也不知道你有什么访问权限,也不知道你可以从中获得什么。@ADyson,它也可以导出为.csv,但我认为这比xml更难处理。。。还没有尝试过任何具体的方法。如果你有一个嵌套的数据结构,这可能会更难,看起来你已经有了。所以,是的,也许还是坚持使用XML。您应该已经能够找到解释如何使用PHP解析XML的教程等。试试看。如果您陷入困境,请询问我们一些更具体的问题。get:PHP致命错误:未捕获错误:调用未定义的函数getXML(),这是因为需要在代码中定义/启动其他内容,还是因为xamp中存在配置问题。我在windows上使用xampp来运行php代码。我明白了。必须用$response参数替换getXML函数,因为我的xml就是输出getting:PHP致命错误:未捕获错误:调用未定义的函数getXML(),这是因为需要在代码中定义/启动其他内容,还是因为xamp中存在配置问题。我在windows上使用xampp来运行php代码。我明白了。必须用我的$response参数替换getXML函数,因为我的xml就是输出
{
"email": "example@example.com",
"username": "BOB",
"first_name": "BOB",
"last_name": "BOB",
"billing": {
"first_name": "BOB",
"last_name": "BOB",
"postcode": "1000000"
}
}