最近在跟着一位大佬搞他的Austin项目,austin项目核心功能:发送消息。
这里作者使用了腾讯云发送短信,因为注册就送 100条免费短信的额度。发短信的功能就不用花钱了。
这里就记录了使用腾讯云的整个过程
注册一个腾讯云账户,腾讯云中提供了很多功能:云服务器、云存储你、云直播、云短信等很多功能。
注册地址:https://cloud.tencent.com/
根据提示一步步进行注册即可,例如:



这里注册完成后再进行实名认证即可。有一些按照自己的的实际情况填写即可,不知道的可以随便填。
腾讯云注册成功之后,登录腾讯云并去开通云短信服务,开通短信服务后才能发短信。
开通地址:https://console.cloud.tencent.com/smsv2
开通完成之后就可以看到这个一个页面了

然后需要我们做的是选择 应用管理–> 应用列表,创建一个新的应用

创建完成后就可以看到我们后面需要使用的信息:

在腾讯云短信签名时需要认证,认证需要填写签名类型:网站、APP、小程序、公众号,前三种比较难搞定我们个人使用的话都使用订阅号,也推荐大家使用这样的方式。
所以咱们先搞一个公众号,然后才能去申请签名。
申请微信订阅号注册地址:https://mp.weixin.qq.com/

在这里点击订阅号,一步步操作即可。
根据自己的需求选择 国内短信/国际短信 中的签名管理,进行创建签名,当然我这里就直接选择国内了。
注意:签名类型选择公众号 ,并根据提示上传相关数据。

公众号名称最好注意一点,就像我这样的,上传了也没过,一脸懵逼,从头再来。

根据自己需求创建短信模板,提供了很多标准模板供大家使用,可以自行选择;

一般需要生成随机验证码或者自定义内容时需要加上“{1}”用作占位符:

以上准备工作完成之后我们就要开始进入正文了,也就是我们的代码实现。
在我们的maven工程中引入对应的依赖:
<!--腾讯sdk(目前用在短信上)-->
<dependency>
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java</artifactId>
<version>3.1.390</version>
</dependency>
要知道腾讯是给我们提供代码的,我们可以在腾讯云上操作既可拿到对应的代码,这部分代码不需要我们自己去编写,每家使用的都不一样,我们只需要怎么操作即可。

在云产品中选择云API
我们可以测试调用一下,当然啦,结果是显而易见的完全没有问题。

然后我们把生成的代码拷出来即可。
package com.xiong.austin.script;
import cn.hutool.core.util.IdUtil;
import com.alibaba.fastjson.JSON;
import com.google.common.base.Throwables;
import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
import com.tencentcloudapi.common.profile.ClientProfile;
import com.tencentcloudapi.common.profile.HttpProfile;
import com.tencentcloudapi.sms.v20210111.SmsClient;
import com.tencentcloudapi.sms.v20210111.models.SendSmsRequest;
import com.tencentcloudapi.sms.v20210111.models.SendSmsResponse;
import com.xiong.austin.pojo.SmsParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* @author: Xiong
* @date: 2022/8/2 15:29
* @修改备注:
* @修改记录: 修改时间 修改人员 修改原因
*/
@Service
@Slf4j
public class TencentSmsScript {
/**
* api相关
*/
private static final String URL = "sms.tencentcloudapi.com";
private static final String REGION = "ap-guangzhou";
/**
* 账号相关 TODO
*/
private final static String SECRET_ID = "**************";
private final static String SECRET_KEY = "****************";
private static final String SMS_SDK_APP_ID = "140*****";
private static final String TEMPLATE_ID = "149****";
private static final String SIGN_NAME = "奥斯汀通知";
public String send(SmsParam smsParam) {
try {
/**
* 初始化 client
*/
// 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKey,此处还需注意密钥对的保密
// 密钥可前往https://console.cloud.tencent.com/cam/capi网站进行获取
Credential cred = new Credential(SECRET_ID, SECRET_KEY);
// 实例化一个http选项,可选的,没有特殊需求可以跳过
HttpProfile httpProfile = new HttpProfile();
httpProfile.setEndpoint(URL);
// 实例化一个client选项,可选的,没有特殊需求可以跳过
ClientProfile clientProfile = new ClientProfile();
clientProfile.setHttpProfile(httpProfile);
// 实例化要请求产品的client对象,clientProfile是可选的
SmsClient client = new SmsClient(cred, REGION, clientProfile);
/**
* 组装发送短信参数
*/
SendSmsRequest req = new SendSmsRequest();
String[] phoneNumberSet1 = smsParam.getPhones().toArray(new String[smsParam.getPhones().size() - 1]);
req.setPhoneNumberSet(phoneNumberSet1);
req.setSmsSdkAppId(SMS_SDK_APP_ID);
req.setSignName(SIGN_NAME);
req.setTemplateId(TEMPLATE_ID);
String[] templateParamSet1 = {smsParam.getContent()};
req.setTemplateParamSet(templateParamSet1);
req.setSessionContext(IdUtil.fastSimpleUUID());
/**
* 请求,返回结果
*/
SendSmsResponse resp = client.SendSms(req);
return SendSmsResponse.toJsonString(resp);
} catch (TencentCloudSDKException e) {
log.error("send tencent sms fail!{},params:{}", Throwables.getStackTraceAsString(e), JSON.toJSONString(smsParam));
return null;
}
}
}
注意上面的参数有需要修改的地方,SECRET_ID和SECRET_KEY 。

我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po