Jagamisviis:


Kohandatud captcha teenuse integreerimine vormidega Customer Insights - Journeys

Customer Insights - Journeys Vormid võimaldavad teil kasutada kohandatud captcha botikaitset vormiedastuste valideerimiseks. See artikkel annab näite, kuidas integreerida Google’i reCAPTCHA. Vool on teiste captcha teenuste puhul sarnane.

Märkus.

Praeguses rakenduse versioonis saab aktiivne olla ainult üks captcha juurutus. Kui kasutate oma captcha pakkujat (nagu allpool kirjeldatud), lakkavad olemasolevad valmiskujul captchat kasutavad vormid töötamast. Kohandatud captcha rakendamine nõuab vähemalt põhiteadmisi dataverse pistikprogrammide kirjutamisest ja silumisest.

Protsess koosneb järgmistest sammudest:

  1. Lisage vormile reCAPTCHA.
  2. Lisage captcha tekstiväärtus vormi edastusse, kui vorm on edastatud.
  3. Loo CRM-is plugin , mis valideerib captcha.

Samm-sammult näide: integreerige Google reCAPTCHA

1. Lisage vormile reCAPTCHA

  1. Looge vorm Customer Insights - Journeys väljaredaktor.

  2. data-validate-submission="true" Lisage elemendile <form> atribuut, mis lubab vormi esitamisel kohandatud valideerimise.

    Lisage vormielemendile atribuut.

  3. Lisage vormil reCAPTCHA <div id="g-recaptcha"> kohatäitena. Seda div-ID-d kasutatakse hiljem viitena. Soovitatav on panna kohatäide viimase välja ja esitamisnupu vahele.

    Lisage reCAPTCHA jaoks kohatäide.

  4. Avaldage vorm ja manustage vorm oma veebisaidile.

  5. Redigeerige lehte, kuhu vorm manustati. Lisage lehe päisesse Google’i pakutav skript. See skript laadib reCAPTCHA tagasihelistamise parameetriga onLoad . Seda tagasihelistamist kutsutakse kohe, kui captcha on laaditud.

    <script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback" async defer></script>
    
  6. Lisage funktsioon onLoadCallback:

    function onloadCallback() {
        grecaptcha.render('g-recaptcha',
        { 
          sitekey: '{sitekey}',
        });
    }
    

    Asendage {sitekey} kohatäide Google’i pakutavaga. See tagasihelistamisfunktsioon renderdab reCAPTCHA varem loodud kohatäites <div id="g-recaptcha"> .

  7. Registreerige onloadCallback funktsioon, mida vormi laadur kutsub:

document.addEventListener("d365mkt-afterformload", onloadCallback);

2. Lisage vormi esitamisele captcha teksti väärtus

Kui vorm on esitatud, g-recaptcha-response lisatakse parameeter automaatselt vormi edastusse. Järgmistes etappides loote pistikprogrammi, mis peidab selle väärtuse, kuna see lisatakse ValidationOnlyFields pistikprogrammi koodi tagastatud vastuseobjekti loendisse.

Lisatakse parameeter G-recaptcha-response.

3. Looge pistikprogramm

3.1 Looge Visual Studio pistikprogrammi jaoks projekt

  1. Avage Visual Studio ja looge uus klassiteegi projekt, kasutades .NET Frameworki 4.6.2.
  2. Valige Solution Exploreris käsk Halda NuGet pakette ja installige Microsoft.CrmSdk.CoreAssemblies.

