ปรับแต่งการตรวจสอบการส่งฟอร์ม
การตรวจสอบฝั่งไคลเอ็นต์ในฟอร์มทางการตลาดและการลงทะเบียนเหตุการณ์ช่วยให้มั่นใจถึงความถูกต้องของข้อมูลที่ลูกค้าส่งมา อย่างไรก็ตาม ในบางกรณี คุณอาจต้องมีการตรวจสอบที่ซับซ้อนมากขึ้น ตัวอย่างเช่น คุณอาจต้องเปรียบเทียบข้อมูลที่ส่งกับข้อมูลที่มีอยู่แล้วในระบบของคุณ บทความนี้ให้รายละเอียดวิธีสร้างปลั๊กอินแบบกำหนดเองเพื่อตรวจสอบข้อมูลที่ส่งในแบ็คเอนด์และทริกเกอร์ตรรกะการประมวลผลข้อมูลเพิ่มเติม
สร้างปลั๊กอิน
หมายเหตุ
ตัวอย่างของปลั๊กอินแบบกำหนดเองนี้แสดงวิธีสร้างการตรวจสอบแบ็คเอนด์สำหรับคีย์ reCAPTCHA สามารถใช้เป็นแรงบันดาลใจสำหรับโฟลว์การตรวจสอบความถูกต้องของคุณ หากคุณต้องการรวม reCAPTCHA เข้ากับฟอร์มของคุณ คุณสามารถใช้ปลั๊กอินที่สร้างไว้ล่วงหน้าและทำตามคำแนะนำนี้
สร้างโครงการ Visual Studio สำหรับปลั๊กอิน
- เปิด Visual Studio และสร้างโครงการคลังของคลาสใหม่โดยใช้ .NET framework 4.6.2
- ใน Solution Explorer เลือ จัดการแพ็คเกจ NuGet และติดตั้ง
Microsoft.CrmSdk.CoreAssemblies
สร้างคลาสปลั๊กอิน
เปลี่ยนชื่อ
Class1.cs
เป็นCustomValidationPlugin.cs
ทำให้คลาส CustomValidationPlugin สืบทอดมาจากอินเตอร์เฟส IPlugin และเพิ่มวิธีการดำเนินการ
public class CustomValidationPlugin : IPlugin { public void Execute(IServiceProvider serviceProvider) { } }
หากต้องการดึงข้อมูลบริบทและบริการติดตาม ให้เพิ่มโค้ดต่อไปนี้ลงในวิธีการดำเนินการ
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)); }
เพิ่มรหัสนี้เพื่อดึงสตริงพารามิเตอร์การส่งฟอร์ม ซึ่งเป็นสตริงที่เข้ารหัส 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; }
เพิ่มโค้ดต่อไปนี้เพื่อส่งคืนถ้าค่า
g-recaptcha-token
เป็น null หรือว่างเปล่าif (String.IsNullOrEmpty(recaptchaToken)) { tracingService.Trace($"g-recaptcha-response value not found"); return; }
เพิ่มโค้ดต่อไปนี้เพื่อตรวจสอบความถูกต้องของโทเค็น 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
จะซ่อนฟิลด์นี้จากการส่งฟอร์มในส่วนติดต่อผู้ใช้เพิ่มรหัสต่อไปนี้เพื่อกำหนดวิธีตัวช่วยซีเรียลไลซ์และดีซีเรียลไลซ์
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; }
เพิ่มโค้ดต่อไปนี้เพื่อกำหนดคลาสที่จำเป็นในการซีเรียลไลซ์และดีซีเรียลไลซ์ออบเจ็กต์สตริง 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; } }
ลงชื่อและสร้างปลั๊กอิน
- คลิกขวาที่โครงการและเลือก คุณสมบัติ ใน ตัวสำรวจโซลูชัน
- เลือกแท็บ ลงชื่อ และทำเครื่องหมายที่กล่องทำเครื่องหมาย ลงชื่อแอสเซมบลี
- เลือก
<New...>
- ป้อนชื่อไฟล์คีย์และยกเลิกการเลือก ป้องกันไฟล์คีย์ของฉันด้วยรหัสผ่าน
- สร้างโครงการ
- คุณจะพบแอสเซมบลีปลั๊กอิน
CustomValidationPlugin.dll
ใน\bin\Debug
ลงทะเบียนปลั๊กอิน
- เปิด
PluginRegistration.exe
- เลือก สร้างการเชื่อมต่อใหม่
- เลือก Office 365
- เลือกเข้าสู่ระบบ
- เลือก ลงทะเบียน และจากนั้น ลงทะเบียนแอสเซมบลีใหม่
- เลือกปุ่ม (...) ในขั้นตอนที่ 1 และเลือก dll ที่สร้างขึ้นในขั้นตอนก่อนหน้า
- เลือก ลงทะเบียนปลั๊กอินที่เลือก
ลงทะเบียนขั้นตอน
- เลือก CustomValidationPlugin จากรายการแอสเซมบลีที่ลงทะเบียน
- เลือก ลงทะเบียนขั้นตอนใหม่
- ป้อน
msdynmkt_validateformsubmission
ลงในฟิลด์ข้อความ - ตรวจสอบให้แน่ใจว่า โหมดการดำเนินการ ถูกตั้งค่าเป็น ซิงโครนัส
- ตรวจสอบให้แน่ใจว่า คำสั่งดำเนินการ ถูกตั้งค่าเป็น
10
- ตรวจสอบให้แน่ใจว่า ลำดับขั้นของไปป์ไลน์เหตุการณ์ของการดำเนินการ ตั้งค่าเป็น หลังการดำเนินการ
- เลือก ลงทะเบียนขั้นตอนใหม่
บทสรุป
เมื่อส่งฟอร์มที่มีแอตทริบิวต์ data-validate-submission
แล้ว ปลั๊กอินที่กำหนดเองของคุณจะเรียกใช้และตรวจสอบการตอบสนองของ reCAPTCHA กับบริการของ Google ปลั๊กอินที่กำหนดเองทำงานหลังจากปลั๊กอินการตรวจสอบ Microsoft เริ่มต้น หากไม่มีฟิลด์ Microsoft captcha ในฟอร์ม ปลั๊กอิน Microsoft จะตั้งค่า IsValid:false
และการส่งจะล้มเหลว เว้นแต่คุณจะเขียนทับด้วย IsValid:true