项目实战:Qt给指定手机发送短信(点对点、群发等等)

Qt开发 同时被 3 个专栏收录
179 篇文章 94 订阅
45 篇文章 2 订阅
52 篇文章 24 订阅

若该文为原创文章,未经允许不得转载
原博主博客地址:https://blog.csdn.net/qq21497936
原博主博客导航:https://blog.csdn.net/qq21497936/article/details/102478062
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/80089585
各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究

红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…(点击传送门)

Qt开发专栏:项目实战(点击传送门)

 

需求

        软件控制短信提醒客户验证码等等,如生日提醒、购买提醒、时间限制等等。

 

Demo下载地址

软件发送短信Demo》:https://download.csdn.net/download/qq21497936/10375157

QQ群:1047134658(点击“文件”搜索“MessageDemo”,群内与博文同步更新)

 

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;
}


原博主博客地址:https://blog.csdn.net/qq21497936
原博主博客导航:https://blog.csdn.net/qq21497936/article/details/102478062
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/80089585

  • 11
    点赞
  • 8
    评论
  • 42
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

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

抵扣说明:

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

余额充值