Прослушайте запрос HTTP POST в Wordpress, а затем отправьте данные в форму Hubspot.

Я пытаюсь создать ссылку API для приема HTTP-запроса POST с некоторыми данными клиента (например, именем, фамилией, адресом электронной почты) в WordPress. После получения этих данных код должен отправить еще один запрос POST в настраиваемую форму Hubspot, создав новый контакт.

Я могу отправить данные о клиенте на моем локальном компьютере с помощью запроса curl, например curl -d "[email protected]" -X POST https://forms.hubspot.com/uploads/form/v2/{portalId}/{formGuid}. Это прекрасно работает.

В продолжение я попытался создать новый шаблон страницы внутри своего каталога шаблонов и создать страницу с использованием этого шаблона на панели инструментов WordPress. Когда я пытаюсь отправить эту новую страницу с запросом на завивание, например curl -d "[email protected]" -X POST https://mywordpresssite.com/hubspot_submit_post/, это не работает. Я получаю ответ HTTP 200 OK, но новый клиент не создается в Hubspot.

<?php 
    /* Template Name: Lead submit POST to Hubspot */ 

    if ( ! defined( ‘ABSPATH’ ) ) {
        exit;
    }

    $pageUrl = 'mywordpresssite.com/hubspot_submit_post.php';
    $pageName = 'Leads';
    $portalId = "some id";
    $formGuid = "some guid";

   //Process a new form submission in HubSpot in order to create a new Contact.

    $hubspotutk      = $_COOKIE['hubspotutk']; //grab the cookie from the visitors browser.
    $ip_addr         = $_SERVER['REMOTE_ADDR']; //IP address too.
    $hs_context      = array(
        'hutk' => $hubspotutk,
        'ipAddress' => $ip_addr,
        'pageUrl' => $pageUrl,
        'pageName' => $pageName
    );
    $hs_context_json = json_encode($hs_context);

    $firstname = isset($_POST["first_name"]) ? $_POST["first_name"] : '';
    $lastname = isset($_POST["last_name"]) ? $_POST["last_name"] : '';
    $email = isset($_POST["email"]) ? $_POST["email"] : '';
    $phone = isset($_POST["phone"]) ? $_POST["phone"] : '';
    $company = isset($_POST["company"]) ? $_POST["phone"] : '';
    $company_size = isset($_POST["company_size"]) ? $_POST["company_size"] : '';
    $jobtitle = isset($_POST["jobtitle"]) ? $_POST["jobtitle"] : '';
    $state = isset($_POST["state"]) ? $_POST["state"] : '';
    $city = isset($_POST["city"]) ? $_POST["city"] : '';
    $industry = isset($_POST["industry"]) ? $_POST["industry"] : '';

    //Need to populate these variable with values from the form.
    $str_post = "first_name=" . $firstname 
        . "&last_name=" . $lastname 
        . "&email=" . $email 
        . "&phone=" . $phone  
        . "&company=" . $company
        . "&company_size=" . $company_size
        . "&job_title=" . $jobtitle
        . "&state=" . $state
        . "&city=" . $city
        . "&industry=" . $industry
        . "&hs_context=" . urlencode($hs_context_json); //Leave this one be

    header($str_post);

    $endpoint = 'https://forms.hubspot.com/uploads/form/v2/' . $portalId . '/' . $formGuid;

    $data = wp_remote_post($endpoint, array(
        'headers' => array(
          'Content-Type' => 'application/x-www-form-urlencoded'
        ),
        'body' => $str_post
      ));
?>

Любая помощь приветствуется. Новый клиент должен быть создан в Hubspot, когда я отправляю запрос POST с завитком, например curl -d "[email protected]" -X POST https://mywordpresssite.com/hubspot_submit_post/


person Curtis Hohl    schedule 07.05.2019    source источник
comment
Вы пробовали var_dump($data) после wp_remote_post?   -  person Chris White    schedule 08.05.2019


Ответы (1)


По какой-то причине у Wordpress возникла проблема с использованием константы ABSPATH в этом пользовательском файле php. Я убрал эту галочку с начала кода.

Кроме того, получение hubspotutk из этого типа запроса не сработало.

Поиск ошибок PHP с помощью WP_DEBUG и WP_DEBUG_LOG значительно упрощает процесс поиска этих проблем: https://wpadvancedads.com/finding-errors-with-wp_debug/

Вот упрощенный и рабочий код:

<?php 
    /* Template Name: Business.com POST to Hubspot */ 

    $pageUrl = 'mywordpresssite.com/hubspot_submit_post.php';
    $pageName = 'Business.com Leads';
    $portalId = "some id";
    $formGuid = "some guid";

   //Process a new form submission in HubSpot in order to create a new Contact.

    $firstname = isset($_POST["first_name"]) ? $_POST["first_name"] : '';
    $lastname = isset($_POST["last_name"]) ? $_POST["last_name"] : '';
    $email = isset($_POST["email"]) ? $_POST["email"] : '';
    $phone = isset($_POST["phone"]) ? $_POST["phone"] : '';
    $company = isset($_POST["company"]) ? $_POST["company"] : '';
    $company_size = isset($_POST["company_size"]) ? $_POST["company_size"] : '';
    $jobtitle = isset($_POST["jobtitle"]) ? $_POST["jobtitle"] : '';
    $state = isset($_POST["state"]) ? $_POST["state"] : '';
    $city = isset($_POST["city"]) ? $_POST["city"] : '';
    $industry = isset($_POST["industry"]) ? $_POST["industry"] : '';

    //Need to populate these variable with values from the form.
    $str_post = "first_name=" . $firstname 
        . "&last_name=" . $lastname 
        . "&email=" . $email 
        . "&phone=" . $phone  
        . "&company=" . $company
        . "&company_size=" . $company_size
        . "&job_title=" . $jobtitle
        . "&state=" . $state
        . "&city=" . $city
        . "&industry=" . $industry;

    $endpoint = 'https://forms.hubspot.com/uploads/form/v2/' . $portalId . '/' . $formGuid;

    $data = wp_remote_post($endpoint, array(
        'headers' => array(
          'Content-Type' => 'application/x-www-form-urlencoded'
        ),
        'body' => $str_post
      ));
?>
person Curtis Hohl    schedule 08.05.2019