3.2 Looge pistikprogrammide klass

  1. Nimeta Class1.cs ümber. CustomValidationPlugin.cs

  2. Pange CustomValidationPlugin klass IPlugini liidesest pärima ja lisage Exe-meetod.

    public class CustomValidationPlugin : IPlugin
    {
       public void Execute(IServiceProvider serviceProvider)
       {
    
       }
    }
    
  3. Konteksti- ja jälgimisteenuse toomiseks lisage täitmismeetodisse järgmine kood.

    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));
    }
    
  4. Lisage see kood vormi esitamise parameetristringi toomiseks. See on JSON-kodeeritud string, mis tähistab välju, mille kasutaja vormil esitas. See protsess otsib selle stringi ja deserialiseerib selle, kasutades Deserialize helper meetodit ja FormSubmissionRequest klassi, mis määratletakse hiljem. See kontrollib, kas massiiv Väljad sisaldab võtit g-recaptcha-vastuse jaoks. Kui võtit reCAPTCHA ei leita, tagastab see vahelejätmise valideerimise, kuna töödeldav vorm ei sisaldanud Google’i recaptcha elementi.

    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;
    }
    
  5. Lisage järgmine kood, et tagastada, kui g-recaptcha-token väärtus on null või tühi.

    if (String.IsNullOrEmpty(recaptchaToken))
    {
       tracingService.Trace($"g-recaptcha-response value not found");
       return;
    }
    
  6. Lisage järgmine kood, et valideerida Google’i captcha tunnus Google’i API-de suhtes.

    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}");
        }
    }
    

    Esiteks määratletakse URL, seejärel luuakse eksemplar HttpClient . Luuakse objekt, FormUrlEncodedContent mis sisaldab eelmistes sammudes saadud teavet recaptchaToken ja Google’i pakutavat salajast võtit. Seejärel saadetakse päring POST ja kontrollitakse olekukoodi, kui see ei õnnestu, naaseb see. Kui see õnnestub, deserialiseerib see vastuse, kasutades Deserialize abistaja meetodit ja GRecaptchaResponse see määratletakse hiljem. Seejärel loob see uue ValidateFormSubmissionResponse objekti, järjestab selle ja määrab selle väljundparameetri msdynmkt_validationresponse väärtuseks, mis on see, mida Microsofti teenus kasutab edastuse vastuvõtmiseks või tagasilükkamiseks. Stringi g-recaptcha-responseValidationOnlyFields lisamine loendisse peidab selle välja kasutajaliideses vormi esitamise eest.

  7. Lisage järgmine kood, et määratleda Serialize ja Deserialize abistaja meetodid.

    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;
    }
    
  8. JSON-stringide objektide serialiseerimiseks/deserialiseerimiseks vajalike klasside määratlemiseks lisage järgmine kood.

    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 Pistikprogrammi allkirjastamine ja koostamine

  1. Paremklõpsake projektil ja valige lahenduseuurijas Atribuudid.
  2. Valige vahekaart Allkirjastamine ja märkige ruut Allkirjasta koost .
  3. Valige <New...>.
  4. Sisestage võtmefaili nimi ja tühjendage ruut Kaitse minu võtmefaili parooliga.
  5. Ehitage projekt.
  6. Plugina komplekti CustomValidationPlugin.dll leiate jaotisest \bin\Debug.

3.4 Registreeri plugin

  1. Avama PluginRegistration.exe.
  2. Valige Loo uus ühendus.
  3. Valida Office 365.
  4. Valige Logi sisse.
  5. Valige Registreeri ja seejärel Registreeri uus kooste .

    Valige Registreeri ja seejärel Registreeri uus kooste.

  6. Valige (...) nuppu sammus 1 ja valige eelmistes sammudes sisseehitatud DLL.
  7. Valige Registreeri valitud plugin.

3.4 Registreerumise samm

  1. Valige registreeritud kogude loendist CustomValidationPlugin .
  2. Valige Registreeri uus samm.
  3. Sisestage msdynmkt_validateformsubmission tekstiväljale Sõnum.
  4. Veenduge, et täitmisrežiim oleks seatud sünkroonseks .

    Veenduge, et täitmisrežiim oleks seatud sünkroonituks.

  5. Veenduge, et täitmiskorraldus oleks seatud väärtusele 10.
  6. Veenduge, et sündmuse müügitoru täitmise etapp oleks määratud operatsioonijärgseks .
  7. Valige Registreeri uus samm.

Järeldus

Kui atribuudiga data-validate-submission vorm on esitatud, käivitab teie kohandatud pistikprogramm ja valideerib Google’i teenustega reCAPTCHA vastuse. Kohandatud pistikprogramm töötab pärast Microsofti vaikimisi valideerimise pistikprogrammi. Kui vormil pole ühtegi Microsofti captcha välja, määrab IsValid:false Microsofti lisandmoodul ja esitamine nurjub, kui te seda IsValid:true üle ei kirjuta.

Valideerimise voog.