Webhook PHP 스크립트 예제

2023년 9월 21일

Jform Webhooks에 이미 익숙하다면 시도해 볼 수 있는 예제 스크립트가 있습니다. 아래의 스크립트의 필드 이름을 귀하의 양식 필드 이름으로 업데이트해야 합니다.

인스턴트 이메일 알림

PHP 내장 메일 기능을 이용한 Webhook용 이메일 알림 스크립트입니다. 이메일 전송 서버를 사용하여 즉각적인 이메일 알림을 받을 수 있습니다.

<?php
// JSON 데이터를 PHP로 변환
$result = $_REQUEST['rawRequest'];
$obj = json_decode($result, true);
// 이메일 변경
$emailfrom = "[email protected]"; // 발신자 또는 발신자 이메일
$emailto = "[email protected]"; // 받는 사람은 필드 값을 미리 정의하거나 사용할 수 있습니다.예시 $obj['q4_email']
$subject = "새로운 제출물이 있습니다"; // 이메일 제목 
// 수정하지 말 것
$id = $_POST['submissionID']; // 제출 ID 가져오기
$submissionURL = 'https://www.jotform.com/submission/'.$id; // 제출 URL 구성
$headers = "From: " . $emailfrom . "\r\n";
$headers .= "Reply-To: ". $emailfrom . "\r\n"; // 선택사항
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=utf-8\r\n";
// 새로운 방식, 제출 페이지에서 데이터 가져오기
$html = new DOMDocument;
$html->loadHTML(file_get_contents($submissionURL));
$body = $html->getElementsByTagName('body')->item(0);
// body 태그 다음에 html 코드 가져오기
foreach ($body->childNodes as $child){
$html->appendChild($html->importNode($child, true));
}
// 이메일에 잘 나타나도록 반응형 테이블 만들기
$body = $html->getElementsByTagName('table');
foreach ($body as $width) {
$width->setAttribute('width', '100%');
}
$body = $html->saveHTML();
// 이메일 보내기
@mail($emailto, $subject, $body, $headers);
?>

예시 이메일:

submission-page-sample-min

SMS 알림

SMS 공급자의 API를 사용하여 양식 제출 후 SMS를 보냅니다.

<?php
// 양식 필드 값 얻기
$result = $_REQUEST['rawRequest'];
$obj = json_decode($result, true);
// 인증키 및 개인정보 교체
$authKey = "your_auth_key";
$senderId = "102234";
$route = "default";
// 양식 필드 이름 교체
$mobileNumber = $obj['q1_mobileNo']; //양식 데이터의 모바일 번호
$message = urlencode($obj['q2_message']); // 양식 데이터의 메시지
// POST 매개 변수 준비
$postData = array(
'authkey' => $authKey,
'mobiles' => $mobileNumber,
'message' => $message,
'sender' => $senderId,
'route' => $route
);
// API 엔드포인트 교체
$url = "http://mysmsapiproviders.com/sendhttp.php";
// 리소스 초기화
$ch = curl_init();
curl_setopt_array($ch, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $postData
// ,CURLOPT_FOLLOWLOCATION => true
));
// SSL 인증서 확인 무시
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
// 응답 가져오기
$output = curl_exec($ch);
// 오류가 있는 경우 오류 표시
if (curl_errno($ch)) {
echo 'error:' . curl_error($ch);
}
curl_close($ch);
echo $output;
?>

MySQL로 양식

양식 데이터를 MySQL 데이터베이스로 보냅니다.

