使用企业微信开发自动发送验证码 企业微信短信验证
在微信公众号上的个人会员注册的界面进行手机号验证功能,如下图:
1、注册认证步骤详解
我这里选择了腾讯云的,大家可以选其他公司的,都大同小异。那下面直接开始!新账号注册可以免费领取短信包一百条,设置成功后好像还会送一百条!如下图:
点击直接注册,我们会直接到如下界面!
我们直接点击短信,我们选择注册方式,微信扫码简单快速!注意需要「关注」服务号!
扫码完成,就已经注册成功,接下来就是实名认证!个人认证和企业认证两种方式,我这里选择的是个人认证。
填写个人认证的相关信息!
注册成功后,我们接下来正式开始完成短信调用的部分,因为发送短信我们需要携带签名,所以需要创建签名。点击国内短信------签名管理-----创建签名。因为我之前创建过,所以下面会显示一条!如图:
需要选择签名类型,我这里是公众号,根据自己的需求选择。填写名称可随意但是要符合要求(一般填写公司的名称),上传备案截图(选择类型不同,上传的截图不同,官网有实例,可以用来参考。)和说明后就可以确认提交,一般审核五分钟左右:
签名内容就是短信【一直Tom猫】中的文字。如下图:
签名创建成功后,我们需要创建正文模板,下选择国内短信----------正文模板管理,创建一个新的短信模板,步骤和签名创建类似,可以自定义短信内容,也可以套用模板。创建完成后也需要审核,前提是必须有签名才可以申请模板,不然会被驳回。申请成功如图:
创建新的正文模板,模板名称是用来表示那个正文模板的。如下图:
点击使用标准模板。会出现几个模板供我们选择使用!如下图:
签名和正文模板创建完成后,我们还需要创建应用,如下图:
我们只需要填写名称和应用简介。
创建应用成功界面。
我们点击基础设置,还可以设置一些其他的设置。比如发送的频率、白黑名单等。
我们的注册配置就完成了,下面就开始接入到我们的java中。
2、代码实现
首先需要导入两个包。
<dependency>
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java</artifactId>
<version>3.1.87</version>
</dependency>
<dependency>
<groupId>com.github.qcloudsms</groupId>
<artifactId>qcloudsms</artifactId>
<version>1.0.6</version>
</dependency>
</dependencies>
发送短信的工具类。在我们实际的开发中需要将这些配置信息放到配置文件中进行获取。将这些配置参数换成自己注册的就可以。
package com.example.demo.utils;
import com.github.qcloudsms.SmsSingleSender;
import com.github.qcloudsms.SmsSingleSenderResult;
import com.github.qcloudsms.httpclient.HTTPException;
import org.json.JSONException;
import org.json.JSONObject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.IOException;
public class SMSUtil {
public static String sendSMS(HttpServletRequest request, String phoneNumber) {
String reStr = ""; //定义返回值
// 短信应用SDK AppID 1400开头
int appid = 1400****** ;
// 短信应用SDK AppKey
String appkey = "748b5b42c2896e46*****bf60fe43";
// 短信模板ID,需要在短信应用中申请
int templateId = 697*** ;
// 签名,使用的是签名内容,而不是签名ID
String smsSign = "一直Tom猫";
//随机生成四位验证码的工具类
String code = keyUtil.keyUtils();
try {
//参数,一定要对应短信模板中的参数顺序和个数,
String[] params = {code};
//创建ssender对象
SmsSingleSender ssender = new SmsSingleSender(appid, appkey);
//发送
SmsSingleSenderResult result = ssender.sendWithParam("86", phoneNumber,templateId, params, smsSign, "", "");
if(result.result!=0){
reStr = "error";
}
// 签名参数未提供或者为空时,会使用默认签名发送短信
HttpSession session = request.getSession();
//JSONObject存入数据
JSONObject json = new JSONObject();
json.put("Code", code);//存入验证码
json.put("createTime", System.currentTimeMillis());//存入发送短信验证码的时间
// 将验证码和短信发送时间码存入SESSION
request.getSession().setAttribute("MsCode", json);
reStr = "success";
} catch (HTTPException e) {
// HTTP响应码错误
e.printStackTrace();
} catch (JSONException e) {
// json解析错误
e.printStackTrace();
} catch (IOException e) {
// 网络IO错误
e.printStackTrace();
}catch (Exception e) {
// 网络IO错误
e.printStackTrace();
}
return reStr;
}
}
生成四位验证码的工具类
package com.example.demo.utils;
import java.util.Random;
public class keyUtil {
public static String keyUtils() {
String str="0123456789";
StringBuilder st=new StringBuilder(4);
for(int i=0;i<4;i++){
char ch=str.charAt(new Random().nextInt(str.length()));
st.append(ch);
}
String findkey=st.toString().toLowerCase();
return findkey;
}
}
测试接口
package com.example.demo.test;
import javax.servlet.http.HttpServletRequest;
import com.example.demo.utils.SMSUtil;
import org.json.JSONObject;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class sendMessage {
//点击发送验证码
@GetMapping("/sendMs")
public String sendMs (HttpServletRequest request, String phoneNumber){
if(phoneNumber!=null&&!phoneNumber.equals("")){
String s = SMSUtil.sendSMS(request,phoneNumber);
return s;
}else{
return "error";
}
}
//点击注册
@GetMapping("/register")
public Object register(HttpServletRequest request, String Code) {
JSONObject json = (JSONObject)request.getSession().getAttribute("MsCode");
if(!json.getString("Code").equals(Code)){
return "验证码错误";
}
//我这里模拟了一分钟
if((System.currentTimeMillis() - json.getLong("createTime")) > 1000 * 60 * 1){
return "验证码过期";
}
//将用户信息存入数据库、这里省略
return "success";
}
}
我在本地测试的没有问题的。是不是 so easy!
上一篇: epoll