Как я могу использовать сообщение Soap с пространством имен от salesforce в PHP - PullRequest
0 голосов
/ 08 августа 2011

Я новичок в 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 для чтения содержимого no в пространстве имен, но я не смог прочитать значения пространства имен. Может кто-нибудь указать мне пример кода или учебник о том, как это сделать?

Ответы [ 3 ]

0 голосов
/ 20 августа 2011

Похоже, что это SOAP-сообщение от функции исходящих сообщений в Salesforce. Вместо того, чтобы рассматривать его как просто XML, попробуйте использовать собственный PHP SoapServer с WSDL, предоставляемым в Salesforce, так как он предназначен для обработки SOAP-сообщений, подобных этой. Вы можете получить WSDL в программе установки | Создать | Рабочий процесс и разрешения | Исходящие сообщения | | Конечная точка WSDL. Вы также можете посмотреть на Salesforce PHP Client , который использует соответствующий PHP SoapClient и имеет утилиту для обработки пространства имен sf: и преобразования в объект SObject. Не должно быть слишком сложно перенастроить инструментарий для работы в качестве сервера, а не клиента, чтобы вы могли обрабатывать исходящие сообщения.

0 голосов
/ 16 ноября 2013

PHP SimpleXML может работать в этом случае.Просто нужно использовать children () и использовать правильный синтаксис.

Поэтому, чтобы прочитать значение поля BillingCity в Salesforce Outbound Message, вы можете использовать следующий код:

$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.

0 голосов
/ 08 августа 2011

PHP SimpleXML не будет работать для чтения информации о пространстве имен. Смотрите это - http://www.w3schools.com/php/php_xml_simplexml.asp. Вместо этого попробуйте что-то вроде этого http://www.php.net/manual/en/function.xml-parser-create-ns.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...