发送下单成功短信案例|学习笔记

简介: 快速学习发送下单成功短信案例

开发者学堂课程【全面讲解 Spring Cloud Alibaba 技术栈(知识精讲+项目实战)第四阶段发送下单成功短信案例】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/686/detail/11916


发送下单成功短信案例


下单之后发送短信

1、短信通知

使用的场景是短信通知,在申请签名的时候如果是短信通知,应该选通用,如果选择通用会让提供签名来源,签名来源是需要上传各种各样资质,资质没有所以只能选择发送一条验证码跟实际场景不符。如果到企业中资质都能拿到可以选择通用,然后发送一个短信通知

image.png

短信通知模板可以修改,里面有模板名称、模板内容、申请说明。

image.png

image.png

跟验证码的模板很相似

image.png

订单已经成功但是不能用,因为有场景的限制,所以模拟的是一旦发现有订单下单成功,就发送一个验证码到用户的手机上去。

image.png

2、 shop-user 模块中加入 sms 依赖

<!--短信发送-->

<dependency>

<groupId>com.alibaba.c1oud</groupId>

<artifactId>spring-c1oud-alicloud-sms</artifactid>

</dependency>

3、将阿里短信给出的 demo 封装成工具类

public class Smsutil {

//替换成自己申请的accessKeyId

private static string accessKeyId="LTAIML1f8NKYXn1M"

//替换成自己申请的accessKeySecret

private static String accessKeySecret

="hqyW0zTNzeSIFnZhM EkOaZXVVcr 3Gj";

static final string product = "Dysmsapi";

static final string domain ="dysmsapi.aliyuncs.com";

4、代码

(1)代码

import lombok.extern.slf4i.Slf4i;

import

org.apache.rocketmg.spring.annotation.ConsumeMod e;

import

org.apache.rocketmg.spring.annotation.MessageMo del;

import

org.apache.rocketmg.spring.annotation.RocketMOMe ssageListener;

import org.apache.rocketmg.spring.coreRocketMQlistener

import

org.springframework.beans.factory.annotation.Autowi

red;

import org.springframework.stereotype.Service;

@slf4j

@service(“shopsSmsservice”)

//consumerGroup- 消费者组名 topic- 要消费的主题

@RocketMOMessageListener(

consumerGroup="shop-user",//消费者组名

topic="order-topic",//消费主题

consumeMode =ConsumeMode.CONCURRENTLY//消费模式,指定是否顺序消费

CONCURRENTLY(同步,默认)ORDERLY顺序) messageModel=MessageMode1.CLUSTERING//消息模式BROADCASTING(广播)CLUSTERING(集群默认)

publia class SmsService implements RocketMQListener<or

der>{

@Autowired

private UserDao userDao;

//消费逻辑

@Override

public void onMessage(Order message){

log.info("接收到了一个订单信息,接下来就可以发送短信通知了",message);

//根据 uid 获取手机号

User user=userDao.findById(message.getuid()).get();

//生成验证码 1-9 6

stringBuilder builder=newstringBuilder();

for (int i = o; i < 6; i++) {

builder.append(new Random().nextInt( bound: 9)+1)

}

string smseode = builder.tostring();

Param param=new Param(smsCode)

try{

//发送短信("code":"123456"}

SmsUtil.sendSms(user.getTelephone(),signName:"黑马旅游网",templateCode:"SMS 170836451",JSON。

toJSONString(pa ram));

Iog.info("短信发送成功");}

catch (Exception e){

e.printstackTrace();

}

}

@Data

@AllArgsConstructor

@NoArgsConstructor

class Param{

private string code;

}

}

启动一下 user:

User 启动报错,修改 @service(“shopsSmsservice”)

image.png

再运行一次:

发送成功,没有报异常。

image.png

(2)过程

SmsUtiLjava:

/**

*发送短信

*

*@param phoneNumbers要发送短信到哪个手机号

*@param signName 短信签名[必须使用前面申请的]

*@param templateCode 短信短信模板ID[必须使用前面申请的]

*@param param 模板中s{code)位置传递的内容

需要四个参数手机号短信签名短信模板 code 以及 code 模板中需要的参数,中间两个只需要把申请好的名称和代码拿过来就行。

image.png

手机号跟用户相关,现在只能拿到订单,订单里面时候有用户。

package com. itheima.domain

import ...

//订单

@Entity(name = "shop order")

@data

public class Order {

@Id

@GeneratedValue(strategy=GenerationTypeIDENTITY)

private Long oid;//订单id

//用户

private Integer uid;//用户id

private string username;//用户名

//商品

private Integer pid;//商品id private string pname;//商品名称

private Double pprice;//商品单价

//数量

private Integernumber;//购买数量

)

订单里面有 UID,根据 UID 能查询到用户,已经拥有手机号,最后是 parm 目前传的是一个验证码,验证码自己生成就可以。

缺少的参数为 code

(3)打断

User user=userDao.findById(message.getuid()).get();

执行下单 localhost:8091/order/prod/2:

{

"oid”: 67.

"uid”: 1.

"usernane":“测试用户”,

"pid”: 2,

"pnane”: "华为”,

"pprice":2000

"number": 1

}

image.png

消息已经过来。

首先查用户:

image.png

组装六位数验证码:

打断 for (int i = o; i < 6; i++) {

image.png

image.png

已经拥有六位数验证码。

进行拼接:

image.png

image.pngJSON.toJSONString(param)转出的格式执行一下:

Expression:

JSON.tosonstring(param

Result:

oo result = "{"code":"979349"}"

value ={char[17]@14542)

hash=0

为所要的格式,接下来放一下断点。

学习如何用阿里云短信发送短消息,具体的场景根据企业中来决定,比如发送验证码可以直接用,但是短信通知类型要用场景需要跟公司去沟通,要相关的签名来源、资质上传,审核通过以后就可以使用。

相关文章
|
3月前
|
开发工具
支付系统24---支付宝扫码,利用支付宝完成扫码付款成功,我们只能发起同一个订单,来发起支付请求
支付系统24---支付宝扫码,利用支付宝完成扫码付款成功,我们只能发起同一个订单,来发起支付请求
支付系统42----支付宝支付-定时查单-订单已支付,如果我们在定时查单的状态中,我们明明已经支付的订单,却在本地状态中显示没有支付,这是因我们的异步通知因为种种原因没有接受到,支付宝端成功,本地失败
支付系统42----支付宝支付-定时查单-订单已支付,如果我们在定时查单的状态中,我们明明已经支付的订单,却在本地状态中显示没有支付,这是因我们的异步通知因为种种原因没有接受到,支付宝端成功,本地失败
|
4月前
|
API
企业微信api接口调用-企业微信好友收发消息
企业微信api接口调用-企业微信好友收发消息
|
JSON 前端开发 Java
从零玩转系列之微信支付实战PC端我的订单接入退款取消接口2
从零玩转系列之微信支付实战PC端我的订单接入退款取消接口
102 0
|
前端开发 小程序 安全
从零玩转系列之微信支付实战PC端我的订单接入退款取消接口1
从零玩转系列之微信支付实战PC端我的订单接入退款取消接口
76 0
|
小程序 安全 前端开发
从零玩转系列之微信支付实战PC端支付微信退款接口搭建1
从零玩转系列之微信支付实战PC端支付微信退款接口搭建
99 0
|
测试技术 API 数据库
从零玩转系列之微信支付实战PC端支付微信退款接口搭建3
从零玩转系列之微信支付实战PC端支付微信退款接口搭建
90 0
|
JSON API 数据库
从零玩转系列之微信支付实战PC端支付微信退款接口搭建2
从零玩转系列之微信支付实战PC端支付微信退款接口搭建
85 0
|
消息中间件 负载均衡 Java
下单消息的发送和接收案例|学习笔记
快速学习下单消息的发送和接收案例
201 0
下单消息的发送和接收案例|学习笔记
|
消息中间件 Dubbo 测试技术
Rest 方式测试支付下单和支付回调|学习笔记
快速学习 Rest 方式测试支付下单和支付回调
196 0
Rest 方式测试支付下单和支付回调|学习笔记