<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>IT science: заметки с тегом автоматизация</title>
<link>https://itscience.pro/tags/avtomatizaciya/</link>
<description>IT science — статьи и инструкции из мира IT</description>
<author></author>
<language>ru</language>
<generator>Aegea 11.4 (v4171)</generator>

<itunes:subtitle>IT science — статьи и инструкции из мира IT</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>массовая регистрация graphisoft id</title>
<guid isPermaLink="false">41</guid>
<link>https://itscience.pro/all/massovaya-registraciya-graphisoft-id/</link>
<pubDate>Fri, 24 Sep 2021 18:45:02 +0300</pubDate>
<author></author>
<comments>https://itscience.pro/all/massovaya-registraciya-graphisoft-id/</comments>
<description>
&lt;p&gt;Встал вопрос получить сотрудникам Graphisoft id, но никакого функционала у производителя нет, чтобы сделать это массово.  Печаль.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://itscience.pro/pictures/izobrazhenie_2021-09-24_184451.png" width="250" height="237" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Итак, проанализировав механизм регистрации и добавления пользователя в состав компании получаем следующий алгоритм:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;регистрация пользователя на сайте graphisoft.com&lt;/li&gt;
&lt;li&gt;подтверждение регистрации в посте пользователя&lt;/li&gt;
&lt;li&gt;авторизация на сайте graphisoft.com под административной учетной записью&lt;/li&gt;
&lt;li&gt;отправка приглашения пользователю&lt;/li&gt;
&lt;li&gt;авторизация  на сайте graphisoft.com под пользовательской учетной записью&lt;/li&gt;
&lt;li&gt;подтверждение приглашения&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;как родилось решение описано тут:&lt;br /&gt;
&lt;a href="https://voronin.one/all/kak-nelzya-otnositsya-k-korporativnym-klientam/"&gt;1 часть, «как нельзя относиться к корпоративным клиентам»&lt;/a&gt;&lt;br /&gt;
&lt;a href="https://voronin.one/all/analiz-poluchenie-ishodnyh-dannyh/"&gt;2 часть, «анализ, получение исходных данных»&lt;/a&gt;&lt;br /&gt;
&lt;a href="https://voronin.one/all/kropotlivaya-rabota-i-dolgozhdanny-uspeh/"&gt;3 часть, «кропотливая работа и долгожданный успех»&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;получилось неплохо, полностью автоматизированная система, работает следующим образом:&lt;br /&gt;
при появлении нового сотрудника создается для него graphisoft id, добавляется в состав компании и на почту высылаются данные с логином и паролем, а так же инструкция по использованию последних;&lt;br /&gt;
после увольнения сотрудника или ухода в декрет — graphisoft id исключается из списка сотрудников компании.&lt;/p&gt;
&lt;p&gt;ниже сам код регистрации одно пользователя, как сделать это массово — я думаю разберетесь&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;&amp;lt;?php

// данные регистрируемого сотрудника
$fname = &amp;#039;Иван&amp;#039;;
$sname = &amp;#039;Петров&amp;#039;;
$email = &amp;#039;user@domain.ru&amp;#039;;
$pasword = &amp;#039;koo0ovo5Kamu&amp;#039;;

// данные администратора компании
$admin_login = &amp;#039;admin@domain.ru&amp;#039;;
$admin_password = &amp;#039;P@5$w0rD&amp;#039;;

$header = &amp;#039;&amp;#039;;

