为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 PHP 的 force.com 工具包从 salesforce 检索元数据?

如何使用 PHP 的 force.com 工具包从 salesforce 检索元数据?

PHP
慕妹3146593 2022-01-14 15:49:45
我想从我的 salesforce 实例中检索参数的值。比如我想恢复可信IP范围: https ://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_securitysettings.htm为此,请使用元数据 API。为了访问这个 API,我使用了 force.com 的 PHP 工具包。但是,给出的示例仅涉及参数的创建或更新:https://developer.salesforce.com/blogs/developer-relations/2011/11/extending-the-force-com-toolkit-for-php-to-handle-the-metadata-api.html如何简单地获取参数的值(例如受信任的 IP 范围)?
查看完整描述

2 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

Salesforce 提供的 PHP 工具包已经过时,不应使用。有更多最近的分叉/社区项目(一、二)试图实现一个现代 PHP 客户端,也许其中一个对你有用。


一个简单的(r) 解决方案是通过对元数据 API 的普通 SOAP 调用来检索 SecuritySettings。API 版本设置为的请求负载46.0应该是


<?xml version="1.0" encoding="UTF-8"?>

<Package xmlns="http://soap.sforce.com/2006/04/metadata">

    <types>

        <members>Security</members>

        <name>Settings</name>

    </types>

    <version>46.0</version>

</Package>

并且响应看起来像这样(仅显示相关部分,实际响应要大得多)


<?xml version="1.0" encoding="UTF-8"?>

<SecuritySettings xmlns="http://soap.sforce.com/2006/04/metadata">

    <networkAccess>

        <ipRanges>

            <description>...</description>

            <end>1.255.255.255</end>

            <start>0.0.0.0</start>

        </ipRanges>

    </networkAccess>

</SecuritySettings>

翻译成PHP:


$wsdl = PUBLIC_PATH . '/wsdl-metadata.xml'; 

$apiVersion = 46.0;

$singlePackage = true;

$members = 'Security';

$name = 'Settings';


$params = new StdClass();

$params->retrieveRequest = new StdClass();

$params->retrieveRequest->apiVersion = $apiVersion;

$params->retrieveRequest->singlePackage = $singlePackage;

$params->retrieveRequest->unpackaged = new StdClass();

$params->retrieveRequest->unpackaged->version = $apiVersion;

$params->retrieveRequest->unpackaged->type = new stdClass();

$params->retrieveRequest->unpackaged->type->members = $members;

$params->retrieveRequest->unpackaged->type->name = $name;


$option = [

    'trace' => TRUE,

];

// Namespaces

$namespace = 'http://soap.sforce.com/2006/04/metadata';

$client = new SoapClient($wsdl, $option);


$header = new SoapHeader($namespace, "SessionHeader", array ('sessionId' => $token)); // NEED: access token

$client->__setSoapHeaders($header);

$client->__setLocation($serverUrl); // NEED: service endpoint URL

$serviceResult = $client->retrieve($params);

您需要提供访问令牌 ( $token) 和服务端点 ( $serverUrl)。


查看完整回答
反对 回复 2022-01-14
?
qq_遁去的一_1

TA贡献1725条经验 获得超8个赞

对于任何试图让它工作的人,identigral 的例子对我不起作用,必须执行以下操作:

更改$client->setEndpoint($serverUrl);$client->__setLocation($serverUrl);

我使用 Oauth 登录,因此您需要从响应中构造 $serverUrl: <instance_url> + '/services/Soap/m/46.0/' + <org id (from id)>

示例:'https://your-production-or-sandbox-name.my.salesforce.com/services/Soap/m/46.0/your-org-id'


查看完整回答
反对 回复 2022-01-14
  • 2 回答
  • 0 关注
  • 216 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号