แชร์ผ่าน


ปรับแต่งการตรวจสอบการส่งฟอร์ม

การตรวจสอบฝั่งไคลเอ็นต์ในฟอร์มทางการตลาดและการลงทะเบียนเหตุการณ์ช่วยให้มั่นใจถึงความถูกต้องของข้อมูลที่ลูกค้าส่งมา อย่างไรก็ตาม ในบางกรณี คุณอาจต้องมีการตรวจสอบที่ซับซ้อนมากขึ้น ตัวอย่างเช่น คุณอาจต้องเปรียบเทียบข้อมูลที่ส่งกับข้อมูลที่มีอยู่แล้วในระบบของคุณ บทความนี้ให้รายละเอียดวิธีสร้างปลั๊กอินแบบกำหนดเองเพื่อตรวจสอบข้อมูลที่ส่งในแบ็คเอนด์และทริกเกอร์ตรรกะการประมวลผลข้อมูลเพิ่มเติม

สร้างปลั๊กอิน

หมายเหตุ

ตัวอย่างของปลั๊กอินแบบกำหนดเองนี้แสดงวิธีสร้างการตรวจสอบแบ็คเอนด์สำหรับคีย์ reCAPTCHA สามารถใช้เป็นแรงบันดาลใจสำหรับโฟลว์การตรวจสอบความถูกต้องของคุณ หากคุณต้องการรวม reCAPTCHA เข้ากับฟอร์มของคุณ คุณสามารถใช้ปลั๊กอินที่สร้างไว้ล่วงหน้าและทำตามคำแนะนำนี้

สร้างโครงการ Visual Studio สำหรับปลั๊กอิน

  1. เปิด Visual Studio และสร้างโครงการคลังของคลาสใหม่โดยใช้ .NET framework 4.6.2
  2. ใน Solution Explorer เลือ จัดการแพ็คเกจ NuGet และติดตั้ง Microsoft.CrmSdk.CoreAssemblies

สร้างคลาสปลั๊กอิน

  1. เปลี่ยนชื่อ Class1.cs เป็น CustomValidationPlugin.cs

  2. ทำให้คลาส CustomValidationPlugin สืบทอดมาจากอินเตอร์เฟส IPlugin และเพิ่มวิธีการดำเนินการ

    public class CustomValidationPlugin : IPlugin
    {
       public void Execute(IServiceProvider serviceProvider)
       {
    
       }
    }
    
  3. หากต้องการดึงข้อมูลบริบทและบริการติดตาม ให้เพิ่มโค้ดต่อไปนี้ลงในวิธีการดำเนินการ

    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. เพิ่มรหัสนี้เพื่อดึงสตริงพารามิเตอร์การส่งฟอร์ม ซึ่งเป็นสตริงที่เข้ารหัส JSON ซึ่งแสดงฟิลด์ที่ผู้ใช้ส่งมาในฟอร์ม กระบวนการนี้จะดึงข้อมูลสตริงและดีซีเรียลไลซ์โดยใช้วิธีตัวช่วยดีซีเรียลไลซ์และคลาส FormSubmissionRequest ที่ได้รับการกำหนดในภายหลัง โค้ดนี้จะตรวจสอบว่าอาร์เรย์ฟิลด์มีคีย์สำหรับ g-recaptcha-response หากไม่พบคีย์ reCAPTCHA คีย์จะส่งคืนการข้ามการตรวจสอบความถูกต้องเนื่องจากฟอร์มที่กำลังประมวลผลไม่มีองค์ประกอบ 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;
    }
    
  5. เพิ่มโค้ดต่อไปนี้เพื่อส่งคืนถ้าค่า g-recaptcha-token เป็น null หรือว่างเปล่า

    if (String.IsNullOrEmpty(recaptchaToken))
    {
       tracingService.Trace($"g-recaptcha-response value not found");
       return;
    }
    
  6. เพิ่มโค้ดต่อไปนี้เพื่อตรวจสอบความถูกต้องของโทเค็น Google captcha กับ 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}");
        }
    }
    

    ขั้นแรก กำหนด URL จากนั้นสร้างอินสแตนซ์ของ HttpClient ออบเจ็กต์ FormUrlEncodedContent ถูกสร้างโดยมี recaptchaToken ที่ดึงมาในขั้นตอนก่อนหน้าและคีย์ลับที่ Google ให้มา จากนั้น คำขอ POST จะถูกส่งและตรวจสอบรหัสสถานะ หากไม่สำเร็จก็จะส่งกลับ หากสำเร็จ จะยกเลิกการตอบกลับโดยใช้วิธีตัวช่วยดีซีเรียลไลซ์และ GRecaptchaResponse ที่ได้รับการกำหนดในภายหลัง จากนั้นจะสร้างออบเจ็กต์ ValidateFormSubmissionResponse ใหม่ ทำให้เป็นอนุกรม และตั้งค่าเป็นค่าของพารามิเตอร์เอาต์พุต msdynmkt_validationresponse ซึ่งเป็นบริการหนึ่งของ Microsoft ที่ใช้เพื่อยอมรับหรือปฏิเสธการส่ง การเพิ่มสตริง g-recaptcha-response ลงในรายการ ValidationOnlyFields จะซ่อนฟิลด์นี้จากการส่งฟอร์มในส่วนติดต่อผู้ใช้

  7. เพิ่มรหัสต่อไปนี้เพื่อกำหนดวิธีตัวช่วยซีเรียลไลซ์และดีซีเรียลไลซ์

    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

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