function get_url($url, $method, $ctype, $referer, $data) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
if ($data!==&amp;#039;&amp;#039;) {
if ($ctype == 1) {
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
} else if ($ctype == 2) {
curl_setopt($ch, CURLOPT_POSTFIELDS,http_build_query($data));
} else if ($ctype == 3) {
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE);
curl_setopt($ch, CURLOPT_POSTFIELDS,http_build_query($data));
}
}
curl_setopt($ch, CURLOPT_ENCODING, &amp;#039;gzip, deflate&amp;#039;);
$headers = array();
$headers[] = &amp;#039;Connection: keep-alive&amp;#039;;
$headers[] = &amp;#039;Sec-Ch-Ua: \&amp;quot; Not;A Brand\&amp;quot;;v=\&amp;quot;99\&amp;quot;, \&amp;quot;Opera\&amp;quot;;v=\&amp;quot;79\&amp;quot;, \&amp;quot;Chromium\&amp;quot;;v=\&amp;quot;93\&amp;quot;&amp;#039;;
$headers[] = &amp;#039;Dnt: 1&amp;#039;;
$headers[] = &amp;#039;Sec-Ch-Ua-Mobile: ?0&amp;#039;;
$headers[] = &amp;#039;User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36 OPR/79.0.4143.22&amp;#039;;
if ($ctype == 1) {
$headers[] = &amp;#039;Content-Type: application/json; charset=UTF-8&amp;#039;;
} else {
$headers[] = &amp;#039;Content-Type: application/x-www-form-urlencoded; charset=UTF-8&amp;#039;;
}
$headers[] = &amp;#039;Accept: application/json, text/javascript, */*; q=0.01&amp;#039;;
$headers[] = &amp;#039;X-Requested-With: XMLHttpRequest&amp;#039;;
$headers[] = &amp;#039;Sec-Ch-Ua-Platform: \&amp;quot;Windows\&amp;quot;&amp;#039;;
$headers[] = &amp;#039;Sec-Fetch-Site: same-origin&amp;#039;;
$headers[] = &amp;#039;Sec-Fetch-Mode: cors&amp;#039;;
$headers[] = &amp;#039;Sec-Fetch-Dest: empty&amp;#039;;
$headers[] = &amp;#039;Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7&amp;#039;;
$headers[] = &amp;#039;Origin: &amp;#039;.$referer;
$headers[] = &amp;#039;Referer: &amp;#039;.$referer;
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__).&amp;#039;/cookie.txt&amp;#039;);
curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__).&amp;#039;/cookie.txt&amp;#039;);
$response = curl_exec($ch);
global $header;
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);
return $response;
if (curl_errno($ch)) {
echo &amp;#039;Error:&amp;#039; . curl_error($ch);
}
curl_close($ch);
}

