簡體   English   中英

PHP-為Salesforce API生成正確的SOAP數據

[英]PHP - Generating correct SOAP data for Salesforce API

任何人都可以幫我指出正確的方向,以生成可與Salesforce API一起使用的有效XML。 我通常像瘟疫一樣避免使用SOAP,但是這里別無選擇,似乎我處在垂直學習曲線的底部。

我有一個完整的WSDL,據我所知,它應該覆蓋請求的每個部分,包括所有適當的名稱空間和復雜類型,但我只是無法生成與其示例匹配的請求。

示例請求的子集如下所示:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://soap.sforce.com/schemas/class/WebsiteAPI" xmlns:web1="http://soap.sforce.com/schemas/class/WebsiteAPIUtils">
   <soapenv:Header>
      <web:SessionHeader>
         <web:sessionId> SESSION_ID_FROM_LOGIN_METHOD </web:sessionId>
      </web:SessionHeader>
   </soapenv:Header>
   <soapenv:Body>
      <web:upsertLeadOrUpdateAccount>
       <web:leadFromWebsite>
            <!--Optional:-->
            <web1:salesforceId></web1:salesforceId>
            ...

通過調用相關方法,我可以使用空的<leadFromWebsite>元素獲得<ns1:upsertLeadOrUpdateAccount>請求(不是相同的名稱空間ID,但這並不重要)。 但是,我只是無法弄清楚如何使用正確的名稱空間在其中獲取<salesforceId>子元素。 我所做的一切似乎都不起作用,或者為父級添加了“ xsi-type”屬性,而不是使用名稱空間前綴。

我得到的最接近的是以下內容,它將名稱空間添加到根元素,但似乎創建了一個看起來很奇怪的xsi-type="ns1:web1"屬性,而不是僅在所有元素前加上web1

我在WSDL中確實為所有內容提供了complexTypes,因此我確定SOAP庫應該有一種方法可以為我處理所有繁重的工作。 我真的不想訴諸於手工產生全部。

$data = new stdclass();
$data->salesforceId = '123';

$args = [

    'leadFromWebsite' => new SoapVar($data, SOAP_ENC_OBJECT, 'web1', 'http://soap.sforce.com/schemas/class/WebsiteAPIUtils')
];

輸出-

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 
  xmlns:ns1="http://soap.sforce.com/schemas/class/WebsiteAPIUtils" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns:ns2="http://soap.sforce.com/schemas/class/WebsiteAPI">
  <SOAP-ENV:Header>
    <ns2:SessionHeader>
      <ns2:sessionId>123</ns2:sessionId>
    </ns2:SessionHeader>
  </SOAP-ENV:Header>
  <SOAP-ENV:Body>
    <ns2:upsertLeadOrUpdateAccount>
      <ns2:leadFromWebsite xsi:type="ns1:web1">
        <salesforceId>123</salesforceId>
      </ns2:leadFromWebsite>
    </ns2:upsertLeadOrUpdateAccount>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

我尚未使用salesforce API對此進行全面測試,但我認為我已經設法生成了看起來正確的XML-至少比我更接近了。

似乎我的主要問題是混淆類型和節點名稱空間。 我想指定節點的名稱空間,而不是數據類型。

以下代碼生成的XML更接近示例請求-

$data = [];
$data[] = new SoapVar('123', XSD_STRING, null, null, 'salesforceId', 'http://soap.sforce.com/schemas/class/WebsiteAPIUtils');

$args = [
    'leadFromWebsite' => new SoapVar($data, SOAP_ENC_OBJECT, null, null, 'leadFromWebsite', 'http://soap.sforce.com/schemas/class/WebsiteAPI')
];

$s->upsertLeadOrUpdateAccount($args);

XML-

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 
  xmlns:ns1="http://soap.sforce.com/schemas/class/WebsiteAPIUtils" 
  xmlns:ns2="http://soap.sforce.com/schemas/class/WebsiteAPI">
  <SOAP-ENV:Header>
    <ns2:SessionHeader>
      <ns2:sessionId>123</ns2:sessionId>
    </ns2:SessionHeader>
  </SOAP-ENV:Header>
  <SOAP-ENV:Body>
    <ns2:upsertLeadOrUpdateAccount>
      <ns2:leadFromWebsite>
        <ns1:salesforceId>123</ns1:salesforceId>
      </ns2:leadFromWebsite>
    </ns2:upsertLeadOrUpdateAccount>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM