当我们在注册一个网页时,有的网页会让必须要短信验证、邮箱验证,才可以进行账号的注册。其实,我们在项目中会遇到很多问题,比如:当我们进行爬虫的时候,很容易由于网页的改版,造成我们事先写好的爬虫突然无效,此时就需要及时的通知到我们的后台管理人员,可以进行及时修改工作。所以使用短信或者邮件的发送是非常有必要的。
所以今天想来谈一下如何使用Python进行发送短信的操作。
短信验证
今天利用python第三方,发送短信验证码的代码,速实现一遍,短信立即收到,果断记录在案!
程序运行的环境是 windows10 + Python 3.6,由于第三方平台较多,我们今天使用榛子云短信平台,这个平台免费使用1条,充值10元,可以发送270条短信。
调用榛子云短信:http://smsow.zhenzikj.com 的短信接口,生成验证码并发送。
下载SDK文档:http://smsow.zhenzikj.com/doc/sdk.html ,我们进入这个链接,会出现下面这个页面。
因为我们这次的环境是Python3
,所以我们选择Python3
,下载我们需要的其他文件,保存即可。
我们点击这个就会进入Python SDK 开发文档
,内容如下:
1.安装
下载后的SDK只包含一个zhenzismsclient.py文件,直接导入到工程中即可使用。
以下是zhenzismsclient.py
文件
# -*- coding: utf-8 -*- # @Time : 2019/7/21 15:19 # @Author : hang1720 # @Site : # @File : zhenzismsclient.py # @Software: PyCharm import urllib.request import urllib.parse class ZhenziSmsClient(object): def __init__(self, apiUrl, appId, appSecret): self.apiUrl = apiUrl self.appId = appId self.appSecret = appSecret def send(self, number, message, messageId=''): data = { 'appId': self.appId, 'appSecret': self.appSecret, 'message': message, 'number': number, 'messageId': messageId } data = urllib.parse.urlencode(data).encode('utf-8') req = urllib.request.Request(self.apiUrl + '/sms/send.do', data=data) res_data = urllib.request.urlopen(req) res = res_data.read() res = res.decode('utf-8') return res def balance(self): data = { 'appId': self.appId, 'appSecret': self.appSecret } data = urllib.parse.urlencode(data).encode('utf-8') req = urllib.request.Request(self.apiUrl + '/account/balance.do', data=data); res_data = urllib.request.urlopen(req) res = res_data.read() return res def findSmsByMessageId(self, messageId): data = { 'appId': self.appId, 'appSecret': self.appSecret, 'messageId': messageId } data = urllib.parse.urlencode(data).encode('utf-8') req = urllib.request.Request(self.apiUrl + '/smslog/findSmsByMessageId.do', data=data) res_data = urllib.request.urlopen(req) res = res_data.read() return res
2.用法
引入模块
import zhenzismsclient as smsclient
使用事先申请的AppId
、AppSecret
初始化ZhenziSmsClient
:
client = smsclient.ZhenziSmsClient(apiUrl, appId, appSecret);
apiUrl为请求地址,个人开发者使用
https://sms_developer.zhenzikj.com
,企业开发者使用https://sms.zhenzikj.com
下面是获取AppId、AppSecret的简单步骤:
1.首先,我们先登录。
2.我们获取AppId、AppSecret
温馨提示:
可以免费使用一条,后面就要自己购买了。
1)发送短信
result = client.send('15811111111', '您的验证码为2323');
send方法用于单条发送短信
参数1:接收者手机号码,参数2:短信内容
返回结果是json格式的字符串, code: 发送状态,0为成功。非0为发送失败,可从data中查看错误信息
注: 测试发送短信内容不要使用"你好"或"12132"全数字形式,这种短信内容没有具体的意义,可能会被运营商屏蔽
{ "code":0, "data":"发送成功" }
2)发送短信(返回状态报告)
result = client.send('15811111111', '您的验证码为2323', 'dfee_dfdw_xdfd_dfdfd');
send方法用于单条发送短信,并且开发者可接受短信发送状态报告。
参数1:接收者手机号码,参数2:短信内容, 参数3:messageId即该条短信的唯一标识, 不能重复
返回结果是
json格式
的字符串,code
: 发送状态,0为成功。非0为发送失败,可从data中查看错误信息
错误代码表
错误码 | 原因 | 解决方案 |
---|---|---|
100 | 参数格式错误 | 检查请求参数是否为空, 或手机号码格式错误 |
101 | 短信内容超过1000字 | 短信内容过长,请筛检或分多次发送 |
105 | appId错误或应用不存在 | 请联系工作人员申请应用或检查appId是否输入错误 |
106 | 应用被禁止 | 请联系工作人员查看原因 |
107 | ip错误 | 如果设置了ip白名单,系统会检查请求服务器的ip地址,已确定是否为安全的来源访问 |
108 | 短信余额不足 | 需要到用户中心进行充值 |
109 | 今日发送超过限额 | 如果设置了日发送数量,则每个接收号码不得超过这个数量 |
110 | 应用秘钥(AppSecret)错误 | 检查AppSecret是否输入错误,或是否已在用户中心进行了秘钥重置 |
111 | 账号不存在 | 请联系工作人员申请账号 |
1000 | 系统位置错误 | 请联系工作人员或技术人员检查原因 |
3)查看余额
通过该接口可查看当前剩余的短信条数
result = client.balance();
返回结果是
json
格式的字符串,code
: 查询状态,0为成功,data
为剩余短信条数。非0为查询失败,可从data中查看错误信息
错误代码表同上
4)查询短信
接口描述
根据messageId查询已发送短信
result = client.findSmsByMessageId('dfee_dfdw_xdfd_dfdfd');
注: 必须是
post
请求,个人开发者域名使用sms_developer.zhenzikj.com
,企业开发者域名使用sms.zhenzikj.com
请求参数
参数名称 | 必选 | 类型 | 描述 |
---|---|---|---|
appId | 是 | string | 应用id,可通过用户中心,应用详情查看 |
appSecret | 是 | string | 应用秘钥,可通过用户中心,应用详情查看 |
messageId | 是 | string | 信息id,对应发送短信接口的messageId字段 |
返回结果
返回结果是json格式
的字符串,code
: 查询状态,0
为成功。非0为失败,可从data中查看错误信息
{ "code":0, "data":{} }
返回结果是json格式
的字符串, code
: 查询状态,0为成功,data
短信信息的json字符串
3.代码
我们学习完文档之后,学习到的代码如下:
# -*- coding: utf-8 -*- # @Time : 2019/7/22 15:00 # @Author : hang1720 # @Site : # @File : send_message.py # @Software: PyCharm import zhenzismsclient as smsclient # 生成随机验证码 import random code = "" for num in range(0, 6): code = code + str(random.randint(0, 9)) # 参数 # apiUrl为请求地址 apiUrl = "http://sms_developer.zhenzikj.com" appId = "101**6" # 请在这里输入你的`appid` appSecret = "YzNmY2MyNGItYz********Q0LWJhMTEtNjEyYTY3MWZjZDky" # 请在这里输入你的`appSecret` # 初始化ZhenziSmsClient client = smsclient.ZhenziSmsClient(apiUrl, appId, appSecret) phone_num = input("请输入接受信息的手机号:") msg = "%s,您的验证码是%s,5分钟内有效,请注意保密。" % (phone_num, code) result = client.send(phone_num, msg) print(result)
今天我们就先学习都这里,后面如何在项目中使用,等我们学完 redis
,我会再给大家讲解。