<?php
// DB 세부 정보로 교체
$servername = "localhost";
$username = "your_username_here";
$password = "your_password_here";
$dbname = "your_dbname_here";
$dbtable = "your_dbtable_here";
// 연결 생성
$mysqli = new mysqli($servername, $username, $password, $dbname);
// 연결 확인
if ($mysqli->connect_error) {
die("Connection failed: " . $mysqli->connect_error);
}
// 양식에서 필드 값 가져오기
// Get unique submissionID - nothing to change here
$sid = $mysqli->real_escape_string($_REQUEST["submissionID"]);
// 양식 필드 값 가져오기 및 디코딩 - 여기서 변경할 사항 없음
$fieldvalues = $_REQUEST["rawRequest"];
$obj = json_decode($fieldvalues, true);
// 여기에서 양식의 필드 이름을 바꾸기
$fname = $mysqli->real_escape_string($obj["q15_yourName"][first]);
$lname = $mysqli->real_escape_string($obj["q15_yourName"][last]);
$email = $mysqli->real_escape_string($obj["q16_yourEmail16"]);
$message = $mysqli->real_escape_string($obj["q17_yourMessage"]);
$result = $mysqli->query("SELECT * FROM $dbtable WHERE sid = '$sid'");
// 제출 ID가 있는 경우 레코드 업데이트...
if ($result->num_rows > 0) {
$result = $mysqli->query(
"UPDATE $dbtable SET firstname = '$fname', lastname = '$lname', email = '$email', message = '$message' WHERE sid = '$sid'"
);
echo "기존 레코드 업데이트됨!";
}
// 그렇지 않으면 레코드 삽입
else {
$result = $mysqli->query(
"INSERT IGNORE INTO $dbtable (sid, firstname, lastname, email, message) VALUES ('$sid', '$fname', '$lname','$email','$message')"
);
echo "새로운 레코드 추가됨!";
if ($result === false) {
echo "SQL error:" . $mysqli->error;
}
}
$mysqli->close();
?>

반송 알림

이메일 전송 실패 또는 반송이 발생한 경우 알림을 받습니다. 다음 스크립트는 기본 웹 호스트 SMTP를 사용하여 이메일을 보냅니다. 따라서 웹 호스트가 이를 지원하는지 확인하십시오. 그렇지 않으면 메일 기능이 작동하지 않습니다.

이 코드에는 Jform API 페이지 의 PHP 클라이언트 라이브러리가 필요합니다. 반송 알림 PHP 파일이 포함된 동일한 폴더에 JotForm.php 파일을 넣습니다.

<?php
include "JotForm.php";
$jotformAPI = new JotForm("Your Jform API Key here"); // 여기에 API 키를 입력하세요
$history = $jotformAPI->getHistory("emails", "lastWeek");
$subid = $_REQUEST["submissionID"];
$submissionURL = "https://www.jotform.com/submission/" . $subid; // 제출 URL 구성
$limit = 1; // 마지막으로 실패한 알림 보내기 - 알림이 여러 개인 경우 숫자를 늘립니다
$results = [];
// 이메일 변경
$to = "[email protected]"; // 수신자 이메일로 교체
$from = "[email protected]"; // 발신 이메일로 교체
// 원하는 경우 주제 제목을 변경하십시오
$subject = "Message bounced.";
// 수정하지 말 것
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
$headers .= "From: <" . $from . ">" . "\r\n";
// 여기에 추가 본문 메시지(선택 사항)
$msg1 = "Unable to deliver the message to the recipient.";
// 새로운 방식, 제출 페이지에서 데이터 가져오기
$html = new DOMDocument();
$html->loadHTML(file_get_contents($submissionURL));
$body = $html->getElementsByTagName("body")->item(0);
// body 태그 뒤의 HTML 코드 가져오기
foreach ($body->childNodes as $child) {
$html->appendChild($html->importNode($child, true));
}
// 이메일에 잘 나타나도록 반응형 테이블 만들기
$body = $html->getElementsByTagName("table");
foreach ($body as $width) {
$width->setAttribute("width", "100%");
}
// 무엇을 하고 있는지 확실하지 않다면 여기에서 아무 것도 편집하지 마십시오
foreach ($history as $key => $value) {
if (
$value["status"] == "IN BOUNCE/BLOCK LIST" ||
($value["status"] == "FAILED" && $value["submissionID"] == $subid)
) {
if ($key == $limit - 1) {
$body = $msg1 . "<br>";
$body .= $html->saveHTML();
@mail($to, $subject, $body, $headers);
}
}
}
?>

예시 이메일:

submission-page-bounced-sample-min

수시로 더 많은 예제를 게시할 예정입니다. 제안 사항이 있거나 Webhook에 대한 도움이 필요하면 아래에 자유롭게 게시해주세요.

고객지원 문의하기:

저희 고객 지원팀은 주 7일 24시간 동안 언제든지 도와드릴 수 있으며 저희의 평균 반응시간은 1~2 시간입니다.
저희 팀은 다음을 통해 연락될 수 있습니다:

고객지원 게시판: https://www.jotform.com/answers/

Contact Jform Support: https://www.jform.co.kr/contact/

코멘트 보내기:

Jform Avatar
이 사이트는 reCAPTCHA 및 Google 개인정보 보호정책 정책으로 보호되며 이용약관이 적용됩니다.

Podo Comment 제일 먼저 댓글 달아주세요.