Soap Magento和salesforce的整合,在Magento商店完成订单后,在salesfore内部创造机会

Soap Magento和salesforce的整合,在Magento商店完成订单后,在salesfore内部创造机会,soap,curl,salesforce,magento,Soap,Curl,Salesforce,Magento,我已经实现了salesforce与magento orders的集成。为了实现这一点,我遵循了下面给出的步骤。在用户帐户中插入salesforce_company_id和salesforce_contact_id时,我在第4步中出错 1)在管理中添加自定义选项“已关闭”,以完成任何订单。 public function massCompleteAction(){ $orderIds = $this->getRequest()->getPost('order_ids', array()

我已经实现了salesforce与magento orders的集成。为了实现这一点,我遵循了下面给出的步骤。在用户帐户中插入salesforce_company_id和salesforce_contact_id时,我在第4步中出错

1)在管理中添加自定义选项“已关闭”,以完成任何订单。

public function massCompleteAction(){
$orderIds = $this->getRequest()->getPost('order_ids', array());
$countCompleteOrder = 0;
foreach ($orderIds as $orderId) {
$order = Mage::getModel('sales/order')->load($orderId);
if ($order->canComplete()) {
$order->complete()->save();
$countCompleteOrder++;
}
}
if ($countCompleteOrder>0) {
$this->_getSession()->addSuccess($this->__('%s order(s) successfully put on complete', $countCompleteOrder));
}else {
// selected orders is not available for hold
}
$this->_redirect('*/*/');
} 
2)为用户帐户、Salesforce公司和Salesforce联系人添加两个附加字段。

public function massCompleteAction(){
$orderIds = $this->getRequest()->getPost('order_ids', array());
$countCompleteOrder = 0;
foreach ($orderIds as $orderId) {
$order = Mage::getModel('sales/order')->load($orderId);
if ($order->canComplete()) {
$order->complete()->save();
$countCompleteOrder++;
}
}
if ($countCompleteOrder>0) {
$this->_getSession()->addSuccess($this->__('%s order(s) successfully put on complete', $countCompleteOrder));
}else {
// selected orders is not available for hold
}
$this->_redirect('*/*/');
} 
我遵循了以下链接

3)创建自定义转销商注册表单,该表单将在magento中创建一个简单用户

public function createResellerAction()
{

$params = $this->getRequest()->getParams();
  $customer = Mage::getModel('customer/customer');
  $password = $params["password"];
  $email = $params["email"];
  $customer->setWebsiteId(Mage::app()->getWebsite()->getId());
  $customer->loadByEmail($email);
 //Zend_Debug::dump($customer->debug()); exit;
if(!$customer->getId()) {
$customer->setEmail($email);
$customer->setFirstname($params["firstname"]);
$customer->setLastname($params["lastname"]);
$customer->setPassword($password);

 try {
$customer->save();
$customer->setConfirmation(null);
$customer->save();
Mage::getSingleton('customer/session')->loginById($customer->getId());
   }
   catch (Exception $ex) {
//Zend_Debug::dump($ex->getMessage());
}

$_custom_address = array (
'firstname' => $params["firstname"],
'lastname' => $params["lastname"],
'street' => array (
    '0' => $params["add1"],
    '1' => $params["add2"],
),

'city' => $params["city"],
'region_id' => '',
'region' => '',
'postcode' => $params["zipcode"],
'country_id' => '', /* Croatia */
'telephone' => $params["phone"],
);

$customAddress = Mage::getModel('customer/address');
$customAddress->setData($_custom_address)
        ->setCustomerId($customer->getId())
        ->setIsDefaultBilling('1')
        ->setIsDefaultShipping('1')
        ->setSaveInAddressBook('1');

    try {
$customAddress->save();
        }
    catch (Exception $ex) {
//Zend_Debug::dump($ex->getMessage());
    } 
4)在经销商行动期间在salesforce中创建公司和联系人

$sObject1 = new stdclass();
            $sObject1->Name = $params["company"];    
            $createResponse1 = $mySforceConnection->create(array($sObject1), 'Account');
            foreach ($createResponse1 as $createResult1) {
                $compid = $createResult1->id;
                 }

            $sObject3 = new stdclass();
            $sObject3->FirstName = $params["firstname"];
            $sObject3->LastName = $params["lastname"];
            $sObject3->Email = $params["email"];
            $sObject3->AccountId = $compid;  
            $createResponse2 = $mySforceConnection->create(array($sObject3), 'Contact');
            foreach ($createResponse2 as $createResult2) {
                $contid = $createResult2->id;
                 }
             $saledata = array (
            'salesforce_company_id' => $compid,
             'salesforce_contact_id' => $contid,
             );
             $customersale = Mage::getModel('customer/customer');
            $customersale->setWebsiteId(Mage::app()->getWebsite()->getId());
  $customersale->loadByEmail($email);
 //Zend_Debug::dump($customer->debug()); exit;
if($customersale->getId()) {
              $customersale->setData($saledata);
                   try {
                    $customersale->save();
                     $customersale->setConfirmation(null);
                     $customersale->save();
                  }
                catch (Exception $ex) {
                 $message = $this->__($customer);
                //Zend_Debug::dump($ex->getMessage());
                Mage::getSingleton('core/session')->addError($message);
                }
            }
请检查第4步底部我出错的代码

$saledata = array (
            'salesforce_company_id' => $compid,
             'salesforce_contact_id' => $contid,
             );
             $customersale = Mage::getModel('customer/customer');
            $customersale->setWebsiteId(Mage::app()->getWebsite()->getId());
  $customersale->loadByEmail($email);
 //Zend_Debug::dump($customer->debug()); exit;
if($customersale->getId()) {
              $customersale->setData($saledata);
                   try {
                    $customersale->save();
                     $customersale->setConfirmation(null);
                     $customersale->save();
                  }
                catch (Exception $ex) {
                 $message = $this->__($customer);
                //Zend_Debug::dump($ex->getMessage());
                Mage::getSingleton('core/session')->addError($message);
                }
            }

我等待您的回复。

magento有一个很好的扩展,它为您提供了所有这些,甚至更多:

请看一下“帮助和文档”选项卡,在这里您甚至可以找到带有用例场景的电影


对客户调用
setData()
将覆盖该模型中存在的数据。尝试使用
addData()
。谢谢@nick,我找到了解决方案$客户->设置公司id($compid);$customer->setSalesforce\u contact\u id($contid);试试{$customer->save();}catch(异常$ex1){//Zend_Debug::dump($ex->getMessage());}是的,没错。如果使用
->setData($key,$value)
而不是
->setData(array())
则只替换数据存储中的一项,而不是整个项。使用
->addData()
可以实现您想要的功能:)谢谢@Nick,这个问题解决了