Dans un petit projet que j'ai fait il y a quelque temps, cela impliquait de se connecter et de m'inscrire avec des codes de vérification SMS. Je n'avais jamais couvert ça auparavant. En fait, je ne l'ai pas compris après avoir lu les blogs d'autres personnes. Maintenant, je vais noter la fonction de l'utilisation de la plate-forme SMS tierce pour envoyer des codes de vérification.
Prenant l'exemple de l'enregistrement, cet article complète la fonction de code de vérification SMS basée sur le cadre SpringMVC + Spring + MyBatis.
Le principe de l'envoi du code de vérification SMS est: générer de manière aléatoire un numéro à 6 chiffres, enregistrer le numéro à 6 chiffres dans la session, le client juge la session correspondante via SessionID et compare le code de vérification entré par l'utilisateur avec le code de vérification enregistré par la session.
Afin d'éviter que toute annonce soit suspectée, je ne parlerai pas de la plate-forme SMS.
Généralement, les plates-formes SMS tierces auront leur propre interface SMS. Tant que vous comprenez leur interface et faites un léger changement, vous pouvez répondre à vos besoins.
Tout d'abord, énumérez le code d'interface de la plate-forme SMS: Ici, nous devons télécharger trois packages Jar Commons-Logging-1.1.1.jar, commons-httpclient-3.1.jar, commons-codec-1.4.jar
Importer java.io.unsupportEnCoDingException; import org.apache.commons.httpclient.header; import org.apache.commons.httpclient.httpclient; import org.apache.commons.httpclient.methods.postMethod; classe publique sendmsg_webchinese {public static void main (string [] args) exception {httpclient client = new httpclient (); postMethod post = new postMethod ("http://gbk.smsms.webchchese.cn"); // l'adresse de service SMS tiers post.AdDrequestHeader ("Content-Type", "Application / X-Www-Form-Urlencoded; charSet = GBK"); // Définir le transcodage nameValuepair [] data = {new nameValuepair ("uid", "nom d'utilisateur de ce site"), new nameValuepair ("key", "interface security key"), new nameValuepair ("smsmob", "mobile numéro"), new nameValuepair ("smStext", "Verrification Code: 8888 ")}; post.SetRequestBody (data); client.execUcuTeThod (post); header [] headers = post.getResponseHeders (); int statuscode = post.getStaturScode (); System.out.println (" statuscode: "+ statuscode); pour (en-tête h: en-têtes) {System.out.println (h.toString ());} string result = new String (post.getResponseBodyAsstring (). GetBytes ("gbk")); System.out.println (résultat); // Imprimer le message de retour statut post.releaseconnection ();}}Il n'est pas difficile de voir que les informations que nous souhaitons envoyer se trouvent dans cette ligne de code: nameValuepair [] data = {new nameValuepair ("uid", "site username"), new nameValuepair ("key", "interface security key 8888 ")};
Il existe également un message de résultat dans cette interface, qui est utilisée pour indiquer à l'utilisateur l'état de l'envoi de SMS. 1 signifie que l'envoi est réussi, et d'autres moins de 0 sont des échecs. Ici, sachez que je réussit.
Dans nos opérations réelles, le code de vérification doit être généré par nous. Récupérez les informations sur les résultats avec le code de vérification, il est donc facile de penser à utiliser une collection HashMap. Voici les modifications de l'interface en fonction des propres exigences du projet:
import java.util.hashmap; import org.apache.commons.httpclient.header; import org.apache.commons.httpclient.httpclient; import org.apache.commons.httpclient.namevaluepair; import org.apache.commons.httpcllient.Methods.postmethod; com.yuetile.utils.verifiedCodeGenerator; classe publique sendmsg_webchineSeController {public static hashmap <string, string> getMessageStatus (String Phone) lève une exception {hashmap <newnmap PostMethod ("http://gbk.sms.webchinese.cn"); post.adDrequestHeader ("Content-Type", "Application / X-Www-Form-Urlencoded; charSet = GBK"); // Définir le transcodage dans le code de fichier en tête Code = VeriveyCodeGenerator.GenERERE (); // Vérification Code NameValuepair [] Data = {new NameValuepair ("UID", "*"), newa NameValuePair("Key", "******"),new NameValuePair("smsMob",phone),new NameValuePair("smsText","You are registering a member of this site, this verification code is: "+code+""+"ValueTime is 5 minutes")};m.put("code", Code); post.SetRequestBody (données); client.execureMethod (post); en-tête [] en-têtes = post.getResponseHeas (); int statuscode = post.getStaturcode (); System.out.println ("statuscode:" + statuscode); for (en-tête h: en-têtes) {system.out.println (h.tostring (); String (post.getResponseBodyAsstring (). GetBytes ("gbk")); System.out.println (résultat); // Imprimer l'état du message de retour m.put ("result", résultat); post.releaseconnection (); return m;}}*** signifie le mot de passe du compte enregistré sur une plate-forme tierce.
Couche d'action:
/ *** @Author Hang * @Deccription Register, Envoyer un code de vérification SMS, Enregistrer à la session * @param encapsulat Client Request Post * @return return Status Parameter * @throws exception * / @ réponsebody @ requestmapping (value = urldefine.register.checkmesagework, méthode = requestMethod.Post) public userBeanSage (htTPServleTrElestre {String Message = "Envoyer avec succès"; String Phone = U.GetTelephone (); // Obtenez le numéro de téléphone mobile envoyé par le client Userbean user = userService.getByphone (téléphone); if (user! = null) {message = "Le numéro de téléphone mobile a été enregistré"; return new Response (status.error, message);} else {hashmap <string, string> m = sendmsg_webchineSecTroller.getMessageStatus (téléphone); // Application SMS Interface String result = M.get ("result"); // Obtenez le résultat if (result.trim (). Equals ("1")) {// Si c'est 1, cela signifie que le code de chaîne est envoyé avec succès. // Obtenez le contenu du code de vérification envoyée Logger.info ("Code de vérification envoyée:" + code); // imprime le journal httpSession Session = request.getSession (); // définir sessions.SetAttribute ("code", code); // Mettez le code de vérification SMS dans la session pour enregistrer la session.SetMaxInactiveInterval (60 * 5); // Enregistrer le temps réglé temporairement sur 5 minutes Retour nouvelle réponse (status.success, message);} else {message = "SMS Envoi a échoué"; renvoyer une nouvelle réponse (status.error, message);}}}De cette façon, l'envoi réussira.
test:
Tester localement à l'aide de facteur:
résultat:
Envoyez avec succès ici.
Ce qui précède est tout le contenu de cet article. J'espère que le contenu de cet article sera d'une aide à l'étude ou au travail de chacun. J'espère également soutenir plus Wulin.com!