Mukautetun captcha-palvelun integroiminen Customer Insights - Journeysin lomakkeisiin
Customer Insights - Journeysin lomakkeista on mahdollista tarkistaa lomakelähetykset käyttämällä mukautettua Captcha-toimintoa boteilta suojautumiseen. Tässä esimerkissä on esimerkki Google reCAPTCHA -toiminnon integroinnista. Työnkulku on samankaltainen muiden Captcha-palveluiden osalta.
Muistiinpano
Sovelluksen nykyisessä versiossa vain yksi captcha-toteutus voi olla aktiivinen. Jos käytät oman captcha-palveluntarjoajan (kuten alla on kuvattu), valmista captchaa käyttävät lomakkeet lakkaavat toimimasta. Mukautettu captcha-toteutus vaatii vähintään perustiedot Dataverse-laajennusten kirjoittamisesta ja virheenkorjauksesta.
Prosessin vaiheet:
- reCAPTCHA-toiminnon lisääminen lomakkeeseen.
- Captcha-tekstiarvon lisääminen lomakelähetykseen, kun lomake lähetetään.
- Laajennuksen luominen CRM:ssä tarkistamaan Captcha-toiminto.
Vaiheittainen esimerkki: Google reCAPTCHA -integrointi
1. reCAPTCHA-toiminnon lisääminen lomakkeeseen
Luo lomake Customer Insights - Journeysin lomake-editorissa.
Lisää
data-validate-submission="true"
-määrite<form>
-elementtiin mahdollistamaan mukautettu tarkistus lomakkeen lähetyksessä:Lisää
<div id="g-recaptcha">
lomakkeeseen reCAPTCHA-toiminnon paikkamerkiksi. Tätä div ID -tunnusta käytetään myöhemmin viitteenä. Paikkamerkin suositeltu sijainti on viimeisen kentän ja lähetyspainikkeen välillä.Julkaise lomake ja upota se sivustoon.
Muokkaa sivua, johon lomake upotettiin. Lisää Googlen toimittama komentosarja sivun otsikkoon. Komentosarja lataa reCAPTCHA-toiminnon ja
onLoad
-vastakutsuparametrin. Tämä vastakutsu tehdään heti, kun Captcha-toiminto ladataan.<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback" async defer></script>
Lisää onLoadCallback-vastakutsu:
function onloadCallback() { grecaptcha.render('g-recaptcha', { sitekey: '{sitekey}', }); }
Vaihda
{sitekey}
-paikkamerkin tilalle Google toimittama paikkamerkki. Tämä vastakutsu hahmontaa reCAPTCHA-toiminnon aiemmin luodussa paikkamerkissä<div id="g-recaptcha">
.Rekisteröi onloadCallback-funktio, jota lomakelataaja kutsuu:
document.addEventListener("d365mkt-afterformload", onloadCallback);
2. Captcha-tekstiarvon lisääminen lomakkeen lähetykseen
Kun lomake lähetetään, g-recaptcha-response
-parametri lisätään automaattisesti lomakkeen lähetykseen. Seuraavissa vaiheissa muodostetaan tämän arvon piilottava laajennus, sillä se lisätään laajennuskoodin palauttaman vastausobjektin ValidationOnlyFields
-luetteloon.
3. Laajennuksen luominen
3.1 Visual Studio -projektin luominen laajennukseen
- Avaa Visual Studio ja luo uusi luokkakirjastoprojekti käyttämällä versiota .NET Framework 4.6.2.
- Valitse ratkaisunhallinnassa NuGet-pakettien hallinta ja asenna
Microsoft.CrmSdk.CoreAssemblies
.
3.2 Laajennusluokan luominen
Muuta
Class1.cs
muotoonCustomValidationPlugin.cs
.Määritä CustomValidationPlugin-luokka perimään IPlugin-liittymästä ja lisää suoritusmenetelmä.
public class CustomValidationPlugin : IPlugin { public void Execute(IServiceProvider serviceProvider) { } }
Lisää seuraava koodi suoritusmenetelmään noutamaan konteksti ja jäljityspalvelu.
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)); }
Lisää tämä koodi noutamaan lomakkeen lähetyksen parametrimerkkijono. Se on JSON-koodattu merkkijono, joka ilmaisee käyttäjän lomakkeessa lähettämät kentät. Tämä prosessi noutaa kyseisen merkkijonon ja poistaa sen sarjoituksen käyttämällä sarjoituksen poiston apusovellusta ja myöhemmin määritettävää FormSubmissionRequest-luokkaa. Tämä tarkistaa, että kenttämatriisi sisältää g-recaptcha-response-avaimen. Jos reCAPTCHA-avainta ei löydy, se palauttaa tarkistuksen ohituksen käsiteltävänä lomakkeena, joka ei sisältänyt Google Recaptcha -elementtiä.
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; }
Lisää seuraava koodi, joka palautetaan, jos
g-recaptcha-token
-arvo on tyhjäarvo tai tyhjä.if (String.IsNullOrEmpty(recaptchaToken)) { tracingService.Trace($"g-recaptcha-response value not found"); return; }
Lisää seuraava koodi tarkistamaan Google Captcha -tunnus Google-ohjelmointirajapintojen perusteella.
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}"); } }
Ensimmäiseksi määritetään URL-osoite ja sen jälkeen luodaan
HttpClient
-esiintymä. Edellisissä vaiheissa noudetunrecaptchaToken
-tunnuksen ja Googlen toimittaman salaisen avaimen sisältäväFormUrlEncodedContent
-objekti luodaan. Sen jälkeen lähetetäänPOST
-pyyntö ja tilakoodi tarkistetaan; epäonnistuessa se palautetaan. Onnistuessa se poistaa vastauksen sarjoituksen käyttämällä sarjoituksen poiston apusovellusta ja myöhemmin määritettävääGRecaptchaResponse
-objektia. Se luo sitten uudenValidateFormSubmissionResponse
-objektin, sarjoittaa sen ja määrittää senmsdynmkt_validationresponse
-tulosparametrin arvoksi. Microsoft-palvelu käyttää tätä parametria lähetyksen hyväksymiseen tai hylkäämiseen.g-recaptcha-response
-merkkijonon lisääminenValidationOnlyFields
-luetteloon piilottaa tämän kentän lomakkeen lähetyksestä käyttöliittymässä.Lisää seuraava koodi määrittää sarjoitusmenetelmä ja sarjoituksen poiston apusovellus.
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; }
Lisää seuraava koodi määrittämään luokat, jotka tarvitaan JSON-merkkijono-objektien sarjoittamiseen ja sarjoittamisen purkamiseen.
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 Laajennuksen allekirjoittaminen ja muodostaminen
- Napsauta projektia hiiren kakkospainikkeella ja valitse ratkaisunhallinnassa Ominaisuudet.
- Valitse Allekirjoitus-välilehti ja valitse Sitten Allekirjoita kokoonpano -valintaruutu.
- Valitse
<New...>
. - Kirjoita avaintiedoston nimi ja poista Suojaa avaintiedosto salasanalla.
- Muodosta projekti.
- Laajennuskokoonpano
CustomValidationPlugin.dll
sijaitsee kohdassa\bin\Debug
.
3.4 Laajennuksen rekisteröiminen
- Avaa
PluginRegistration.exe
. - Valitse Luo uusi yhteys.
- Valitse Office 365.
- Valitse Sisäänkirjaus.
- Valitse ensin Rekisteröi ja sitten Rekisteröi uusi kokoonpano.
- Valitse (...)-painike vaiheessa 1 ja valitse edellisissä vaiheissa muodostettu dll.
- Valitse Rekisteröi valittu laajennus.
3.4 Vaiheen rekisteröinti
- Valitse rekisteröityjen kokoonpanojen luettelossa CustomValidationPlugin.
- Valitse Rekisteröi uusi vaihe.
- Syötä
msdynmkt_validateformsubmission
Viesti-tekstikenttään. - Varmista, että Suoritusmenetelmä-määrityksenä on Synkroninen.
- Varmista, että toteutusjärjestykseksi on asetettu
10
. - Varmista, että Tapahtumaputken suoritusvaihe -määrityksenä on Jälkitoiminto.
- Valitse Rekisteröi uusi vaihe.
Yhteenveto
Kun data-validate-submission
-määritteen sisältävä lomake lähetetään, mukautettu laajennus suoritetaan ja se tarkistaa reCAPTCHA-vastauksen Google-palveluissa. Mukautettu laajennus suoritetaan Microsoftin oletustarkistuslaajennuksen jälkeen. Jos lomakkeessa ei ole Microsoftin Captcha-kenttiä, Microsoft-laajennus tekee määrityksen IsValid:false
ja lähetys epäonnistuu, ellei sitä korvata IsValid:true
-määrityksellä.