ToB企服应用市场:ToB评测及商务社交产业平台

标题: 腾讯云短信申请与使用 [打印本页]

作者: 没腿的鸟    时间: 2024-7-31 04:07
标题: 腾讯云短信申请与使用
一、申请微信公众号

1.网页搜索微信公众平台

https://mp.weixin.qq.com/

2.注册






创建成功之后,更换头像和名称(刚注册成功之后,三天内名称不换则自动注销)

二、进入腾讯云创建署名管理和正文模板

1.网页搜索腾讯云官网

进入后搜索短信

2.申请署名管理(需要改名字审核通过了才行)

我的是当天下战书5点改的公众号名,第二天上午就申请通过了

3.创建正文模板(使用标准模板)


4.通过官方文档使用腾讯云短信

https://cloud.tencent.com/document/product/382/43194

三、测试

1.引入依靠

https://github.com/tencentcloud/tencentcloud-sdk-java
  1. <dependency>
  2.     <groupId>com.tencentcloudapi</groupId>
  3.     <artifactId>tencentcloud-sdk-java</artifactId>
  4.     <version>3.1.547</version>
  5. </dependency>
复制代码
2.腾讯云短信工具类

里面要填写的信息自己修改
  1. import com.tencentcloudapi.common.Credential;
  2. import com.tencentcloudapi.common.exception.TencentCloudSDKException;
  3. import com.tencentcloudapi.common.profile.ClientProfile;
  4. import com.tencentcloudapi.common.profile.HttpProfile;
  5. import com.tencentcloudapi.sms.v20210111.SmsClient;
  6. import com.tencentcloudapi.sms.v20210111.models.SendSmsRequest;
  7. import com.tencentcloudapi.sms.v20210111.models.SendSmsResponse;
  8. public class TxSmsUtils {
  9.     private static final String SECRET_ID = "主页搜索API密钥管理(SecretId)";
  10.     private static final String SECRET_KEY= "主页搜索API密钥管理(SecretKey)";
  11.     public static void SendCode(String phoneNumber,String code){
  12.         try {
  13.             /* 必要步骤:
  14.              * 实例化一个认证对象,入参需要传入腾讯云账户密钥对secretId,secretKey。
  15.              * 这里采用的是从环境变量读取的方式,需要在环境变量中先设置这两个值。
  16.              * 你也可以直接在代码中写死密钥对,但是小心不要将代码复制、上传或者分享给他人,
  17.              * 以免泄露密钥对危及你的财产安全。
  18.              * SecretId、SecretKey 查询: https://console.cloud.tencent.com/cam/capi */
  19.             Credential cred = new Credential("secretId", "secretKey");
  20.             // 实例化一个http选项,可选,没有特殊需求可以跳过
  21.             HttpProfile httpProfile = new HttpProfile();
  22.             // 设置代理(无需要直接忽略)
  23.             // httpProfile.setProxyHost("真实代理ip");
  24.             // httpProfile.setProxyPort(真实代理端口);
  25.             /* SDK默认使用POST方法。
  26.              * 如果你一定要使用GET方法,可以在这里设置。GET方法无法处理一些较大的请求 */
  27.             httpProfile.setReqMethod("POST");
  28.             /* SDK有默认的超时时间,非必要请不要进行调整
  29.              * 如有需要请在代码中查阅以获取最新的默认值 */
  30.             httpProfile.setConnTimeout(60);
  31.             /* 指定接入地域域名,默认就近地域接入域名为 sms.tencentcloudapi.com ,也支持指定地域域名访问,例如广州地域的域名为 sms.ap-guangzhou.tencentcloudapi.com */
  32.             httpProfile.setEndpoint("sms.tencentcloudapi.com");
  33.             /* 非必要步骤:
  34.              * 实例化一个客户端配置对象,可以指定超时时间等配置 */
  35.             ClientProfile clientProfile = new ClientProfile();
  36.             /* SDK默认用TC3-HMAC-SHA256进行签名
  37.              * 非必要请不要修改这个字段 */
  38.             clientProfile.setSignMethod("HmacSHA256");
  39.             clientProfile.setHttpProfile(httpProfile);
  40.             /* 实例化要请求产品(以sms为例)的client对象
  41.              * 第二个参数是地域信息,可以直接填写字符串ap-guangzhou,支持的地域列表参考 https://cloud.tencent.com/document/api/382/52071#.E5.9C.B0.E5.9F.9F.E5.88.97.E8.A1.A8 */
  42.             SmsClient client = new SmsClient(cred, "ap-guangzhou",clientProfile);
  43.             /* 实例化一个请求对象,根据调用的接口和实际情况,可以进一步设置请求参数
  44.              * 你可以直接查询SDK源码确定接口有哪些属性可以设置
  45.              * 属性可能是基本类型,也可能引用了另一个数据结构
  46.              * 推荐使用IDE进行开发,可以方便的跳转查阅各个接口和数据结构的文档说明 */
  47.             SendSmsRequest req = new SendSmsRequest();
  48.             /* 填充请求参数,这里request对象的成员变量即对应接口的入参
  49.              * 你可以通过官网接口文档或跳转到request对象的定义处查看请求参数的定义
  50.              * 基本类型的设置:
  51.              * 帮助链接:
  52.              * 短信控制台: https://console.cloud.tencent.com/smsv2
  53.              * 腾讯云短信小助手: https://cloud.tencent.com/document/product/382/3773#.E6.8A.80.E6.9C.AF.E4.BA.A4.E6.B5.81 */
  54.             /* 短信应用ID: 短信SdkAppId在 [短信控制台] 添加应用后生成的实际SdkAppId,示例如1400006666 */
  55.             // 应用 ID 可前往 [短信控制台](https://console.cloud.tencent.com/smsv2/app-manage) 查看
  56.             String sdkAppId = "1400009099";
  57.             req.setSmsSdkAppId(sdkAppId);
  58.             /* 短信签名内容: 使用 UTF-8 编码,必须填写已审核通过的签名 */
  59.             // 签名信息可前往 [国内短信](https://console.cloud.tencent.com/smsv2/csms-sign) 或 [国际/港澳台短信](https://console.cloud.tencent.com/smsv2/isms-sign) 的签名管理查看
  60.             String signName = "腾讯云";
  61.             req.setSignName(signName);
  62.             /* 模板 ID: 必须填写已审核通过的模板 ID */
  63.             // 模板 ID 可前往 [国内短信](https://console.cloud.tencent.com/smsv2/csms-template) 或 [国际/港澳台短信](https://console.cloud.tencent.com/smsv2/isms-template) 的正文模板管理查看
  64.             String templateId = "449739";
  65.             req.setTemplateId(templateId);
  66.             /* 模板参数: 模板参数的个数需要与 TemplateId 对应模板的变量个数保持一致,若无模板参数,则设置为空 */
  67.             String[] templateParamSet = {code};
  68.             req.setTemplateParamSet(templateParamSet);
  69.             /* 下发手机号码,采用 E.164 标准,+[国家或地区码][手机号]
  70.              * 示例如:+8613711112222, 其中前面有一个+号 ,86为国家码,13711112222为手机号,最多不要超过200个手机号 */
  71.             String[] phoneNumberSet = {phoneNumber};
  72.             req.setPhoneNumberSet(phoneNumberSet);
  73.             /* 用户的 session 内容(无需要可忽略): 可以携带用户侧 ID 等上下文信息,server 会原样返回 */
  74.             String sessionContext = "";
  75.             req.setSessionContext(sessionContext);
  76.             /* 短信码号扩展号(无需要可忽略): 默认未开通,如需开通请联系 [腾讯云短信小助手] */
  77.             String extendCode = "";
  78.             req.setExtendCode(extendCode);
  79.             /* 国际/港澳台短信 SenderId(无需要可忽略): 国内短信填空,默认未开通,如需开通请联系 [腾讯云短信小助手] */
  80.             String senderid = "";
  81.             req.setSenderId(senderid);
  82.             /* 通过 client 对象调用 SendSms 方法发起请求。注意请求方法名与请求对象是对应的
  83.              * 返回的 res 是一个 SendSmsResponse 类的实例,与请求对象对应 */
  84.             SendSmsResponse res = client.SendSms(req);
  85.             // 输出json格式的字符串回包
  86.             System.out.println(SendSmsResponse.toJsonString(res));
  87.             // 也可以取出单个值,你可以通过官网接口文档或跳转到response对象的定义处查看返回字段的定义
  88.             // System.out.println(res.getRequestId());
  89.             /* 当出现以下错误码时,快速解决方案参考
  90.              * [FailedOperation.SignatureIncorrectOrUnapproved](https://cloud.tencent.com/document/product/382/9558#.E7.9F.AD.E4.BF.A1.E5.8F.91.E9.80.81.E6.8F.90.E7.A4.BA.EF.BC.9Afailedoperation.signatureincorrectorunapproved-.E5.A6.82.E4.BD.95.E5.A4.84.E7.90.86.EF.BC.9F)
  91.              * [FailedOperation.TemplateIncorrectOrUnapproved](https://cloud.tencent.com/document/product/382/9558#.E7.9F.AD.E4.BF.A1.E5.8F.91.E9.80.81.E6.8F.90.E7.A4.BA.EF.BC.9Afailedoperation.templateincorrectorunapproved-.E5.A6.82.E4.BD.95.E5.A4.84.E7.90.86.EF.BC.9F)
  92.              * [UnauthorizedOperation.SmsSdkAppIdVerifyFail](https://cloud.tencent.com/document/product/382/9558#.E7.9F.AD.E4.BF.A1.E5.8F.91.E9.80.81.E6.8F.90.E7.A4.BA.EF.BC.9Aunauthorizedoperation.smssdkappidverifyfail-.E5.A6.82.E4.BD.95.E5.A4.84.E7.90.86.EF.BC.9F)
  93.              * [UnsupportedOperation.ContainDomesticAndInternationalPhoneNumber](https://cloud.tencent.com/document/product/382/9558#.E7.9F.AD.E4.BF.A1.E5.8F.91.E9.80.81.E6.8F.90.E7.A4.BA.EF.BC.9Aunsupportedoperation.containdomesticandinternationalphonenumber-.E5.A6.82.E4.BD.95.E5.A4.84.E7.90.86.EF.BC.9F)
  94.              * 更多错误,可咨询[腾讯云助手](https://tccc.qcloud.com/web/im/index.html#/chat?webAppId=8fa15978f85cb41f7e2ea36920cb3ae1&title=Sms)
  95.              */
  96.         } catch (TencentCloudSDKException e) {
  97.             e.printStackTrace();
  98.         }
  99.     }
  100. }
