Bendrinti naudojant


Pasirinktinės "captcha" paslaugos integravimas su Customer Insights - Journeys formomis

Customer Insights - Journeys Formos leidžia naudoti pasirinktinę "captcha" roboto apsaugą, kad patikrintumėte formų pateikimus. Šiame straipsnyje pateikiamas pavyzdys, kaip integruoti "Google reCAPTCHA". Srautas yra panašus ir kitose "captcha" paslaugose.

Pastaba.

Dabartinėje programos versijoje tik vienas "captcha" diegimas gali būti aktyvus. Jei naudojate savo "captcha" teikėją (kaip nurodyta toliau), esamos formos, kuriose naudojama paruošta naudoti "captcha", nustos veikti. Pasirinktinis "captcha" diegimas reikalauja bent jau pagrindinių žinių apie "dataverse" papildinių rašymą ir derinimą.

Procesą sudaro šie veiksmai:

  1. Pridėkite reCAPTCHA prie formos.
  2. Pridėkite "captcha" teksto reikšmę prie formos pateikimo, kai forma bus pateikta.
  3. CRM sukurkite papildinį , kuris patvirtina "captcha".

Žingsnis po žingsnio pavyzdys: integruokite "Google reCAPTCHA"

1. Pridėkite reCAPTCHA prie formos

  1. Sukurkite formą Customer Insights - Journeys formų rengyklė.

  2. Įtraukite atributą data-validate-submission="true" į <form> elementą, kuris įgalina pasirinktinį formos pateikimo tikrinimą:

    Pridėti atributą prie formos elemento.

  3. Įtraukite į <div id="g-recaptcha"> formą kaip "reCAPTCHA" vietos rezervavimo ženklą. Šis div ID naudojamas kaip nuoroda vėliau. Rekomenduojama vietos rezervavimo ženklą įdėti tarp paskutinio lauko ir pateikimo mygtuko.

    Pridėkite

  4. Publikuokite formą ir įdėkite ją į savo žiniatinklio svetainę.

  5. Redaguokite puslapį, kuriame buvo įdėta forma. Pridėkite "Google" pateiktą scenarijų į puslapio antraštę. Šis scenarijus įkelia reCAPTCHA su atgalinio onLoad iškvietimo parametru. Šis atgalinis skambutis iškviečiamas, kai tik įkeliama "captcha".

    <script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback" async defer></script>
    
  6. Pridėkite funkciją onLoadCallback:

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

    Pakeiskite {sitekey} vietos rezervavimo ženklą "Google" pateiktu ženklu. Ši atgalinio iškvietimo funkcija atvaizduoja "reCAPTCHA" vietos rezervavimo ženkle <div id="g-recaptcha"> , kurį sukūrėte anksčiau.

  7. Užregistruokite onloadCallback funkciją, kurią iškvies formų krautuvas:

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

2. Pridėkite "captcha" teksto reikšmę prie formos pateikimo

Pateikus formą, parametras automatiškai įtraukiamas g-recaptcha-response į formos pateikimą. Atlikdami kitus veiksmus sukursite papildinį, kuris paslėps šią vertę, nes jis bus įtrauktas į ValidationOnlyFields sąrašą atsakymo objekte, kurį grąžina papildinio kodas.

Pridedamas G-recaptcha-response parametras.

3. Sukurkite papildinį

3.1 Sukurkite Visual Studio papildinio projektą

  1. Atidarykite Visual Studio ir sukurkite naują klasės bibliotekos projektą naudodami .NET Framework 4.6.2.
  2. Sprendimų naršyklėje pasirinkite Tvarkyti paketus NuGet ir įdiekiteMicrosoft.CrmSdk.CoreAssemblies.

