Сайт и форма - все AMP-HTML, я пытался использовать admin-post и admin-ajax для отправки в API и сохранения всех входных данных в базе данных Wordpress, мне удалось отправить электронное письмо, исохранить в базу данных, однако, чтобы отправить во внешний API, я не могу понять, что происходит, он не показывает в консоли никаких сообщений об ошибках, так как APM-FORM использует ajax, я не знаю, вызывает ли другой ajax внутривыдает ошибку или нет, не знаю, как это исправить.
Идея состоит в том, что после заполнения формы и отправки первым шагом является отправка всех данных во внешний API, после чего, если он успешен илинет, сохраните эту форму в базе данных и отправьте электронное письмо получателю электронной почты.
Мне удалось сохранить данные с помощью CFDB (Контактная форма базы данных), а также отправив электронное письмо с помощью phpmailer. Я использовал как вызовы admin-ajax, так и вызовы admin-post, но безуспешно для отправки на внешний API.
Работа в Linux, PHP 7.3, MariaDB, Apache 2.4 и Nginx.
Пример AMP-FORM с помощью admin-post
<form id="orcamento-form" class="orcamento-form custom-forms"
method="post"
on="submit:header-before.hide;submit-success:header-after.show,page.scrollTo(duration=200)"
custom-validation-reporting="show-all-on-submit"
action-xhr="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>"
target="_top">
<?php wp_nonce_field( 'test_form_action', 'test_form_nonce' ); ?>
<input type="hidden" name="action" value="form_orcamento">
<input type="hidden" name="form_type" value="Orçamento">
<label for="nome">Nome</label>
<input id="nome" type="text" name="nome" required tabindex="1">
<span class="warning" visible-when-invalid="valueMissing" validation-for="nome">Campo obrigatório.</span>
<input type="submit" value="Solicitar Orçamento" tabindex="1">
<div submitting class="submitting">
<template type="amp-mustache">
Olá {{nome}}, estamos processando sua solicitação.
</template>
</div>
<div submit-success class="submit-success">
<template type="amp-mustache">
Formulário enviado com sucesso.
</template>
</div>
</form>
Пример functions.php
/**
* Form Up Study Orçamento
*
* @return void
*/
function amp_form_orcamento() {
if ( ! isset( $_POST['test_form_nonce'] ) || ! wp_verify_nonce( $_POST['test_form_nonce'], 'test_form_action' ) ) {
wp_send_json_error( 'Falha na verificação de nonce.' );
}
// Define headers for AMP cross origin.
header( 'access-control-allow-credentials:true' );
header( 'access-control-allow-headers:Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token' );
header( 'access-control-allow-methods:POST, GET, OPTIONS' );
header( 'access-control-allow-origin:' . $_SERVER['HTTP_ORIGIN'] );
header( 'access-control-expose-headers:AMP-Access-Control-Allow-Source-Origin' );
header( 'amp-access-control-allow-source-origin:https://' . $_SERVER['HTTP_HOST'] );
header( 'Content-Type: application/json' );
// Initialize phpmailer class.
global $mailer;
/* carrega todas variáveis */
/**
* Send the Email throught PHPMailer, if success send to the Edvisor API.
*/
if ( ! $mailer->Send() ) {
// Deu erro no envio da mensagem pelo PHPMailer.
wp_send_json(
array(
'error' => $mailer->ErrorInfo, // phpcs:ignore
'message' => 'Falha ao enviar o email.',
),
400
);
} else {
// Email enviado através do PHPMailer com sucesso, enviar para API Edvisor.
?>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
<script type="text/javascript">
jQuery( document ).ready(function($) {
var formData = {
"agencyId" : 1234,
"firstname" : "<?php echo esc_html( $firstname ); ?>",
"lastname" : "<?php echo esc_html( $lastname ); ?>",
"email" : "<?php echo esc_html( $email ); ?>",
}
$.ajax({
url: 'https://app.edvisor.io/api/v1/student?public_key=PUBLIC_KEY',
data: JSON.stringify(formData),
type: 'PUT',
dataType: 'json',
contentType: 'application/json; charset=UTF-8',
processData: false
})
.done(function(response, textStatus, jqXHR) {
console.log( 'OK' );
})
.fail(function(jqXHR, textStatus, errorThrown) {
console.log( 'ERROR' );
});
});
</script>
<?php
}
$mailer->ClearAllRecipients();
}
add_action( 'admin_post_nopriv_form_orcamento', 'amp_form_orcamento' );
add_action( 'admin_post_form_orcamento', 'amp_form_orcamento' );
Я не могу понять, что отправляется в API или какие ошибки возвращаются, потому что консоль делаетне показывать ни одного сообщения, оно пустое ...
Я должен увидеть, что API вернул успешный ответ.