使用PHP的Salesforce标注

时间:2014-05-16 14:54:40

标签: php json salesforce

道歉,因为我可能不知道salesforce API的术语。我刚刚开始编程连接器以与salesforce进行交互,我被卡住了。

我有一个要求,每次在Leads部分添加新条目时,我都必须检索几个字段(Firstname和Product Code)并将其传递给使用PHP的其他软件。 / p>

<?php    
require "conf/config_cleverbridge_connector.inc.php";

require "include/lc_connector.inc.php";


// Start of Main program

// Read basic parameters
if ($LC_Username === "")
{
    $LC_Username  = readParam("USER");
}
if ($LC_Password === "")
{
    $LC_Password  = readParam("PASSWORD");
}
$orderID      = "";
$customerID   = substr(readParam("PURCHASE_ID"), 0, 10);
$comment      = readParam("EMAIL")."-".readParam("PURCHASE_ID");

// Create product array
$products = array();

$itemID     = readParam("INTERNAL_PRODUCT_ID");

$quantity   = 1;
if (!ONCE_PER_PURCHASED_QUANTITY)
{
    $quantity = readParam("QUANTITY");
}

// Add product to the product array
$products[] = array (
    "itemIdentification" => $itemID,
    "quantity"           => $quantity,
);

// Create the order
$order = array(
    "orderIdentification"    => $orderID,
    "customerIdentification" => $customerID,
    "comment"                => $comment,
    "product"                => $products,
);

// Calling webservice
$ticket = doOrder($LC_Username, $LC_Password, $order);
if ($ticket)
{
    Header("HTTP/1.1 200 Ok");
    Header("Content-Type: text/plain");
    print TICKET_URL.$result->order->ticketIdentification;
    exit;
}
else
{
    $error = "No result from WSConnector_doOrder";
    trigger_error($error, E_USER_WARNING);
    printError(500, "Internal Error.");
    exit;
}

// End of Main program

?>

现在这是我得到并且必须使用的代码。它托管在不同的远程服务器上。 我对salesforce非常新,我不确定如何通过远程站点触发调用这个php文件。

基本思路是: 1.创建了Lead的新条目。 2.立即将2个字段(custID和prodID)发送到我上面粘贴的PHP文件(某些变量不同) 3.执行此处理并将2个字段发送回salesforce。

感谢任何帮助或指导。即使是阅读的链接也没关系,因为我完全无能为力。

PS:我有另一个例子,它使用JSON消息,如果这可能会有所不同。 感谢

1 个答案:

答案 0 :(得分:0)

我将重新发布我评论中的链接:)


如果您的PHP端点在开放Web上可见(不是某个Intranet的一部分或只是您自己的localhost),那么最简单的事情就是从Salesforce发送出站消息。不需要编码,只需要在PHP端解析一些XML文档。另外,如果主机无法访问,它会自动尝试重新发送消息......

如果无法从SF服务器访问您的应用程序,那么我认为您的PHP应用程序必须是“演员”。每隔X分钟查询SF以获得新潜在客户或订阅Streaming API ...这意味着您必须在您的PHP应用程序上将凭据存储到SF并记住要么定期更改密码要么设置在“集成用户”上s配置文件“密码永不过期”复选框。

因此,您收到通知,生成门票,时间将其发回。您是否想要假装Lead的更新是由创建它的人完成的,或者您是否希望看到“上次修改者:Integration User”?出站邮件可以包含会话ID,您可以将其用作发起操作的人员(创建潜在客户并解除工作流程) - 至少在他们注销或会话超时之前。

对于回复消息,您可以使用SOAP或REST salesforce apis - 阅读文档以了解如何发送更新命令(如果您想明确它是由与此PHP应用程序关联的特殊用户完成的 - 如何登录API)。我认为用户的个人资料必须勾选“API已启用”,然后才能重新使用某个人的会话,所以也许最好有一个专门用于集成的帐户...

如果它是出站消息,请记住的另一件事是忽略从沙箱发送的消息,因此如果某人创建测试环境,您将不会调用您的“生产”数据库数据库。您还可以记住每次制作沙箱时都要修改出站邮件和远程站点设置,这样您就可以“与prod交谈,测试与测试交谈”。我知道你可以在OM中包含用户的会话ID - 所以也许你也可以添加组织的id(对于生产它将保持不变,每个新的沙箱都会有新的id)。


这种方法的问题在于它可能无法扩展。如果在一个批次中插入1000个潜在客户(例如使用数据加载器) - 您将收到包含1000个出站邮件的垃圾邮件。您的服务器必须能够处理此类负载......但这也意味着您正在使用1个API请求来发回每个更新。您可以在设置中检查API请求的限制 - &gt;公司信息。开发人员版本的限制非常低,沙箱更好,生产效果最好(这也取决于您购买了多少用户许可证)。这就是为什么我问过一些批处理的原因。

更多编码但更可靠的是每隔X分钟要求SF进行更改(Streaming API?普通查询?检查“web hook”答案)并一次性发送所有这些记录的更新。 SELECT Id, Name FROM Lead WHERE Ticket__c = null(注意AND LastModifiedDate >= :lastTimeIChecked)没有任何内容......