复制代码
3.调用随机验证码的工具类

  1. import java.text.DecimalFormat;
  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import java.util.List;
  5. import java.util.Random;
  6. /**
  7. * 获取随机数
  8. *
  9. * @author qianyi
  10. *
  11. */
  12. public class RandomUtil {
  13.         private static final Random random = new Random();
  14.         private static final DecimalFormat fourdf = new DecimalFormat("0000");
  15.         private static final DecimalFormat sixdf = new DecimalFormat("000000");
  16.         public static String getFourBitRandom() {
  17.                 return fourdf.format(random.nextInt(10000));
  18.         }
  19.         public static String getSixBitRandom() {
  20.                 return sixdf.format(random.nextInt(1000000));
  21.         }
  22.         /**
  23.          * 给定数组,抽取n个数据
  24.          * @param list
  25.          * @param n
  26.          * @return
  27.          */
  28.         public static ArrayList getRandom(List list, int n) {
  29.                 Random random = new Random();
  30.                 HashMap<Object, Object> hashMap = new HashMap<Object, Object>();
  31.                 // 生成随机数字并存入HashMap
  32.                 for (int i = 0; i < list.size(); i++) {
  33.                         int number = random.nextInt(100) + 1;
  34.                         hashMap.put(number, i);
  35.                 }
  36.                 // 从HashMap导入数组
  37.                 Object[] robjs = hashMap.values().toArray();
  38.                 ArrayList r = new ArrayList();
  39.                 // 遍历数组并打印数据
  40.                 for (int i = 0; i < n; i++) {
  41.                         r.add(list.get((int) robjs[i]));
  42.                         System.out.print(list.get((int) robjs[i]) + "\t");
  43.                 }
  44.                 System.out.print("\n");
  45.                 return r;
  46.         }
  47. }
