Может кто-нибудь сказать мне, где я собираюсь иметь дело с этим ответом тела? - PullRequest
0 голосов
/ 21 марта 2019

Я пишу небольшой плагин для отправки новых пользовательских данных в Capsule CRM через их API.Я могу успешно создать новый объект «Персона» и новую «Задачу», но для того, чтобы связать 2 из них, мне нужно выполнить действия в следующем порядке:

  1. Отправить сведения о партии в Capsule по адресусоздать новую партию (выполняется через wp_remote_post)
  2. Получить тело ответа из этого поста и взять идентификатор части из тела
  3. Отправить детали задачи в Capsule через wp_remote_post, определяющий идентификатор партиикак это взято из ответа первого поста.

Кажется, многие проблемы заключаются в том, что я не могу получить идентификатор из ответа тела первого поста, поэтому задача постоянно публикуется без привязки кСторона, с которой он связан.

Мой код плагина - это верхний фрагмент кода, а ниже приведен пример JSON для того, как выглядит ответ партии.Любые указатели были бы действительно полезны.

Спасибо

// If this file is called directly, abort.
if ( ! defined( 'WPINC' ) ) {
    die;
}

//Find the details of a new user

add_action('um_registration_complete', 'send_doqaru_user', 10, 2);
//add_action ('um_registration_complete' , 'doqaru_redirect_home', 10, 2);

function send_doqaru_user ($user_id){


    $new_doqaru_user = get_userdata($user_id);
    $doqaru_user_email = $new_doqaru_user -> user_email;
    $doqaru_user_phone = $new_doqaru_user -> contact_number;



    // get all the meta data of the newly registered user
    $new_user_data = get_user_meta($user_id);

    // get the first name of the user as a string
    $doqaru_user_firstname = get_user_meta( $user_id, 'first_name', true );
    $doqaru_user_lastname = get_user_meta( $user_id, 'last_name', true );



    if ($doqaru_user_email) {
        error_log ($doqaru_user_email);
    }


    if( ! $new_doqaru_user ){
        error_log( 'Unable to get userdata!' );
        return;
    } 

    $url  = 'https://api.capsulecrm.com/api/v2/parties';
    $body = array(
        'party' => array(
        'type' => 'person',
        'firstName' => $doqaru_user_firstname,
        'lastName' => $doqaru_user_lastname,
        'phoneNumbers' => array(
            array(
                'type'      => 'Work',
                'number'    => $doqaru_user_phone
                )
            ),
        'emailAddresses' => array(
            array(
            'address'       => $doqaru_user_email,
            'type'          => 'Work'

    ))));

    $args = array(
        'method'      => 'POST',
        'timeout'     => 45,
        'sslverify'   => false,
        'headers'     => array(
            'Authorization' => 'Bearer Token goes here',
            'Content-Type'  => 'application/json',
        ),
        'body'        => json_encode($body),
    );

    $request = wp_remote_post( $url, $args ); 

    if ( is_wp_error( $request ) || wp_remote_retrieve_response_code( $request ) != 201 ) {
        error_log( print_r( $request, true ) );
    }

    $response = wp_remote_retrieve_body($request);

    $bodyresponse = json_decode($response, true);

    $partyid = $bodyresponse ["party"]["id"];

    if ($partid) {
        error_log("the party ID is" . $partyid);
    } else {
        error_log ("Could not retrieve a Party ID");

    }


//CREATE THE NEW TASK WITH THE ID OF THE NEW USER
$taskurl = 'https://api.capsulecrm.com/api/v2/tasks';
$taskbody = array(
    "task" => array(
        "party"         => array(
            'id'        => $partyid,
            'type'      => 'person'),
        "description"   => "Follow up on new created user incase it is a lead",
        "dueOn"         => "2019-04-20"
        )
        );

$taskargs = array(
    'method'      => 'POST',
    'timeout'     => 45,
    'sslverify'   => false,
    'headers'     => array(
        'Authorization' => 'Bearer token goes here',
        'Content-Type'  => 'application/json',
    ),
    'body'        => json_encode($taskbody),
);

$taskrequest = wp_remote_post( $taskurl, $taskargs );


}