// удаляем старые куки
if (file_exists(dirname(__FILE__).&amp;#039;/cookie.txt&amp;#039;)) {
   unlink(dirname(__FILE__).&amp;#039;/cookie.txt&amp;#039;);
}
// заходим на главную
get_url(&amp;#039;https://graphisoft.com/ru&amp;#039;,&amp;#039;GET&amp;#039;,1,&amp;#039;&amp;#039;,&amp;#039;&amp;#039;);
// переходим на форму пользователя
get_url(&amp;#039;https://graphisoftid.graphisoft.com/Account/ServiceLogin?Application=GRAPHISOFT&amp;amp;ReturnUrl=https://graphisoft.com/ru&amp;#039;,&amp;#039;GET&amp;#039;,1,&amp;#039;https://graphisoftid.graphisoft.com/&amp;#039;,&amp;#039;&amp;#039;);
// переходим на форму регистрации
get_url(&amp;#039;https://graphisoftid.graphisoft.com/#/register/3/https%3a%2f%2fgraphisoft.com%2fru&amp;#039;,&amp;#039;GET&amp;#039;,1,&amp;#039;https://graphisoftid.graphisoft.com/&amp;#039;,&amp;#039;&amp;#039;);

//проверяем e-mail
$check_mail = get_url(&amp;#039;https://graphisoftid.graphisoft.com/api/user/CheckEmail/&amp;#039;,&amp;#039;PUT&amp;#039;,2,&amp;#039;https://graphisoftid.graphisoft.com/&amp;#039;,array(&amp;quot;EmailAddress&amp;quot; =&amp;gt; $email));
if ($check_mail == &amp;#039;true&amp;#039;) {
$data = array(&amp;#039;applicationName&amp;#039; =&amp;gt; null,
  &amp;#039;customDataObject&amp;#039; =&amp;gt; null,
  &amp;#039;redirectUrl&amp;#039; =&amp;gt; null,
  &amp;#039;emailHintLocalizationKey&amp;#039; =&amp;gt; null,
  &amp;#039;firstName&amp;#039; =&amp;gt; $fname,
  &amp;#039;lastName&amp;#039; =&amp;gt; $sname,
  &amp;#039;isValidated&amp;#039; =&amp;gt; true,
  &amp;#039;email&amp;#039; =&amp;gt; $email,
  &amp;#039;password&amp;#039; =&amp;gt; $pasword,
  &amp;#039;confirmPassword&amp;#039; =&amp;gt; $pasword,
  &amp;#039;isPrivacyPolicyAccepted&amp;#039; =&amp;gt; true,
  &amp;#039;companyName&amp;#039; =&amp;gt; &amp;#039;ООО &amp;quot;Рога и Копыта&amp;quot;&amp;#039;,
  &amp;#039;countryId&amp;#039; =&amp;gt; 186,
  &amp;#039;federated&amp;#039; =&amp;gt; false,
  &amp;#039;callbackUrl&amp;#039; =&amp;gt; &amp;#039;https://graphisoft.com/ru&amp;#039;,
  &amp;#039;isDirty&amp;#039; =&amp;gt; true,
  &amp;#039;errors&amp;#039; =&amp;gt; array());

//echo json_encode($data).&amp;quot;\n&amp;quot;;

$ecoded_json = get_url(&amp;#039;https://graphisoftid.graphisoft.com/api/user/CreateUser&amp;#039;,&amp;#039;POST&amp;#039;,1,&amp;#039;https://graphisoftid.graphisoft.com/&amp;#039;,$data);

$jsonObj = json_decode($ecoded_json);

if ($jsonObj === null &amp;amp;&amp;amp; json_last_error() !== JSON_ERROR_NONE) {
   echo &amp;quot;у меня не получилось отправить регистрационную форму с данными...  извините\n&amp;quot;;
} else {
// удаляем старые куки
unlink(dirname(__FILE__).&amp;#039;/cookie.txt&amp;#039;);
get_url($jsonObj-&amp;gt;{&amp;#039;VerificationURL&amp;#039;}.$jsonObj-&amp;gt;{&amp;#039;VerificationCode&amp;#039;},&amp;#039;GET&amp;#039;,1,&amp;#039;&amp;#039;,&amp;#039;&amp;#039;);
$gsid_url = get_url(&amp;#039;https://graphisoftid.graphisoft.com/api/user/VerifyUser&amp;#039;,&amp;#039;PUT&amp;#039;,2,&amp;#039;https://graphisoftid.graphisoft.com/&amp;#039;,array(&amp;quot;code&amp;quot; =&amp;gt; $jsonObj-&amp;gt;{&amp;#039;VerificationCode&amp;#039;}));
$parts = parse_url($gsid_url);
parse_str($parts[&amp;#039;query&amp;#039;], $query);
$user_gsid = $query[&amp;#039;gsid&amp;#039;];
if ($user_gsid !== &amp;#039;&amp;#039;) {
echo &amp;quot;пользователь &amp;quot;.$email.&amp;quot; успешно зарегистрирован (Graphisoft sid: &amp;quot;.$user_gsid.&amp;quot;)\n&amp;quot;;
// удаляем старые куки
unlink(dirname(__FILE__).&amp;#039;/cookie.txt&amp;#039;);
// заходим на главную
get_url(&amp;#039;https://graphisoft.com/ru&amp;#039;,&amp;#039;GET&amp;#039;,1,&amp;#039;&amp;#039;,&amp;#039;&amp;#039;);
get_url(&amp;#039;https://graphisoftid.graphisoft.com/&amp;#039;,&amp;#039;GET&amp;#039;,1,&amp;#039;&amp;#039;,&amp;#039;&amp;#039;);
// авторизуемся под пользователем
$data = array(&amp;#039;email&amp;#039; =&amp;gt; $admin_login,
  &amp;#039;errors&amp;#039; =&amp;gt; array(),
  &amp;#039;isDirty&amp;#039; =&amp;gt; true,
  &amp;#039;isNullo&amp;#039; =&amp;gt; false,
  &amp;#039;password&amp;#039; =&amp;gt; $admin_password);
$json_response = get_url(&amp;#039;https://graphisoftid.graphisoft.com/api/Authenticate/Login&amp;#039;,&amp;#039;POST&amp;#039;,1,&amp;#039;https://graphisoftid.graphisoft.com/&amp;#039;,$data);
$obj = json_decode($json_response);
$companyGsId = $obj-&amp;gt;{&amp;#039;Company&amp;#039;}-&amp;gt;{&amp;#039;GsId&amp;#039;};
// Загружаем список подключенных пользователей
foreach ($obj-&amp;gt;{&amp;#039;Company&amp;#039;}-&amp;gt;{&amp;#039;CompanyUsers&amp;#039;} as $user) {
$users_list[] = array(&amp;quot;FirstName&amp;quot; =&amp;gt; $user-&amp;gt;{&amp;#039;FirstName&amp;#039;},&amp;quot;LastName&amp;quot; =&amp;gt; $user-&amp;gt;{&amp;#039;LastName&amp;#039;},&amp;quot;EmailAddress&amp;quot; =&amp;gt; $user-&amp;gt;{&amp;#039;EmailAddress&amp;#039;},&amp;quot;GsId&amp;quot; =&amp;gt; $user-&amp;gt;{&amp;#039;GsId&amp;#039;});
}


$data = array(&amp;#039;companyGsId&amp;#039; =&amp;gt; $companyGsId,
  &amp;#039;email&amp;#039; =&amp;gt; $email,
  &amp;#039;errors&amp;#039; =&amp;gt; array(),
  &amp;#039;isDirty&amp;#039; =&amp;gt; true,
  &amp;#039;requestedGraphisoftUserId&amp;#039; =&amp;gt; $user_gsid);
get_url(&amp;#039;https://graphisoftid.graphisoft.com/api/user/SendInvitation&amp;#039;,&amp;#039;PUT&amp;#039;,2,&amp;#039;https://graphisoftid.graphisoft.com/&amp;#039;,$data);
echo &amp;quot;выслано приглашение присоединиться к компании\n&amp;quot;;
// удаляем старые куки
unlink(dirname(__FILE__).&amp;#039;/cookie.txt&amp;#039;);
// переходим на форму пользователя
get_url(&amp;#039;https://graphisoftid.graphisoft.com/&amp;#039;,&amp;#039;GET&amp;#039;,1,&amp;#039;&amp;#039;,&amp;#039;&amp;#039;);
// авторизуемся под пользователем
$data = array(&amp;#039;email&amp;#039; =&amp;gt; $email,
  &amp;#039;errors&amp;#039; =&amp;gt; array(),
  &amp;#039;isDirty&amp;#039; =&amp;gt; true,
  &amp;#039;isNullo&amp;#039; =&amp;gt; false,
  &amp;#039;password&amp;#039; =&amp;gt; $pasword);
$json_response = get_url(&amp;#039;https://graphisoftid.graphisoft.com/api/Authenticate/Login&amp;#039;,&amp;#039;POST&amp;#039;,1,&amp;#039;https://graphisoftid.graphisoft.com/&amp;#039;,$data);
$obj = json_decode($json_response);
$user_gsid = $obj-&amp;gt;{&amp;#039;GraphisoftUser&amp;#039;}-&amp;gt;{&amp;#039;GsId&amp;#039;};
if ($user_gsid == &amp;#039;&amp;#039;) {
echo &amp;quot;не смог зайти под пользователем в личный кабинет\n&amp;quot;;
} else {
$data = array(&amp;#039;actionId&amp;#039; =&amp;gt; 2,
  &amp;#039;companyGsId&amp;#039; =&amp;gt; $companyGsId,
  &amp;#039;graphisoftUserGsId&amp;#039; =&amp;gt; $user_gsid,
  &amp;#039;reactionId&amp;#039; =&amp;gt; 1);
get_url(&amp;#039;https://graphisoftid.graphisoft.com/api/user/ProcessingPendingRequest&amp;#039;,&amp;#039;PUT&amp;#039;,1,&amp;#039;https://graphisoftid.graphisoft.com/&amp;#039;,$data);
echo &amp;quot;сотрудник подтвердил приглашение\n&amp;quot;;
}
} else {
echo &amp;quot;у меня не получилось подтвердить регистрацию...  извините\n&amp;quot;;
}
}
} else {
echo &amp;quot;$email уже зарегистрирован в системе\n&amp;quot;;
}
// удаляем старые куки
unlink(dirname(__FILE__).&amp;#039;/cookie.txt&amp;#039;);
?&amp;gt;&lt;/code&gt;&lt;/pre&gt;</description>
</item>


</channel>
</rss>