如何使用PHP中的salesforce使用Namespace消耗Soap消息

时间:2011-08-08 19:46:34

标签: php xml salesforce

我是salesforce的新手。精通php,但我没有做过任何xml解析。我有这个文件,我可以使用。它是在salesforce对象更改时创建的:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <soapenv:Body>
 <notifications xmlns="http://soap.sforce.com/2005/09/outbound">
  <OrganizationId>00D30000000opwSEAQ</OrganizationId>
  <ActionId>04k30000000L6QPAA0</ActionId>
  <SessionId xsi:nil="true"/>
  <EnterpriseUrl>https://na1-api.salesforce.com/services/Soap/c/22.0/00D30000000opwS</EnterpriseUrl>
  <PartnerUrl>https://na1-api.salesforce.com/services/Soap/u/22.0/00D30000000opwS</PartnerUrl>
  <Notification>
   <Id>04l3000000JbKClAAN</Id>
   <sObject xsi:type="sf:Account" xmlns:sf="urn:sobject.enterprise.soap.sforce.com">
    <sf:Id>0013000000ooziWAAQ</sf:Id>
    <sf:BillingCity>New York</sf:BillingCity>
    <sf:BillingCountry>US</sf:BillingCountry>
    <sf:BillingPostalCode>10000</sf:BillingPostalCode>
    <sf:BillingState>New York</sf:BillingState>
    <sf:BillingStreet>302 E xxx St Apt C</sf:BillingStreet>
    <sf:FN__Mapping_Status__c>Not Located Yet</sf:FN__Mapping_Status__c>
    <sf:IsDeleted>false</sf:IsDeleted>
    <sf:Member_Status__c>Active</sf:Member_Status__c>
    <sf:Name>Joel Test</sf:Name>
   </sObject>
  </Notification>
 </notifications>
 </soapenv:Body>
</soapenv:Envelope>

我需要解析它,以便我可以获取sf命名空间中的值并更新数据库。我可以使用SimpleXML来读取命名空间中的东西,但是我无法读取命名空间值。有人能指出我的示例代码或教程如何做到这一点?

3 个答案:

答案 0 :(得分:0)

PHP的SimpleXML不适用于读取命名空间信息。见这 - http://www.w3schools.com/php/php_xml_simplexml.asp。而是尝试这样的事情http://www.php.net/manual/en/function.xml-parser-create-ns.php

答案 1 :(得分:0)

看起来这是来自Salesforce中的出站消息传递功能的SOAP消息。不要将其仅视为XML,而是尝试将本地PHP SoapServer与Salesforce中提供的WSDL一起使用,因为它旨在处理这样的SOAP消息。您可以在Setup |中获取WSDL创建|工作流程&amp;批准|出站邮件| |端点WSDL。您可能还想查看Salesforce PHP Client,它使用相应的PHP SoapClient并具有处理sf:namespace和转换为SObject对象的实用程序。重新连接工具包以充当服务器而不是客户端应该不会太难,因此您可以处理出站消息。

答案 2 :(得分:0)

PHP的SimpleXML可能适用于该案例。只需要使用children()并使用正确的语法。

因此,要在Salesforce Outbound Message中读取字段值BillingCity,您可以使用以下代码:

$rcXML->children('http://schemas.xmlsoap.org/soap/envelope/')->Body->children('http://soap.sforce.com/2005/09/outbound')->notifications->Notification->sObject->children('urn:sobject.enterprise.soap.sforce.com')->BillingCity

为了帮助您了解它是如何工作的,我写了一篇包含相同代码和xml的帖子,这些帖子应该更容易理解。

http://amigotechnotes.wordpress.com/2013/11/16/parse-xml-with-namespace-by-simplexml-in-php/

一旦您阅读了归档值,您就可以使用PHP将其存储到其他数据库或文本文件中。