2015-04-16 5 views
2

У меня настоящая головная боль, добавляющая контакт с dotmailer с помощью nusoap. Я использую метод AddContactToAddressBook, но я не могу заставить его работать. Оператор if возвращает успех, но echo "<pre>" . print_r($result, true) . "</pre>"; ничего не возвращает, и когда я проверяю dotmailer, там нет нового контакта. Я потратил несколько недель, пытаясь заставить это работать без какого-либо успеха, и теперь я в недоумении, где проблема!Добавление контакта в адресную книгу dotmailer с использованием API

<?php 
$email='[email protected]'; 
function subscribe($email, &$result) 
{ 
    $wsdlPath = "https://apiconnector.com/v2/api.svc?wsdl"; 

    $client=new soapclient($wsdlPath,'wsdl'); 
    $client->setCredentials("[email protected]","xxxxxx"); 
    $error = $client->getError(); 
    $result = $client->call('AddContactToAddressBook',array('addressBookId'=>xxxxxx,'email'=>'[email protected]')); 

    if($client->fault) { 
     $rv = false; 
    } else { 
     // Check for errors 
     if($error) { 
      $rv = false; 
     } else { 
      $rv = true; 
     } 
    } 
    return $rv; 
} 
      echo "<pre>" . print_r($result, true) . "</pre>"; 

if(subscribe("[email protected]", $result)) { 
    echo "success<br />"; 
    print_r($result); 
} else { 
    echo "failed<br />"; 
} 
?> 

ответ

2

Я поставил пользовательские поля в другом массиве, и в настоящее время работает. Это то, что я получил сейчас:

<?php 

/** POST EMAIL FIRST AND GET CONTACT FROM DOTMAILER */ 
$postContactUrl = 'https://apiconnector.com/v2/contacts/'; 
$data = array(
    'Email' => '[email protected]', //email to post 
    'EmailType' => 'Html', //other option is PlainText 
    'dataFields' => array(
    array(
    'Key' => 'CITY', 
    'Value' => $_POST['address2']), 
    array(
    'Key' => 'COUNTRY', 
    'Value' => $country_name), 
    array(
    'Key' => 'FIRSTNAME', 
    'Value' => $_POST['name_first']), 
    array(
    'Key' => 'FULLNAME', 
    'Value' => $_POST['name_first']." ".$_POST['name_last']), 
    array(
    'Key' => 'LASTNAME', 
    'Value' => $_POST['name_last']), 
    array(
    'Key' => 'POSTCODE', 
    'Value' => $_POST['postcode']), 
    array(
    'Key' => 'STREET', 
    'Value' => $_POST['address1']), 
    array(
    'Key' => 'TOWN', 
    'Value' => $_POST['address3']), 
    ) 
); 
//post email and response will be contact object from dotmailer 
$contact = execute_post($postContactUrl, $data); 

/** ADD CONTACT TO ADDRESS BOOK */ 
$addContactToAddressBookUrl = 'https://apiconnector.com/v2/address-books/' . 'address-book-id' . '/contacts'; //add your address book id 
//post contact to address book and response will be address book object from dotmailer 
$book = execute_post($addContactToAddressBookUrl, $contact); 

/** 
* if you want to check if there was an error you can 
* check it by calling this on response. 
* example $book->message 
*/ 

echo "<pre>" . print_r($data, true) . "</pre>"; 
// echo "<pre>" . print_r($contact, true) . "</pre>"; 
// echo "<pre>" . print_r($book, true) . "</pre>"; 

//Function to initiate curl, set curl options, execute and return the response 
function execute_post($url, $data){ 
    //encode the data as json string 
    $requestBody = json_encode($data); 

    //initialise curl session 
    $ch = curl_init(); 

    //curl options 
    curl_setopt($ch, CURLAUTH_BASIC, CURLAUTH_DIGEST); 
    curl_setopt($ch, CURLOPT_USERPWD, 'user-name' . ':' . 'password'); // credentials 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $requestBody); 
    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array ('Accept: ' . 'application/json' ,'Content-Type: application/json')); 

    //curl execute and json decode the response 
    $responseBody = json_decode(curl_exec($ch)); 

    //close curl session 
    curl_close($ch); 

    return $responseBody; 
} 
?> 
1

Вы сделали пару ошибок в своем сценарии. Имя класса - SoapClient, а не soapclient. Вам также нужно будет использовать завиток, чтобы выполнить то, что вы хотите сделать.

Я работаю для dotmailer, поэтому я могу объяснить вам немного в первую очередь. Вы не можете публиковать/добавлять электронную почту в адресную книгу напрямую. Сначала вам нужно отправить электронное письмо в dotmailer, вы получите контактный объект в ответ. Чем вы можете использовать этот контактный объект для публикации/добавления электронной почты/контакта в адресную книгу.

Ниже вы найдете полный рабочий пример того, что вам нужно будет сделать. Также по этой ссылке, чтобы чтение Описание API https://apiconnector.com/v2/help/wadl

<?php 

/** POST EMAIL FIRST AND GET CONTACT FROM DOTMAILER */ 
$postContactUrl = 'https://apiconnector.com/v2/contacts/'; 
$data = array(
    'Email' => '[email protected]', //email to post 
    'EmailType' => 'Html', //other option is PlainText 
); 
//post email and response will be contact object from dotmailer 
$contact = execute_post($postContactUrl, $data); 

/** ADD CONTACT TO ADDRESS BOOK */ 
$addContactToAddressBookUrl = 'https://apiconnector.com/v2/address-books/' . 'address-book-id' . '/contacts'; //add your address book id 
//post contact to address book and response will be address book object from dotmailer 
$book = execute_post($addContactToAddressBookUrl, $contact); 

/** 
* if you want to check if there was an error you can 
* check it by calling this on response. 
* example $book->message 
*/ 

echo "<pre>" . print_r($contact, true) . "</pre>"; 
echo "<pre>" . print_r($book, true) . "</pre>"; 

//Function to initiate curl, set curl options, execute and return the response 
function execute_post($url, $data){ 
    //encode the data as json string 
    $requestBody = json_encode($data); 

    //initialise curl session 
    $ch = curl_init(); 

    //curl options 
    curl_setopt($ch, CURLAUTH_BASIC, CURLAUTH_DIGEST); 
    curl_setopt($ch, CURLOPT_USERPWD, 'user-name' . ':' . 'password'); // credentials 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $requestBody); 
    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array ('Accept: ' . 'application/json' ,'Content-Type: application/json')); 

    //curl execute and json decode the response 
    $responseBody = json_decode(curl_exec($ch)); 

    //close curl session 
    curl_close($ch); 

    return $responseBody; 
} 
+0

Спасибо вам большое, что сработало !! Только один вопрос, у нас есть много настраиваемых полей, таких как ORDER-VOUCHER, как мне получить информацию в этих полях? Я попытался добавить '' ORDER-VOUCHER '=>' 123 ', 'к массиву данных, но это не сработало –

+0

@Cristik, как добавить пользовательские поля? Я хочу добавить имя подписчика и другие данные, такие как код ваучера заказа. Я попробовал это: '$ data = array ( 'Email' => '[email protected]', // email для сообщения 'EmailType' => 'Html', // другой параметр PlainText 'datafields' = > array ( \t 'key' => 'order-voucher', \t 'value' => '123',) \t); 'но это не сработало –