2014-11-21 103 views
1

我正在研究一个需要与Microsoft Dynamics CRM集成的PHP应用程序。我研究了直接在PHP和MSCRM服务器之间进行通信的方式,最终决定使用C#桥设计它,即PHP应用程序连接到与MSCRM交互的C#服务。PHP和C之间的安全通信#

现在我的问题是安全性,C#服务和MSCRM服务器之间的通信是安全的,但在PHP应用程序和C#服务之间,我对如何实现某种加密有点困惑。

基本上,我在寻找建议,有没有人处理过这样的问题?你做了什么?有没有一个简单,安全的方法来做到这一点,还是一个复杂的过程?

+3

添加SSL/TLS到主机运行web服务,并确保您的php使用用户名/密码/密钥系统对应用程序进行身份验证,您会没事的。 – Dave 2014-11-21 13:41:06

+0

感谢您的回复,戴夫。我当然希望我能够将SSL放在主机上,但问题是我可能无法始终控制服务器,但我仍然需要确保它的安全;所以如果你必须不使用SSL,那你会怎么做? – 2014-11-21 18:16:51

+1

如果SSL不是选项,则必须使用消息级别加密来确保通信免受嗅探攻击。查看WCF消息安全性。 http://msdn.microsoft.com/en-us/library/ff648863.aspx – MvdD 2014-11-21 23:33:10

回答

0

您可以让PHP直接和安全地与CRM交谈。额外的桥梁只是开销,实际上并没有提供太多好处。

这里有一个博客帖子与CRM在线PHP的辅助类: http://www.hashtagcrm.com/?p=17

与助手刚开始,然后您需要任何特定的功能扩展。该助手甚至还包括一个样本函数,演示如何添加自己的特定功能:在你的主程序

//Returns the Parent Account Name of the specified Contact 
    public function sampleFunction($contactid){ 

    $getParentCustomer = ' 
         <Retrieve xmlns="http://schemas.microsoft.com/xrm/2011/Contracts/Services" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
          <entityName>contact</entityName> 
          <id>'.$contactid.'</id> 
          <columnSet xmlns:a="http://schemas.microsoft.com/xrm/2011/Contracts"> 
          <a:AllColumns>false</a:AllColumns> 
          <a:Columns xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> 
           <b:string>parentcustomeridname</b:string> 
          </a:Columns> 
          </columnSet> 
         </Retrieve>'; 

    $getParentCustomerResult = $this->sendQuery($getParentCustomer, 'Retrieve'); 

    $responsedom = new DomDocument(); 
    $responsedom->loadXML($getParentCustomerResult); 
    $KeyValuePairs = $responsedom->getElementsbyTagName("KeyValuePairOfstringanyType"); 

    foreach($KeyValuePairs as $results) { 
     if ($results->childNodes->item(0)->nodeValue == "parentcustomeridname") { 
     return $results->childNodes->item(1)->childNodes->item(0)->nodeValue; 
     } 
     else { 
     return 'No Result'; 
     } 
    } 
    } 

然后,你可以运行这样的事情:

require_once('dynamicsclient.php'); 
$dynamicsClient = new dynamicsClient(0); 

//prints the Parent Account name of the specified Contact ID 
echo $dynamicsClient->sampleFunction("<CONTACTID>");