C++ 短信验证码 腾讯云 登录手机验证码、注册手机验证码实现C++

11 篇文章 0 订阅
8 篇文章 0 订阅

最近业务上需要实现短信验证码的发送,搜索了几家进了对比,最终选择腾讯云的,下面开始进入正题

环境Ubuntu18,语言C++

1、下载skd源码

下载官方提供的C++接口源码。github下载地址:https://github.com/tencentcloud/tencentcloud-sdk-cpp

2、编译修改cmake文件,编译源码

下载完成后只留core和sms目录,其余的删除。如图:

修改CMakeList.txt文件,保留add_subdirectory(core)、add_subdirectory(sms)这两行,其余删除,如图:

3、安装依赖环境

编译器

  • 安装支持 C++ 11 或更高版本的编译器:GCC 4.8 或以上版本
  • 暂时仅支持 Linux 环境,不支持 Windows 环境

编译工具

安装 cmake 3.0 或以上版本,例如:

ubuntu
sudo apt-get install cmake

centos
yum install cmake3

依赖库

安装例子如下:

ubuntu
sudo apt-get install libcurl4-openssl-dev

centos
yum install libcurl-devel

备注:建议安装最新版的 libcurl 库,否则可能存在 libcurl 库内存泄露 bug 问题。

安装例子如下:

ubuntu
sudo apt-get install libssl-dev

centos
yum install openssl-devel
  • libuuid

安装例子如下:

ubuntu
sudo apt-get install uuid-dev

centos
yum install libuuid-devel

从源代码构建 SDK

  1. 前往 Github 代码托管地址 下载最新代码

  2. 进入 SDK 创建生成必要的构建文件

cd <path/to/tencentcloud-sdk-cpp>
mkdir sdk_build
cd sdk_build
cmake ..
make
sudo make install
ubuntu
sudo apt-get install cmake

centos
yum install cmake3

 4、测试代码

#include <iostream>
#include <tencentcloud/core/TencentCloud.h>
#include <tencentcloud/core/Credential.h>
#include <tencentcloud/sms/v20190711/SmsClient.h>


#include <string>
#include <vector>

using namespace TencentCloud;
using namespace TencentCloud::Sms::V20190711;
using namespace TencentCloud::Sms::V20190711::Model;
using namespace std;

int main()
{
	// 必须调用初始化函数
	//TencentCloud::InitAPI();

	string secretId = "填写自己的secretId";
	string secretKey = "填写自己的secretKey";
	Credential cred = Credential(secretId, secretKey);
	
	ClientProfile clientProfile;
	HttpProfile httpProfile;
	httpProfile.SetEndpoint("sms.tencentcloudapi.com");
	clientProfile.SetHttpProfile(httpProfile);

	SmsClient client(cred, "ap-beijing", clientProfile);
	SendSmsRequest req;

	//设置手机号
	std::vector<std::string> phoneNumbers;
	phoneNumbers.push_back("+86填写要发送的手机号");
	req.SetPhoneNumberSet(phoneNumbers);
	
	//设置模板id
	req.SetTemplateID("填写自己的模板Id");

	//设置短信SdkAppid
	req.SetSmsSdkAppid("填写自己的SdkAppId");

	//设置签名内容
	req.SetSign("填写自己的签名内容");

	//设置模板参数
	std::vector<std::string> templateParam;
	templateParam.push_back("发送的验证码");
	templateParam.push_back("验证码有效时间");
	req.SetTemplateParamSet(templateParam);

	SmsClient::SendSmsOutcome out = client.SendSms(req);

	Error err = out.GetError();
	cout << "err.GetErrorMessage:" << err.GetErrorMessage() << endl;
	cout << "err.GetErrorCode:" << err.GetErrorCode() << endl;
	SendSmsResponse res = out.GetResult();
	std::vector<SendStatus> status = res.GetSendStatusSet();
	
	for (auto item : status) {
		cout << "item.GetSerialNo:" << item.GetSerialNo() << endl;
		cout << "item.GetPhoneNumber:" << item.GetPhoneNumber() << endl;
		cout << "item.GetFee:" << item.GetFee() << endl;
		cout << "item.GetSessionContext:" << item.GetSessionContext() << endl;
		cout << "item.GetCode:" << item.GetCode() << endl;
		cout << "item.GetMessage:" << item.GetMessage() << endl;
		cout << "item.GetIsoCode:" << item.GetIsoCode() << endl;
	}

	bool isok = out.IsSuccess();

	cout << "isok:" << isok << endl;

	return 0;
}

更多信息请加入c++技术群:690018451

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
实现发送邮箱验证码的具体方法有很多,可以使用第三方库,也可以使用 SMTP 协议来实现。下面给出一个使用 C 语言通过 SMTP 协议实现发送邮箱验证码的示例代码: ``` #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <time.h> #include <sys/socket.h> #include <arpa/inet.h> #define PORT 25 #define SERVER "smtp.qq.com" #define FROM "[email protected]" #define TO "[email protected]" #define USERNAME "[email protected]" #define PASSWORD "email_password" int send_email(char *server, int port, char *username, char *password, char *from, char *to, char *subject, char *message) { int sock = socket(AF_INET, SOCK_STREAM, 0); if (sock == -1) { perror("socket"); return -1; } struct sockaddr_in server_address; memset(&server_address, 0, sizeof(server_address)); server_address.sin_family = AF_INET; server_address.sin_port = htons(port); server_address.sin_addr.s_addr = inet_addr(server); if (connect(sock, (struct sockaddr*)&server_address, sizeof(server_address)) < 0) { perror("connect"); return -1; } char recv_buf[1024]; memset(recv_buf, 0, sizeof(recv_buf)); int recv_len = recv(sock, recv_buf, sizeof(recv_buf), 0); if (recv_len < 0) { perror("recv"); return -1; } printf("%s", recv_buf); char send_buf[1024]; memset(send_buf, 0, sizeof(send_buf)); sprintf(send_buf, "HELO %s\r\n", server); if (send(sock, send_buf, strlen(send_buf), 0) < 0) { perror("send"); return -1; } memset(recv_buf, 0, sizeof(recv_buf)); recv_len = recv(sock, recv_buf, sizeof(recv_buf), 0); if (recv_len < 0) { perror("recv"); return -1;

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Radish(萝卜)

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值