Integracija prilagođenog captcha servisa s Customer Insights - Journeys obrascima
Customer Insights - Journeys Obrasci vam omogućuju korištenje prilagođene Captcha Bot zaštite za provjeru valjanosti slanja obrazaca. Ovaj članak daje primjer kako integrirati Google reCAPTCHA. Protok je sličan za ostale captcha usluge.
Napomena
U trenutnoj verziji aplikacije može biti aktivna samo jedna implementacija captcha. Ako koristite vlastitog davatelja captcha usluga (kao što je navedeno u nastavku), postojeći obrasci koji koriste gotovu captcha prestat će raditi. Prilagođena implementacija captcha zahtijeva barem osnovno znanje o pisanju i ispravljanju pogrešaka dodataka za dataverse.
Postupak se sastoji od sljedećih koraka:
- Dodajte reCAPTCHA u obrazac.
- Dodajte tekstnu vrijednost captcha u slanje obrasca nakon slanja obrasca.
- Stvorite dodatak u CRM-u koji provjerava valjanost captcha.
Detaljni primjer: integrirajte Google reCAPTCHA
1. Dodajte reCAPTCHA u obrazac
Stvorite obrazac u Customer Insights - Journeys uređivač obrazaca.
Elementu
data-validate-submission="true"
<form>
dodajte atribut koji omogućuje prilagođenu provjeru valjanosti prilikom slanja obrasca:<div id="g-recaptcha">
Dodajte u obrazac kao rezervirano mjesto za reCAPTCHA. Ovaj div ID koristi se kao referenca kasnije. Preporučuje se da rezervirano mjesto stavite između posljednjeg polja i gumba za slanje.Objavite obrazac i ugradite obrazac na svoje web-mjesto.
Uredite stranicu na koju je obrazac uložen. Dodajte skriptu koju pruža Google u zaglavlje stranice. Ova skripta učitava reCAPTCHA s parametrom povratnog
onLoad
poziva. Ovaj povratni poziv poziva se čim se captcha učita.<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback" async defer></script>
Dodajte funkciju onLoadCallback:
function onloadCallback() { grecaptcha.render('g-recaptcha', { sitekey: '{sitekey}', }); }
Zamijenite rezervirano
{sitekey}
mjesto onim koje pruža Google. Ova funkcija povratnog poziva prikazuje reCAPTCHA unutar rezerviranog mjesta<div id="g-recaptcha">
koje ste ranije stvorili.Registrirajte funkciju onloadCallback koju će pozvati učitavač obrazaca:
document.addEventListener("d365mkt-afterformload", onloadCallback);
2. Dodajte tekstnu vrijednost captcha u slanje obrasca
Nakon slanja obrasca parametar g-recaptcha-response
se automatski dodaje u slanje obrasca. U sljedećim koracima izradit ćete dodatak koji skriva tu vrijednost jer će se dodati ValidationOnlyFields
na popis u objektu odgovora koji vraća kôd dodatka.
3. Stvorite dodatak
3.1 Stvaranje Visual Studio projekta za dodatak
- Otvorite Visual Studio i stvorite novi projekt biblioteke predmeta pomoću platforme .NET Framework 4.6.2.
- U eksploreru za rješenja odaberite Upravljanje paketima NuGet i instalacija
Microsoft.CrmSdk.CoreAssemblies
.
3.2 Stvorite klasu dodataka
Preimenuj
Class1.cs
uCustomValidationPlugin.cs
.Neka klasa CustomValidationPlugin naslijedi iz IPlugin sučelja i doda metodu izvršavanja.
public class CustomValidationPlugin : IPlugin { public void Execute(IServiceProvider serviceProvider) { } }
Dodajte sljedeći kôd u metodu izvršavanja da biste dohvatili kontekst i uslugu praćenja.
public void Execute(IServiceProvider serviceProvider) { // get tracing service ITracingService tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService)); // get plugin execution context IPluginExecutionContext context = (IPluginExecutionContext) serviceProvider.GetService(typeof(IPluginExecutionContext)); }
Dodajte ovaj kod da biste dohvatili niz parametara slanja obrasca. To je JSON kodirani niz koji predstavlja polja koja je korisnik poslao u obrascu. Ovaj proces dohvaća ovaj niz i deserijalizira ga pomoću metode Deserijaliziraj pomagača i klase FormSubmissionRequest koja je kasnije definirana. Time se provjerava sadrži li polje Polja ključ za g-recaptcha-response. Ako reCAPTCHA ključ nije pronađen, vraća preskakanje provjere valjanosti jer obrazac koji obrađuje nije sadržavao Googleov element recaptcha.
var requestString = (string)context.InputParameters["msdynmkt_formsubmissionrequest"]; var requestObject = Deserialize<FormSubmissionRequest>(requestString); if (!requestObject.Fields.TryGetValue("g-recaptcha-response", out string recaptchaToken)) { tracingService.Trace("g-recaptcha-response was not present in form submission"); return; }
Dodajte sljedeći kôd da biste ga vratili ako
g-recaptcha-token
je vrijednost null ili prazna.if (String.IsNullOrEmpty(recaptchaToken)) { tracingService.Trace($"g-recaptcha-response value not found"); return; }
Dodajte sljedeći kôd da biste potvrdili Google captcha token u odnosu na Google API-je.
string url = "https://www.google.com/recaptcha/api/siteverify"; using (HttpClient client = new HttpClient()) { var content = new FormUrlEncodedContent(new Dictionary<string, string> { {"secret", "your_secret_key"}, {"response", recaptchaToken} }); try { var response = client.PostAsync(url, content).Result; if (!response.IsSuccessStatusCode) { tracingService.Trace($"Request Failed: ({response.StatusCode}){response.Content}"); return; } var responseString = response.Content.ReadAsStringAsync().Result; gRecaptchaResponse = Deserialize<GRecaptchaResponse>(responseString); var resp = new ValidateFormSubmissionResponse() { IsValid = isValid, ValidationOnlyFields = new List<string>() { "g-recaptcha-response" } }; context.OutputParameters["msdynmkt_validationresponse"] = Serialize(resp); } catch (Exception e) { tracingService.Trace($"{e.Message}"); } }
Prvo se definira URL, a zatim se stvara instanca
HttpClient
. StvaraFormUrlEncodedContent
se objekt koji sadrži dohvaćenorecaptchaToken
u prethodnim koracima i tajni ključ koji pruža Google.POST
Zatim se šalje zahtjev i provjerava se kod statusa, ako ne uspije, vraća se. Ako uspije, deserijalizira odgovor metodom Deserijaliziraj pomagača iGRecaptchaResponse
to se definira kasnije. Zatim stvara noviValidateFormSubmissionResponse
objekt, serijalizira ga i postavlja kao vrijednost izlaznog parametramsdynmkt_validationresponse
, koji je jedini Microsoftov servis koji koristi za prihvaćanje ili odbijanje slanja. Dodavanjeg-recaptcha-response
niza naValidationOnlyFields
popis skriva ovo polje od slanja obrasca u korisničkom sučelju.Dodajte sljedeći kod da biste definirali metode pomoći serijalizacije i deserijalizacije.
private T Deserialize<T>(string jsonString) { serializer = new DataContractJsonSerializer(typeof(T)); T result; using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(jsonString))) { result = (T)serializer.ReadObject(stream); } return result; } private string Serialize<T>(T obj) { string result; serializer = new DataContractJsonSerializer(typeof(T)); using (MemoryStream memoryStream = new MemoryStream()) { serializer.WriteObject(memoryStream, obj); result = Encoding.Default.GetString(memoryStream.ToArray()); } return result; }
Dodajte sljedeći kod da biste definirali klase potrebne za serijalizaciju/deserijalizaciju JSON nizova objekata.
public class FormSubmissionRequest { public Dictionary<string, string> Fields { get; set; } } public class GRecaptchaResponse { public bool success { get; set; } } public class ValidateFormSubmissionResponse { public bool IsValid { get; set; } public List<string> ValidationOnlyFields { get; set; } }
3.3 Potpišite i izradite dodatak
- Desnom tipkom miša kliknite projekt, a zatim u eksploreru za rješenja odaberite Svojstva.
- Odaberite karticu Potpisivanje i potvrdite okvir Potpiši sklop .
- Odaberite
<New...>
. - Unesite naziv datoteke ključa i poništite odabir Zaštiti moju datoteku ključa lozinkom.
- Izgradite projekt.
- Sklop
CustomValidationPlugin.dll
dodataka možete pronaći u\bin\Debug
.
3.4 Dodatak za registraciju
- Otvoren
PluginRegistration.exe
. - Odaberite Stvori novu vezu.
- Izabrati Office 365.
- Odaberite Prijava.
- Odaberite Registriraj , a zatim Registriraj novi sklop.
- Odaberite ( ...) u koraku 1 i odaberite dll ugrađen u prethodnim koracima.
- Odaberite Registriraj odabrani dodatak.
3.4 Korak registracije
- Odaberite CustomValidationPlugin s popisa registriranih sklopova.
- Odaberite Registriraj novi korak.
- Unesite
msdynmkt_validateformsubmission
u tekstualno polje Poruka. - Provjerite je li način izvršavanja postavljen kao Sinkron.
- Provjerite je li redoslijed izvršavanja postavljen na
10
. - Provjerite je li faza izvršavanja kanala događaja postavljena kao Post Operation.
- Odaberite Registriraj novi korak.
Zaključak
Kada se pošalje obrazac s atributom data-validate-submission
, pokreće se vaš prilagođeni dodatak i potvrđuje odgovor reCAPTCHA Googleovim uslugama. Prilagođeni dodatak pokrenut će se nakon zadanog Microsoftova dodatka za provjeru valjanosti. Ako u obrascu nema Microsoftovih captcha polja, Microsoftov dodatak se postavlja IsValid:false
i slanje ne uspijeva ako ga IsValid:true
ne prebrišete.