//REDIRECTION TO DOWNLOADS PAGE
function doqaru_redirect_home() {
    wp_redirect (home_url() . '/member-downloads');
    exit;
}

Хорошо, поэтому я немного подправил свой код, и если я var_dump мой $ body_response, то я получу приведенный ниже массив ассоциаций.Но когда я error_log мой $ partyid, он не может найти значение?

 array(1) {
  ["party"]=>
  array(18) {
    ["id"]=>
    int(182528177)
    ["owner"]=>
    NULL
    ["team"]=>
    NULL
    ["type"]=>
    string(6) "person"
    ["about"]=>
    NULL
    ["title"]=>
    NULL
    ["firstName"]=>
    string(6) "Daniel"
    ["lastName"]=>
    string(10) "Sutherland"
    ["jobTitle"]=>
    NULL
    ["createdAt"]=>
    string(20) "2019-03-29T15:02:33Z"
    ["updatedAt"]=>
    string(20) "2019-03-29T15:02:33Z"
    ["organisation"]=>
    NULL
    ["lastContactedAt"]=>
    NULL
    ["pictureURL"]=>
    string(59) "https://facehub.appspot.com/default/person?text=DS&size=100"
    ["phoneNumbers"]=>
    array(1) {
      [0]=>
      array(3) {
        ["id"]=>
        int(371335500)
        ["type"]=>
        string(4) "Work"
        ["number"]=>
        string(11) "07507681488"
      }
    }
    ["addresses"]=>
    array(0) {
    }
    ["emailAddresses"]=>
    array(1) {
      [0]=>
      array(3) {
        ["id"]=>
        int(371335501)
        ["type"]=>
        string(4) "Work"
        ["address"]=>
        string(24) "d.sutherland86@gmail.com"
      }
    }
    ["websites"]=>
    array(0) {
    }
  }
}

1 Ответ

0 голосов
/ 21 марта 2019

Посмотрите, как json_decode() структурирует ваш JSON.var_dump($bodyresponse) приводит к:

object(stdClass)#5 (1) {
  ["parties"]=>
  array(1) {
    [0]=>
    object(stdClass)#1 (18) {
      ["id"]=>
      int(11587)
      ["type"]=>
      string(6) "person"
      ["about"]=>
      NULL
      ["title"]=>
      NULL
      ["firstName"]=>
      string(5) "Scott"
      ["lastName"]=>
      string(6) "Spacey"
      ["jobTitle"]=>
      string(17) "Creative Director"
      ["createdAt"]=>
      string(20) "2015-09-15T10:43:23Z"
      ["updatedAt"]=>
      string(20) "2015-09-15T10:43:23Z"
      ["organisation"]=>
      NULL
      ["lastContactedAt"]=>
      NULL
      ["owner"]=>
      NULL
      ["team"]=>
      NULL
      ["addresses"]=>
      array(1) {
        [0]=>
        object(stdClass)#2 (7) {
          ["id"]=>
          int(12135)
          ["type"]=>
          NULL
          ["city"]=>
          string(7) "Chicago"
          ["country"]=>
          string(13) "United States"
          ["street"]=>
          string(21) "847 North Rush Street"
          ["state"]=>
          string(2) "IL"
          ["zip"]=>
          string(5) "65629"
        }
      }
      ["phoneNumbers"]=>
      array(1) {
        [0]=>
        object(stdClass)#3 (3) {
          ["id"]=>
          int(12133)
          ["type"]=>
          NULL
          ["number"]=>
          string(12) "773-338-7786"
        }
      }
      ["websites"]=>
      array(0) {
      }
      ["emailAddresses"]=>
      array(1) {
        [0]=>
        object(stdClass)#4 (3) {
          ["id"]=>
          int(12134)
          ["type"]=>
          string(4) "Work"
          ["address"]=>
          string(22) "scott@homestyleshop.co"
        }
      }
      ["pictureURL"]=>
      string(64) "https://capsulecrm.com/theme/default/images/person_avatar_70.png"
    }
  }
}

id, к которому вы стремитесь, становится int в object в array в object.Вам нужно использовать обозначение объекта (->), чтобы получить то, что вы ищете:

$party_id = json_decode($bodyresponse)->parties[0]->id;
var_dump($party_id);
// Result: int(11587)

Repl.it

...