Задать вопрос
@ALexLancer

Как отослать форму amoCRM с контактами со своего сайта через php cURL?

Прямая отправка формы из браузера работает без проблем
<form id="amoforms_form" class="" action="https://forms.amocrm.ru/queue/add" method="POST" >
			<input type="hidden"   name="fields[name_1]" placeholder="ФИО"  value="Иван Иванович Иванов">      
			<input type="hidden"    name="fields[85563_1][124303]" placeholder="Телефон" value="122123152">      
			<input type="hidden"  name="fields[85565_1][124315]" placeholder="Email" value="terst@sdf.ru">      
			<input type="hidden"   name="fields[note_2]" placeholder="Примечание" value="test">      
			<input type="hidden" name="form_id" id="form_id" value="589981">
			<input type="hidden" name="hash" value="b8530f938b295b34c1f511685bc3a57c">
			<input type="hidden" name="user_origin" id="user_origin" value="{&quot;datetime&quot;:&quot;Thu Mar 05 2020 16:43:10 GMT+0700 (Новосибирск, стандартное время)&quot;,&quot;referer&quot;:&quot;http://g98330a3.beget.tech/&quot;}">
			<!--button type="submit">Отправить</button-->

			<input type="hidden" name="visitor_uid" value="be39e4a8-19c2-416f-af24-4ed09b6ac111">
		</form>


Пытаюсь отправить с сервера. Возвращает такую ошибку {"error_code":403,"msg":"auth_required"}
Перепробовал разные заголовки.

$api_url = 'https://forms.amocrm.ru/queue/add'; 

		$ch = curl_init($api_url);

		$params = array(
			'fields[name_1]'          => "Иван Иванович Иванов" , 
			'fields[85563_1][124303]' => "12312531229" ,
			'fields[85565_1][124315]' => "test@sdf.ru" ,
			'fields[note_2]'          => "test" ,
			'form_id'                 => "589981"      ,
			'hash'                    => "b8530f938b295b34c1f511685bc3a57c" ,
			'user_origin'             => "{&quot;datetime&quot;:&quot;Thu Mar 05 2020 16:43:10 GMT+0700+(Новосибирск, стандартное время)&quot;,&quot;referer&quot;:&quot;http://g98330a3.beget.tech/&quot;}" ,
			'visitor_uid'             => "be39e4a8-19c2-416f-af24-4ed09b6ac111"
		);

		$post_fields = http_build_query($params);

		curl_setopt($ch, CURLOPT_HTTPHEADER, array(
			'Accept: text/html',
			'Content-Type: multipart/form-data',
			'Content-Length: ' . strlen($post_fields),
			'Host: forms.amocrm.ru',
			'Origin: http://g98330a3.beget.tech',
			'Referer: http://g98330a3.beget.tech/',
			'Sec-Fetch-Dest: document',
			'Sec-Fetch-Mode: navigate',
			'Sec-Fetch-Site: cross-site',
			'Sec-Fetch-User: ?1',
			'Content-Type: application/x-www-form-urlencoded',
			'Upgrade-Insecure-Requests: 1',
			'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36',
		));

		curl_setopt($ch, CURLOPT_POST, true);
		curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

		$response = curl_exec($ch);


Подскажите, в чем может быть дело?
  • Вопрос задан
  • 771 просмотр
Подписаться 2 Простой 2 комментария
Решения вопроса 1
@ALexLancer Автор вопроса
Интересно, что такой способ сработал без всякой авторизации
$paramsArray = array(
	'fields' => array (
		'name_1'  => $_POST['your-name'], 
		'85563_1' => array ('124303' => $_POST['phone']),
		'85565_1' => array ('124315' => $_POST['your-email']),
		'note_2' => "Здравствуйте!\nПрошу связаться со мной", 
	),
	'form_id' => '589981', 
	'hash'    => 'b8530f938b295b34c1f511685bc3a57c'	
);

$vars = http_build_query($paramsArray);

$options = array(
	'http' => array(  
		'method'  => 'POST', 
		'header'  => 'Content-type: application/x-www-form-urlencoded', 
		'content' => $vars  
	)  
);  
$context  = stream_context_create($options);  
$result = file_get_contents('https://forms.amocrm.ru/queue/add', false, $context);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Otrivin
junior full-stack сисадмин
Берите класс на гитхабе (автор nabarabane), с его помощью работайте с апи АМО.
Вкратце, вы сначала должны авторизоваться, сохранить куки, и каждую отправку подписывать этими куками. Иначе - еггог
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы