各大短信平台接入方法

本文档展示了如何接入和使用三大主流短信平台——华为云、阿里云和腾讯云的短信服务。对接流程包括获取必要的信息如appkey、app秘钥等,并通过SDK发送短信。示例代码详细解释了发送短信的异步过程,包括参数构建、HTTP请求的发送以及错误处理。
摘要由CSDN通过智能技术生成

短信平台有哪些

最为著名的三大平台:华为短信、阿里短信、腾讯短信;根据各家官网的接入文档进行使用

短信平台接入流程

需要具备哪些信息

各家所需信息不太相同,大致如下:

1.app key
2.app 秘钥
3.app 签名
3.发送者id
4.模版,替换符
5.调用接口
6.异步回调接口

华为云接入代码


    /**
	 * 异步发送华为云短信
	 */
	@Async
	@Override
	public void sendSmsMsg(SsoSms sms) throws Exception {
		if (sms.getPhone() == null || sms.getPhone().length() < 11) {
			log.info("手机号不符合规则:" + sms.getPhone());
		}
        //必填,全局号码格式(包含国家码),示例:+8615123456789,多个号码之间用英文逗号分隔
        String receiver = sms.getPhone(); //短信接收人号码
        /**
         * 选填,使用无变量模板时请赋空值 String templateParas = "";
         * 单变量模板示例:模板内容为"您的验证码是${1}"时,templateParas可填写为"[\"369751\"]"
         * 双变量模板示例:模板内容为"您有${1}件快递请到${2}领取"时,templateParas可填写为"[\"3\",\"人民公园正门\"]"
         * 模板中的每个变量都必须赋值,且取值不能为空
         * 查看更多模板和变量规范:产品介绍>模板和变量规范
         */
        String templateParas = "[" + sms.getCode() + "]"; //模板变量,此处以单变量验证码短信为例,请客户自行生成6位验证码,并定义为字符串类型,以杜绝首位0丢失的问题(例如:002569变成了2569)。

        //请求Body,不携带签名名称时,signature请填null
        String body = SmsUtils.buildRequestBody(sender, receiver, templateId, templateParas, statusCallBack, signature);
        if (null == body || body.isEmpty()) {
            log.error(sms.getPhone() + ":消息体为空");
            return;
        }

        //请求Headers中的X-WSSE参数值
        String wsseHeader = SmsUtils.buildWsseHeader(appKey, appSecret);
        if (null == wsseHeader || wsseHeader.isEmpty()) {
            log.error(sms.getPhone() + ":消息头为空");
            return;
        }

        //为防止因HTTPS证书认证失败造成API调用失败,需要先忽略证书信任问题
        CloseableHttpClient client = HttpClients.custom()
                    .setSSLContext(new SSLContextBuilder().loadTrustMaterial(null,
                            (x509CertChain, authType) -> true).build())
                    .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE)
                    .build();

        HttpResponse response = client.execute(RequestBuilder.create("POST")//请求方法POST
                    .setUri(url)
                    .addHeader(HttpHeaders.CONTENT_TYPE, "application/x-www-form-urlencoded")
                    .addHeader(HttpHeaders.AUTHORIZATION, SmsUtils.AUTH_HEADER_VALUE)
                    .addHeader("X-WSSE", wsseHeader)
                    .setEntity(new StringEntity(body)).build());

        String result = EntityUtils.toString(response.getEntity());
		log.info("返回码:" + response.getStatusLine().getStatusCode() + "|返回体:" + result); //打印响应消息实体
        sms.setCode(response.getStatusLine().getStatusCode() + "");
		sms.setMessage(result);
		sms.setBizId("弃用");
		
		ssoSmsMapper.updateById(sms);
	}

 阿里云接入代码

    /**
	 * 异步发送阿里云短信
	 *
	 * @param sms
	 * @return
	 */
	@Async
	@Override
	public SendSmsResponse sendSmsMsg(Sms sms) {
		if (sms.getSignName() == null) {
			sms.setSignName(this.signName);
		}

		if (sms.getTemplateCode() == null) {
			sms.setTemplateCode(this.templateCode);
		}

		// 阿里云短信官网demo代码
		SendSmsRequest request = new SendSmsRequest();
		request.setMethod(MethodType.POST);
		request.setPhoneNumbers(sms.getPhone());
		request.setSignName(sms.getSignName());
		request.setTemplateCode(sms.getTemplateCode());
		request.setTemplateParam(sms.getParams());
		request.setOutId(sms.getId().toString());

		SendSmsResponse response = null;
		try {
			response = acsClient.getAcsResponse(request);
			if (response != null) {
				log.info("发送短信结果:code:{},message:{},requestId:{},bizId:{}", response.getCode(), response.getMessage(),
						response.getRequestId(), response.getBizId());

				sms.setCode(response.getCode());
				sms.setMessage(response.getMessage());
				sms.setBizId(response.getBizId());
			}
		} catch (ClientException e) {
			e.printStackTrace();
		}

		update(sms);

		return response;
	}

腾讯云接入代码

    /**
	 * 异步发送腾讯云短信
	 */
	@Async
	@Override
	public SmsSingleSenderResult sendSmsMsg(SsoSms sms) {
		if (sms.getSignName() == null) {
			sms.setSignName(this.txYunAppId + "");
		}

		if (sms.getTemplateCode() == null) {
			sms.setTemplateCode(this.templateCode + "");
		}
		
		
		SmsSingleSender e = new SmsSingleSender(txYunAppId, txYunAppKey);
        SmsSingleSenderResult result = null;
		try {
			ArrayList<String> params = new ArrayList<>();
			params.add(sms.getCode());
			result = e.sendWithParam("86", sms.getPhone(), templateCode, params, (String)null, "", "");
			log.info("发送短信结果:result:{},message:{},bizId:{}", result.result, result.errMsg, result.sid);
		} catch (JSONException e1) {
			e1.printStackTrace();
		} catch (HTTPException e1) {
			e1.printStackTrace();
		} catch (IOException e1) {
			e1.printStackTrace();
		}
		
		ssoSmsMapper.updateById(sms);
		return result;
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

窦再兴

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值