Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP/cURL/JSON将XML数据推送到restapi_Php_Json_Xml_Php Curl_Woocommerce Rest Api - Fatal编程技术网

使用PHP/cURL/JSON将XML数据推送到restapi

使用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数据排序到一个表中和将该数据填充到一段包含变量的代码中之间

我有点被一个问题困住了。我正在尝试编写一个应用程序,它主要从包含客户的在线XML文件中读取和排序数据,并通过cURL/php/JSON在Wordpress/woocommerce中重新创建这些客户。我用失眠来测试我的呼叫和代码

到目前为止,我得到的是:

  • 将在线数据库中的客户数据拉入xml[但其原始数据未分类且信息太多]
  • 通过JSON/PHP/cURL中的POST请求在Woocommerce/Wordpress中创建客户
  • 我目前缺少将XML数据排序到一个表中和将该数据填充到一段包含变量的代码中之间的桥梁,该变量通过RESTAPI将所述数据重新创建到woocommerce中


    简而言之,我想:

    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"
        }
    }