Dalam sebuah proyek kecil yang saya lakukan beberapa waktu lalu, itu melibatkan masuk dan mendaftar dengan kode verifikasi SMS. Saya belum pernah membahas ini sebelumnya. Saya sebenarnya tidak memahaminya setelah membaca blog orang lain. Sekarang saya akan menuliskan fungsi menggunakan platform SMS pihak ketiga untuk mengirim kode verifikasi.
Mengambil pendaftaran sebagai contoh, artikel ini melengkapi fungsi kode verifikasi SMS berdasarkan kerangka kerja SpringMVC+Spring+MyBatis.
Prinsip pengiriman kode verifikasi SMS adalah: secara acak menghasilkan nomor 6 digit, menyimpan nomor 6 digit ke dalam sesi, klien menilai sesi yang sesuai melalui sessionID, dan membandingkan kode verifikasi yang dimasukkan oleh pengguna dengan kode verifikasi yang direkam oleh sesi.
Untuk mencegah iklan apa pun yang dicurigai, saya tidak akan membicarakan platform SMS mana.
Secara umum, platform SMS pihak ketiga akan memiliki antarmuka SMS mereka sendiri. Selama Anda memahami antarmuka mereka dan membuat sedikit perubahan, Anda dapat memenuhi kebutuhan Anda.
Pertama, daftar kode antarmuka platform SMS: Di sini kita perlu mengunduh tiga paket toples commons-logging-1.1.1.jar, commons-httpclient-3.1.jar, commons-codec-1.4.jar
Impor java.io.unsupportedencodingException; impor org.apache.commons.httpclient.header; impor org.apache.commons.httpclient.httpclient; impor org.apache.commons.httpclient.namevaluaR; org.apache.commons.httpclient.methods.postmethod; kelas publik sendmsg_webchinese {public static void main (string [] args) melempar pengecualian {httpclient client = httpclient (); postmethod post = new Postmethod ("http: htgbk. // Posting Alamat Layanan SMS Pihak Ketiga. //Set transcoding NameValuePair[] data ={ new NameValuePair("Uid", "user name of this site"),new NameValuePair("Key", "interface security key"),new NameValuePair("smsMob","mobile number"),new NameValuePair("smsText","Verification code: 8888 ")}; post.setRequestBody (data); client.executeMethod (post); header [] header = post.getResponseaders (); int statuscode = post.getstatuscode (); System.out.println (" StatusCode: "+StatusCode); untuk (header h: header) {System.out.println (h.toString ());} hasil string = string baru (post.getResponseBodyAsstring (). getBytes ("gbk")); System.out.println (hasil); // cetak kembali Pesan Pesan Pos.ReleasEconnection ();}}It is not difficult to see that the information we want to send is in this line of code: NameValuePair[] data ={ new NameValuePair("Uid", "Site Username"), new NameValuePair("Key", "Interface Security Key"), new NameValuePair("smsMob", "Mobile phone number"), new NameValuePair("smsText","Verification code: 8888 ")};
Ada juga pesan hasil dalam antarmuka ini, yang digunakan untuk memberi tahu pengguna status pengiriman SMS. 1 berarti pengiriman berhasil, dan yang lain kurang dari 0 adalah kegagalan. Di sini, ketahuilah bahwa saya berhasil.
Dalam operasi kami yang sebenarnya, kode verifikasi harus dihasilkan oleh kami. Dapatkan informasi hasil bersama dengan kode verifikasi, jadi mudah untuk memikirkan penggunaan koleksi hashmap. Berikut adalah perubahan antarmuka berdasarkan persyaratan proyek sendiri:
Impor java.util.hashmap; import org.apache.commons.httpclient.header; impor org.apache.commons.httpclient.httpClient; import org.apache.commons.htpclient.namevaluepair; impor org.apache.commons.htpclient.namevaluepair; impor org.apache.commons.htpclient.namevaluepair; impor org.apache.commons.commons com.yuetile.utils.VerifyingCodeGenerator;public class SendMsg_webchineseController {public static HashMap<String,String> getMessageStatus(String phone)throws Exception{HashMap<String,String> m=new HashMap<String,String>();HttpClient client = new HttpClient();PostMethod post = new PostMethod ("http://gbk.sms.webchinese.cn"); Post.AddRequestHeader ("tipe konten", "Aplikasi/X-WWW-Form-Urlencoded; charset = gbk"); // Atur transcoding dalam kode string file header = verifikasicodegenerator.generate (); // kode verifikasi namevaluePair [] data = {neW NamevaluepAire ("neamevaluepair (" uMevaluepair ("uMevaluepair (" uMevaluepair ("uMevaluepair (" uMevaluepair ("uMevaluepair (" uMeValUEPAIR "DATA (]" NamevaluePair ("kunci", "******"), new namevaluePair ("smsmob", telepon), new NamevaluePair ("smstext", "Anda sedang mendaftarkan anggota situs ini, kode verifikasi ini adalah:"+""+"Khusus adalah 5 menit")} (M.Put ","+""+"Kode" adalah 5 menit ")}}}}}}}}}}}}}}}}}}}}}}}}. kode); post.setRequestBody (data); client.executeMethod (post); header [] header = post.getResponseHeaders (); int statuscode = post.getStataScode (); System.out.println ("StatusCode:"+StatusCode); for (header h: header) {{oNTer (header) (header) (header) {System. String (post.getResponseBodyAsstring (). GetBytes ("gbk")); System.out.println (hasil); // Cetak Status Pesan Pengembalian M.Put ("Hasil", Hasil); Post.ReleasEconnection (); return m;}}*** berarti kata sandi akun yang terdaftar pada platform pihak ketiga.
Lapisan Tindakan:
/*** @author hang * @Deccription Register, send SMS verification code, save to Session* @param Encapsulate client request POST * @return Return status parameter* @throws Exception*/@ResponseBody@RequestMapping(value = UrlDefine.Register.CHECKMESSAGEWORK, method = RequestMethod.POST)public Object SendCheckMessage(HttpServletRequest request, @RequestBody UserBean u)throws Exception {string message = "Kirim berhasil"; string phone = u.gettelephone (); // Dapatkan nomor ponsel yang dikirim oleh pengguna klien userbean = UsusService.getByphone (telepon); if (user! = null) {message = "Nomor ponsel telah terdaftar"; kembalikan respons baru (status.error, pesan);} else {hashmap <string, string> m = sendmsg_webchinesecontroller.getmessagestatus (telepon); // aplikasi antarmuka sms hasil string = m.get ("hasil"); // Dapatkan hasil jika (result.trim (). Equals ("1")) {// Jika itu 1, itu berarti bahwa kode string berhasil dikirim. // Dapatkan kode verifikasi yang dikirim logger.info ("Kode verifikasi yang dikirim:"+kode); // cetak log httpsession Sesi = request.getSession (); // atur sesiSionsion.setAttribute ("kode", kode); // Masukkan kode verifikasi SMS di sesi untuk menyimpan session.setmaxInactiveInterval (60 * 5); // Hemat waktu untuk sementara diatur ke 5 menit mengembalikan respons baru (status.success, pesan);} else {message = "SMS Sending Failure"; Kembalikan respons baru (status.error, pesan);}}}Dengan cara ini, pengiriman akan berhasil.
tes:
Uji secara lokal menggunakan tukang pos:
hasil:
Kirim dengan sukses di sini.
Di atas adalah semua konten artikel ini. Saya berharap konten artikel ini akan membantu untuk belajar atau bekerja semua orang. Saya juga berharap untuk mendukung wulin.com lebih lanjut!