ในโครงการขนาดเล็กที่ฉันทำเมื่อไม่นานมานี้มันเกี่ยวข้องกับการเข้าสู่ระบบและลงทะเบียนด้วยรหัสการตรวจสอบ SMS ฉันไม่เคยพูดถึงเรื่องนี้มาก่อน จริง ๆ แล้วฉันไม่เข้าใจหลังจากอ่านบล็อกของคนอื่น ตอนนี้ฉันจะเขียนฟังก์ชั่นของการใช้แพลตฟอร์ม SMS ของบุคคลที่สามเพื่อส่งรหัสการตรวจสอบ
การลงทะเบียนเป็นตัวอย่างบทความนี้เสร็จสิ้นฟังก์ชั่นรหัสการตรวจสอบ SMS โดยใช้ SpringMVC+Spring+MyBatis Framework
หลักการของการส่งรหัสการตรวจสอบ SMS คือ: แบบสุ่มสร้างหมายเลข 6 หลัก, บันทึกหมายเลข 6 หลักลงในเซสชันไคลเอนต์ตัดสินเซสชันที่เกี่ยวข้องผ่าน SessionID และเปรียบเทียบรหัสการยืนยันที่ป้อนโดยผู้ใช้ด้วยรหัสการตรวจสอบที่บันทึกโดยเซสชัน
เพื่อป้องกันไม่ให้โฆษณาใด ๆ ที่สงสัยว่าฉันจะไม่พูดถึงแพลตฟอร์ม SMS ใด
โดยทั่วไปแพลตฟอร์ม SMS ของบุคคลที่สามจะมีอินเทอร์เฟซ SMS ของตัวเอง ตราบใดที่คุณเข้าใจอินเทอร์เฟซของพวกเขาและเปลี่ยนแปลงเล็กน้อยคุณสามารถตอบสนองความต้องการของคุณได้
ก่อนอื่นให้แสดงรายการรหัสอินเตอร์เฟสแพลตฟอร์ม SMS: ที่นี่เราจำเป็นต้องดาวน์โหลดแพ็คเกจสามขวดคอมมอนส์-ล็อก 1.1.1.jar, Commons-httpClient-3.1.jar, Commons-Codec-1.4.jar
นำเข้า java.io.unsupportenCodingException; นำเข้า org.apache.Commons.httpClient.header; นำเข้า org.apache.Commons.httpClient.httpClient; นำเข้า org.apache.Commons.httpClient.namevaluepair; คลาส SENDMSG_WEBCHINESE {โมฆะสาธารณะคงที่หลัก (สตริง [] args) พ่นข้อยกเว้น {httpClient client = ใหม่ httpClient (); postmethod post = postmethod ใหม่ ("http://gbk.sms.webchinese.cn"); // ที่อยู่บริการ SMS ของบุคคลที่สามโพสต์ Addrequestheader ("เนื้อหาประเภท", "แอปพลิเคชัน/x-www-form-urlencoded; charset = gbk"); // ตั้งค่า transcoding namevaluePair [] data = {namevaluePair ใหม่ ("uid", "ชื่อผู้ใช้ของเว็บไซต์นี้"), namevaluePair ใหม่ ("key", "Key Interface Security"), NamevaluePair ใหม่ ("SMSMOB", "หมายเลขโทรศัพท์มือถือ") 8888 ")}; post.setRequestBody (data); client.executemethod (โพสต์); ส่วนหัว [] ส่วนหัว = post.getResponseHeaders (); int StatusCode = post.getStatusCode (); system.out.println (" สถานะ: " ส่วนหัว) {system.out.println (h.toString ());} สตริงผลลัพธ์ = สตริงใหม่ (post.getResponseBodyString (). getBytes ("GBK")); System.out.println (ผลลัพธ์); // พิมพ์สถานะข้อความส่งคืนโพสต์. releaseconnection ();}}ไม่ยากที่จะเห็นว่าข้อมูลที่เราต้องการส่งอยู่ในบรรทัดของรหัสนี้: namevaluePair [] data = {ใหม่ namevaluePair ("uid", "ชื่อผู้ใช้ไซต์"), namevaluePair ใหม่ ("กุญแจ" รหัส: 8888 ")};
นอกจากนี้ยังมีข้อความผลลัพธ์ในอินเทอร์เฟซนี้ซึ่งใช้เพื่อบอกสถานะของการส่ง SMS 1 หมายถึงการส่งนั้นประสบความสำเร็จและคนอื่น ๆ น้อยกว่า 0 เป็นความล้มเหลว ที่นี่เพิ่งรู้ว่า 1 ประสบความสำเร็จ
ในการดำเนินการจริงของเรารหัสการตรวจสอบจะต้องถูกสร้างขึ้นโดยเรา รับข้อมูลผลลัพธ์พร้อมกับรหัสการตรวจสอบดังนั้นจึงเป็นเรื่องง่ายที่จะคิดว่าใช้คอลเลกชัน HashMap นี่คือการเปลี่ยนแปลงของอินเทอร์เฟซตามข้อกำหนดของโครงการ:
นำเข้า java.util.hashmap; นำเข้า org.apache.commons.httpclient.header; นำเข้า org.apache.commons.httpClient.httpClient นำเข้า org.acommons.httpClient.namevaluepair; com.yuetile.utils.verifyingCodeGenerator; คลาสสาธารณะ SENDMSG_WEBCHINESECONTROLLER {Public Static HashMap <String, String> GetMessagestatus (สตริงโทรศัพท์) โยนข้อยกเว้น {HashMap <String, String> m = new HashMap <String, String> () postmethod ("http://gbk.sms.webchinese.cn"); post.addrequestheader ("เนื้อหาประเภท", "แอปพลิเคชัน/x-ww-form-urlencoded; charset = gbk"); // ตั้งค่าการแปลงรหัสในรหัสสตริงไฟล์ส่วนหัว = VerifyingCodeGenerator.generate (); // รหัสยืนยัน namevaluepair NamevaluePair ("key", "******"), namevaluePair ใหม่ ("smsmob", โทรศัพท์), namevaluepair ใหม่ ("smstext", "คุณกำลังลงทะเบียนสมาชิกของเว็บไซต์นี้รหัสการตรวจสอบนี้คือ:" รหัส+""+" รหัส); post.setRequestbody (data); client.executemethod (โพสต์); ส่วนหัว [] ส่วนหัว = post.getResponseHeaders (); int StatusCode = post.getStatusCode (); system.out.println ("stationsCode:" statusCode); String (post.getResponseBodyString (). getBytes ("GBK")); System.out.println (ผลลัพธ์); // พิมพ์สถานะข้อความส่งคืน m.put ("ผลลัพธ์", ผลลัพธ์); post.releaseconnection (); return m;}}*** หมายถึงรหัสผ่านบัญชีที่ลงทะเบียนบนแพลตฟอร์มบุคคลที่สาม
เลเยอร์การกระทำ:
/*** @author Hang* @deccription register, ส่งรหัสการตรวจสอบ SMS, บันทึกไปยังเซสชัน* @param encapsulate client resugh post* @return return parameter สถานะ* @throws ยกเว้น*/ @responsebody @requestmapping (value = urldefine.register.checkMessageWork, method = requestmethod.post) u) โยนข้อยกเว้น {String message = "ส่งสำเร็จ"; String Phone = U.GetTelephone (); // รับหมายเลขโทรศัพท์มือถือที่ส่งโดยผู้ใช้ไคลเอ็นต์ผู้ใช้เบียน = userservice.getByphone (โทรศัพท์); if (user! = null) {message = "หมายเลขโทรศัพท์มือถือได้รับการลงทะเบียนแล้ว"; ส่งคืนการตอบกลับใหม่ (status.error, ข้อความ);} else {hashmap <string, string> m = sendmsg_webchinesecontroller.getMessagestatus (โทรศัพท์); // แอปพลิเคชัน SMS อินเตอร์เฟสสตริงผลลัพธ์ = m.get ("ผลลัพธ์"); // รับผลลัพธ์ถ้า (result.trim (). เท่ากับ ("1")) {// ถ้าเป็น 1 หมายความว่ารหัสสตริงถูกส่งสำเร็จ // รับรหัสการตรวจสอบเนื้อหาที่ส่งเข้า logger.info ("รหัสการตรวจสอบที่ส่ง:"+รหัส); // พิมพ์บันทึก httpsession session = request.getSession (); // set sessionssion.setAttribute ("รหัส", รหัส); // ใส่รหัสการตรวจสอบ SMS ในเซสชันเพื่อบันทึกเซสชัน SetMaxInactiveInterval (60 * 5); // บันทึกเวลาตั้งค่าชั่วคราวเป็น 5 นาทีส่งคืนการตอบกลับใหม่ (state.success, ข้อความ);} else {message = "SMS การส่งล้มเหลว"; ส่งคืนการตอบกลับใหม่ (status.error, ข้อความ);}}}ด้วยวิธีนี้การส่งจะประสบความสำเร็จ
ทดสอบ:
ทดสอบในพื้นที่โดยใช้บุรุษไปรษณีย์:
ผลลัพธ์:
ส่งสำเร็จที่นี่
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่าเนื้อหาของบทความนี้จะช่วยในการศึกษาหรือทำงานของทุกคน ฉันหวังว่าจะสนับสนุน Wulin.com เพิ่มเติม!