3.2 Sukurkite papildinių klasę

  1. Pervardyti Class1.cs į CustomValidationPlugin.cs.

  2. Padarykite, kad CustomValidationPlugin klasė paveldėtų iš IPlugin sąsajos ir pridėkite metodą Vykdyti.

    public class CustomValidationPlugin : IPlugin
    {
       public void Execute(IServiceProvider serviceProvider)
       {
    
       }
    }
    
  3. Pridėkite šį kodą į vykdymo metodą, kad gautumėte kontekstą ir sekimo paslaugą.

    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. Pridėkite šį kodą, kad gautumėte formos pateikimo parametro eilutę. Tai JSON užkoduota eilutė, vaizduojanti laukus, kuriuos vartotojas pateikė formoje. Šis procesas nuskaito šią eilutę ir deserializuoja ją naudodamas Deserialize pagalbininko metodą ir FormSubmissionRequest klasę, kuri bus apibrėžta vėliau. Taip patikrinama, ar masyve Laukai yra g-recaptcha-response raktas. Jei "reCAPTCHA" raktas nerastas, jis grąžina praleistą patvirtinimą, nes apdorojamoje formoje nebuvo "Google recaptcha" elemento.

    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. Pridėkite šį kodą, kad pateiktumėte, jei g-recaptcha-token reikšmė yra neapibrėžta arba tuščia.

    if (String.IsNullOrEmpty(recaptchaToken))
    {
       tracingService.Trace($"g-recaptcha-response value not found");
       return;
    }
    
  6. Pridėkite šį kodą, kad patikrintumėte "Google captcha" prieigos raktą pagal "Google" API.

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

    Pirmiausia apibrėžiamas URL, tada sukuriamas egzempliorius HttpClient . Sukuriamas FormUrlEncodedContent objektas, recaptchaToken kuriame yra ankstesniuose veiksmuose nuskaitytas ir slaptas raktas, kurį pateikia "Google". Tada išsiunčiama POST užklausa ir patikrinamas būsenos kodas, jei nesėkmingai, jis grįžta. Jei pasiseka, jis deserializuoja atsakymą naudodamas Deserialize pagalbininko metodą ir GRecaptchaResponse tai apibrėžiama vėliau. Tada jis sukuria naują ValidateFormSubmissionResponse objektą, jį suskirsto į eiliškumą ir nustato kaip išvesties parametro msdynmkt_validationresponse reikšmę, kuri yra ta, kurią "Microsoft" paslauga naudoja pateikimui priimti arba atmesti. Įtraukus g-recaptcha-response eilutę į sąrašą, ValidationOnlyFields šis laukas paslepiamas nuo formos pateikimo vartotojo sąsajoje.

  7. Pridėkite šį kodą, kad apibrėžtumėte serializavimo ir deserializavimo pagalbininkų metodus.

    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. Pridėkite šį kodą, kad apibrėžtumėte klases, reikalingas JSON eilučių objektams serializuoti / deserializuoti.

    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 Pasirašykite ir sukurkite papildinį

  1. Dešiniuoju pelės mygtuku spustelėkite projektą ir sprendimų naršyklėje pasirinkite Nekilnojamasis turtas.
  2. Pasirinkite skirtuką Pasirašymas ir pažymėkite žymimąjį laukelį Pasirašyti surinkimą .
  3. Pasirinkite <New...>.
  4. Įveskite rakto failo pavadinimą ir panaikinkite žymėjimą Apsaugoti mano rakto failą slaptažodžiu.
  5. Sukurkite projektą.
  6. Papildinio rinkinį CustomValidationPlugin.dll galite rasti \bin\Debug.

3.4 Užregistruokite papildinį

  1. Atidaryta PluginRegistration.exe.
  2. Pasirinkite Sukurti naują ryšį.
  3. Pasirinkti Office 365.
  4. Pasirinkite Prisijungti.
  5. Pasirinkite Registruotis , tada Registruoti naują surinkimą.

    Pasirinkite Registruotis, tada Registruoti naują surinkimą.

  6. Pasirinkite (...) mygtuką 1 veiksme ir pasirinkite dll, integruotą ankstesniuose veiksmuose.
  7. pasirinkti Registruoti pasirinktą papildinį.

3.4 Registracijos žingsnis

  1. Pasirinkite CustomValidationPlugin iš registruotų rinkinių sąrašo.
  2. Pasirinkite Registruoti naują veiksmą.
  3. Įveskite msdynmkt_validateformsubmission į Pranešimo teksto laukas.
  4. Įsitikinkite, kad vykdymo režimas nustatytas kaip sinchroninis.

    Įsitikinkite, kad vykdymo režimas nustatytas kaip sinchronizuotas.

  5. Įsitikinkite, kad nustatyta parinktis Vykdymo užsakymas10.
  6. Įsitikinkite, kad įvykių srauto vykdymo etapas nustatytas kaip "Post Operation".
  7. Pasirinkite Registruoti naują veiksmą.

Apibendrinimas

Kai pateikiama forma su data-validate-submission atributu, paleidžiamas tinkintas papildinys ir patvirtinamas "reCAPTCHA" atsakymas naudojant "Google" paslaugas. Pasirinktinis papildinys veiks po numatytojo "Microsoft" patvirtinimo papildinio. Jei formoje nėra "Microsoft captcha" laukų, "Microsoft" papildinių rinkiniai IsValid:false ir pateikimas nepavyksta, nebent jį perrašysite IsValid:true.

Patvirtinimo srautas.