Контактная форма 7 WordPress отправлять форму в другой домен дает контроль доступа разрешить ошибку происхождения

Я пытаюсь отправить контактную информацию о нас в Insightly CRM с Web, чтобы привести HTML-код. Я изменил URL действия формы с помощью следующего кода в моем functions.php:

add_filter('wpcf7_form_action_url', 'wpcf7_custom_form_action_url');
function wpcf7_custom_form_action_url($url) {
  global $post;
  $id_to_change = 1315;
  if($post->ID === $id_to_change)
    return 'https://xxxx.insight.ly/WebToLead/Create';
  else
    return $url;
}

На инспекторе все выглядит хорошо, но я получаю следующую ошибку при отправке:

XMLHttpRequest cannot load https://xxxx.insight.ly/WebToLead/Create. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://xxxx.com' is therefore not allowed access.

Я попытался добавить это в мои functions.php:

add_action( 'init', 'allow_origin' );
function allow_origin() {
    header("Access-Control-Allow-Origin: *");
}

Я попытался добавить это в theme.php:

 header("Access-Control-Allow-Origin: *");

Я попытался добавить это в scripts.js плагина контактной формы 7:

$.ajax({
   url: url,
   ++headers: { 'Access-Control-Allow-Origin': '*' },
   ++crossDomain: true,

Я попытался добавить это в.htaccess:

Header always set Access-Control-Allow-Origin "*"

Ничего не работает:(У моего сервера есть Varnish 4 и ConfigServer Security & Firewall, но я отключил оба и все еще получаю ту же ошибку. Пожалуйста, помогите мне:(

1 ответ

Решение

После моего исследования я заметил, что проблема была в javascript, и было невозможно обойти его с помощью Access-Control-Allow-Origin никак на моей стороне.

Я использовал curl в перехваченном php-скрипте, чтобы он мог отправлять детали в другой домен.

Поэтому я добавил хук в мой functions.php, который переопределяет функцию wpcf7_mail_sent:

add_filter('wpcf7_mail_sent', 'wpcf7_custom_mail_sent');
function wpcf7_custom_mail_sent($contact_form) {
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL,"https://xxxx.insight.ly/WebToLead/Create");
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS,http_build_query($_REQUEST));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    curl_exec($ch);
    curl_close($ch);
}
Другие вопросы по тегам