版权声明:欢迎技术交流和帮助,提供IT相关服务,索要源码请联系博主QQ: 21497936,若该文为原创文章,未经允许不得转载 https://blog.csdn.net/qq21497936/article/details/80089585
需求
软件控制短信提醒客户验证码等等,如生日提醒、购买提醒、时间限制等等。
Demo下载地址
《软件发送短信Demo》:https://download.csdn.net/download/qq21497936/10375157
Demo效果截图
短信平台介绍
软件发送短信需要第三方平台支持,步骤如下:
1.注册指定云平台账户,一般有免费短信条数,笔者使用“云通知”;
2.按照平台要求申请或使用已存再的短信模板,有些必须要注册签名,如阿里云,腾讯云;
注意:如果平台返回模板或者签名无效,需要进入平台去使用已经存在的或者自己新申请的模板或者签名
3.获取对应的接口账户的接口密码,有些有特定的协议要求,qt的话,一般使用http的接口;
4.发送申请即可,可以从返回码或读取短信发送的接口;
模块代码
sms.h
#ifndef SMS_H
#define SMS_H
#include <QObject>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QSslError>
/************************************************************\
* 类名:Sms
* 描述:短信发送
* 函数:
* singleMessage() - 单发短信,输入号码和发送的验证码
* 作者:红模仿 QQ:21497936
* 日期 版本 说明
* 2018年4月26日 v1.0.0 使用http://sms.sms.cn/平台发送点对点短信
\************************************************************/
class Sms : public QObject
{
Q_OBJECT
public:
explicit Sms(QObject *parent = nullptr);
signals:
void error(QString msg);
public slots:
// 单发短信:给用户发短信验证码、短信通知,营销短息(内容长度不超过450字节)
void singleMessage(QString number, QString content);
protected slots:
void finished(QNetworkReply *);
void sslErrors(QNetworkReply*,QList<QSslError>);
private:
QNetworkAccessManager _manager;
static QString _sdkAppId;
static QString _sdkAppKey;
QString _time;
QString _random;
QString _type;
};
#endif // SMS_H
sms.cpp
#include "sms.h"
#include <QJsonDocument>
#include <QJsonObject>
#include <QNetworkReply>
#include <QDebug>
#include <QUrlQuery>
#if 1
// 移动短信接口
QString Sms::_sdkAppId = "qq21497936";
QString Sms::_sdkAppKey = "f16095a81858314a3dbe16fdc4ec04d9";
#endif
Sms::Sms(QObject *parent)
: QObject(parent),
_random("0"),
_type("0")
{
connect(&_manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(finished(QNetworkReply*)));
connect(&_manager, SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)), this, SLOT(sslErrors(QNetworkReply*,QList<QSslError>)));
}
void Sms::singleMessage(QString mobile, QString content)
{
// 移动平台 http://sms.sms.cn/
/*
* http://api.sms.cn/sms/?ac=send
&uid=qq21497936&pwd=接口密码[获取密码]
&template=100006&mobile=填写要发送的手机号
&content={"code":"value"}
*/
QString baseUrl = QString("http://api.sms.cn/sms/");
QUrl url;
url.setUrl(baseUrl);
QUrlQuery urlQuery;
urlQuery.addQueryItem("ac", "send");
// 笔者平台账户
urlQuery.addQueryItem("uid", _sdkAppId);
// 笔者平台账户接口密码
urlQuery.addQueryItem("pwd", _sdkAppKey);
urlQuery.addQueryItem("template", "100006");
urlQuery.addQueryItem("mobile", mobile);
urlQuery.addQueryItem("content", QString("{\"code\":\"%1\"}").arg(content));
url.setQuery(urlQuery);
_manager.get(QNetworkRequest(url));
}
void Sms::finished(QNetworkReply *reply)
{
QByteArray data = reply->readAll();
qDebug() << __FILE__ << __LINE__ << data;
#if 1
// 移动短信收到的json可以判断是否发送成功,Demo未做这块
"{\"stat\":\"100\",\"message\":\"\xB7\xA2\xCB\xCD\xB3\xC9\xB9\xA6\"}"
#endif
}
void Sms::sslErrors(QNetworkReply *reply, QList<QSslError> list)
{
qDebug() << __FILE__ << __LINE__ << list;
}