复制代码
4.Controller

  1. @Api(description = "短息发送")
  2. @RestController
  3. @RequestMapping("/edusms/sms")
  4. @CrossOrigin //跨域
  5. public class SmsApiController {
  6.     @Autowired
  7.     private SmsService smsService;
  8.     @Autowired
  9.     private RedisTemplate<String,String> redisTemplate;
  10.     @ApiOperation(value = "短信发送")
  11.     @GetMapping("send/{phone}")
  12.     public R sendSmsPhone(@PathVariable String phone){
  13.         String code = redisTemplate.opsForValue().get(phone);
  14.         if(!StringUtils.isEmpty(code))
  15.             return R.ok();
  16.         code = RandomUtil.getFourBitRandom();
  17.         boolean isSend = smsService.send(phone, code);
  18.         if(isSend) {
  19.             redisTemplate.opsForValue().set(phone, code,5, TimeUnit.MINUTES);
  20.             return R.ok();
  21.         } else {
  22.             return R.error().message("发送短信失败");
  23.         }
  24.     }
  25. }
复制代码
5.service

  1. public interface SmsService {
  2.     boolean send(String phone, String code);
  3. }
复制代码
6.SmsServiceImpl

  1. @Service
  2. public class SmsServiceImpl implements SmsService {
  3.     @Override
  4.     public boolean send(String phone, String code) {
  5.         try {
  6.             TxSmsUtils.SendCode(phone,code);
  7.             System.out.println("phone = " + phone);
  8.             System.out.println("code = " + code);
  9.             return true;
  10.         } catch (Exception e) {
  11.             e.printStackTrace();
  12.             return false;
  13.         }
  14.     }
  15. }
复制代码
7.此次使用的swagger(也可以使用postman)



四、如果申请不成功可以使用阿里云的第三方短信

两个都测试成功了的

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4