התקנת recaptcha בphp
-
recaptcha בקושי צריך ספריה, זה כמה שורות קוד פשוטות,
אתה מקבל בPOST שמגיע מהאתר שלך (עם הריקאפצה) ערך נוסף בשם g-recaptcha-response ואתה שולח בקשת POST לכתובת הבאה
https://www.google.com/recaptcha/api/siteverify
עם הפרמטרים 1. secret שהוא הקוד הקבוע הסודי 2. response שזה הקוד שהגיע בפרמטר g-recaptcha-response הנ"ל.
בתשובה יש success של כןלא עבור גירסה V2
ובגירסה 3 יש score שזה בין 0.0 ל 0.9 על רמת האמינות של התנועה.אם בכל זאת אתה רוצה ספריה, אין לי מושג מה הספריה הרשמית, לא כתבת מאיפה הורדת את הקוד.
-
@chagold לא הבנתי,
הצילום מסך שהבאת מתייחס להטמעה בצד הלקוח, אני דיברתי על הספריה צד שרת.
בצד לקוח בהחלט צריך את שורות הקוד שהראת (או בשיטה שונה של attribute לform) אבל למה זה מצריך ספריה לצד שרת.
(אגב הבאת בצילום מסך את ההדרכה לכאורה של גירסת אנטרפרייס, זה מה שיש לך?)אני אסביר לך את סדר הדברים:
- הלקוח נכנס לדף שלך
- בדף שלך נטענת ספריית צד לקוח של גוגל (לא את הספריה הזו ניסיתי לחסוך)
- בעת לחיצה על submit של טופס (בדרך כלל) אז לפני השליחה של הפרמטרים שלך (למשל מיל משתמש והודעה) הספריה של גוגל מבצעת תקשורת עם שרתי גוגל בקשר לאומדן האמינות של הפעילות, והיא מהם קוד זיהוי לצורך זיהוי עתידי של הפעולה שנבחנה.
- הפרמטר של הקוד זיהוי + הפרמטרים של הטופס שלך נשלחים לשרת שלך. אתה יכול לראות את זה בvar_dump($_POST);
מכאן ואילך אתה אמור להמשיך עם הצעדים שכתבתי לעיל ולהחליט לפי זה אם להמשיך ולתת לללקוח את מבוקשו או שלא וכולי.
-
@dovid איך שהבנתיך, אני אמור לפנות ל-https://www.google.com/recaptcha/api/siteverify מהצד שרת עם ערכים מהקליינט (שנוספו אליו ע"י הrecaptcha).
בדקתי בצד השרת עם var_dump($_POST) אבל לא נוסף כל משתנה מעבר למה שמוגדר בטופס (למרות שדף הקליינט חתום ע"י הספריה של גוגל שהיא מוגנת)
-
@chagold כתב בהתקנת recaptcha בphp:
בדקתי בצד השרת עם var_dump($_POST) אבל לא נוסף כל משתנה מעבר למה שמוגדר בטופס (למרות שדף הקליינט חתום ע"י הספריה של גוגל שהיא מוגנת)
@dovid כתב בהתקנת recaptcha בphp:
בעת לחיצה על submit של טופס (בדרך כלל) אז לפני השליחה של הפרמטרים שלך (למשל מיל משתמש והודעה) הספריה של גוגל מבצעת תקשורת עם שרתי גוגל בקשר לאומדן האמינות של הפעילות, והיא מהם קוד זיהוי לצורך זיהוי עתידי של הפעולה שנבחנה.
זה לא קורה לבד.
אתה צריך ליזום את זה בJS, או להשתמש בattributes בלחצן Submit.
למשל<form method="POST" action="sendMessage.php"> <input type="text"> <button class="g-recaptcha" data-sitekey="reCAPTCHA_site_key" data-callback='onSubmit' data-action='submit'>שלח!</button> </form>
-
2 דברים שאני מסתבך.
-
יש 2 מקומות שונים באתר של recaptcha שניתן לקבל מפתחות.
א. בפאנל הראשי של recaptcha (משם הצילום מסך דלעיל), ושם יש מפתח אחד שמשמש גם עבור צד הקליינט (מול השרת) וגם עבור צד השרת (מול recaptcha).ב. בכתובת זו יש 2 מפתחות שונים, אחד לאתר והשני בין הצד שרת לrecaptcha.
מה עלי להכניס?
-
כל אחת מהמפתחות שאני שותל לקוד, הקריאה (מהצד שרת) לrecaptcha מחזירה
{"success":false,"error-codes":["missing-input-secret"]}
הקוד בצד שרת הוא
$recaptcha_secret = "6LfnWHQpAAAAADKdo8pJsd3BBDXayhALFfbLqv0P"; //$recaptcha_response = $_POST['g-recaptcha-response']; $recaptcha_response =$token ; $url = 'https://www.google.com/recaptcha/api/siteverify'; $data = array( 'secret' => $recaptcha_secret, 'response' => $recaptcha_response ); $options = array( 'http' => array ( 'header' => "Content-type: application/json", 'method' => 'POST', 'content' => http_build_query($data) ) ); $context = stream_context_create($options); $verify = file_get_contents($url, false, $context); $captcha_success = json_decode($verify); echo json_encode($captcha_success);die;
-
-
@chagold לא הבנתי מה זה הפאנל הראשי, אבל אתה צריך להשתמש במפתחות שבניהול (ב')
לגבי השגיאת missing-input-secret, אני לא מכיר PHP אבל נראה שצריך לשלוח בapplication/x-www-form-urlencoded
ולא בJSON
יש לך דוגמה כאן: https://gist.github.com/jonathanstark/dfb30bdfb522318fc819 -
@צדיק-תמים כתב בהתקנת recaptcha בphp:
@chagold צריך לכתוב ככה, לא?
'header' => 'Content-type: application/x-www-form-urlencoded'
אכן. עשיתי והשגיאה הקודמת חזרה
{"success":false,"error-codes":["invalid-input-secret"]}
-
@צדיק-תמים הצליח. תודה רבה!