ลงชื่อและสร้างปลั๊กอิน

  1. คลิกขวาที่โครงการและเลือก คุณสมบัติ ใน ตัวสำรวจโซลูชัน
  2. เลือกแท็บ ลงชื่อ และทำเครื่องหมายที่กล่องทำเครื่องหมาย ลงชื่อแอสเซมบลี
  3. เลือก <New...>
  4. ป้อนชื่อไฟล์คีย์และยกเลิกการเลือก ป้องกันไฟล์คีย์ของฉันด้วยรหัสผ่าน
  5. สร้างโครงการ
  6. คุณจะพบแอสเซมบลีปลั๊กอิน CustomValidationPlugin.dll ใน \bin\Debug

ลงทะเบียนปลั๊กอิน

  1. เปิด PluginRegistration.exe
  2. เลือก สร้างการเชื่อมต่อใหม่
  3. เลือก Office 365
  4. เลือกเข้าสู่ระบบ
  5. เลือก ลงทะเบียน และจากนั้น ลงทะเบียนแอสเซมบลีใหม่ เลือก ลงทะเบียน และจากนั้น ลงทะเบียนแอสเซมบลีใหม่
  6. เลือกปุ่ม (...) ในขั้นตอนที่ 1 และเลือก dll ที่สร้างขึ้นในขั้นตอนก่อนหน้า
  7. เลือก ลงทะเบียนปลั๊กอินที่เลือก

ลงทะเบียนขั้นตอน

  1. เลือก CustomValidationPlugin จากรายการแอสเซมบลีที่ลงทะเบียน
  2. เลือก ลงทะเบียนขั้นตอนใหม่
  3. ป้อน msdynmkt_validateformsubmission ลงในฟิลด์ข้อความ
  4. ตรวจสอบให้แน่ใจว่า โหมดการดำเนินการ ถูกตั้งค่าเป็น ซิงโครนัส ตรวจสอบให้แน่ใจว่า โหมดการดำเนินการ ถูกตั้งค่าเป็น ซิงโครนัส
  5. ตรวจสอบให้แน่ใจว่า คำสั่งดำเนินการ ถูกตั้งค่าเป็น 10
  6. ตรวจสอบให้แน่ใจว่า ลำดับขั้นของไปป์ไลน์เหตุการณ์ของการดำเนินการ ตั้งค่าเป็น หลังการดำเนินการ
  7. เลือก ลงทะเบียนขั้นตอนใหม่

บทสรุป

เมื่อส่งฟอร์มที่มีแอตทริบิวต์ data-validate-submission แล้ว ปลั๊กอินที่กำหนดเองของคุณจะเรียกใช้และตรวจสอบการตอบสนองของ reCAPTCHA กับบริการของ Google ปลั๊กอินที่กำหนดเองทำงานหลังจากปลั๊กอินการตรวจสอบ Microsoft เริ่มต้น หากไม่มีฟิลด์ Microsoft captcha ในฟอร์ม ปลั๊กอิน Microsoft จะตั้งค่า IsValid:false และการส่งจะล้มเหลว เว้นแต่คุณจะเขียนทับด้วย IsValid:true

โฟลว์การตรวจสอบความถูกต้อง