「 python 」 python 实现短信验证码

当我们在注册一个网页时,有的网页会让必须要短信验证、邮箱验证,才可以进行账号的注册。其实,我们在项目中会遇到很多问题,比如:当我们进行爬虫的时候,很容易由于网页的改版,造成我们事先写好的爬虫突然无效,此时就需要及时的通知到我们的后台管理人员,可以进行及时修改工作。所以使用短信或者邮件的发送是非常有必要的。

所以今天想来谈一下如何使用Python进行发送短信的操作。

短信验证

今天利用python第三方,发送短信验证码的代码,速实现一遍,短信立即收到,果断记录在案!

程序运行的环境是 windows10 + Python 3.6,由于第三方平台较多,我们今天使用榛子云短信平台,这个平台免费使用1条,充值10元,可以发送270条短信。

调用榛子云短信:http://smsow.zhenzikj.com 的短信接口,生成验证码并发送。

下载SDK文档:http://smsow.zhenzikj.com/doc/sdk.html ,我们进入这个链接,会出现下面这个页面。

下载SDK

因为我们这次的环境是Python3,所以我们选择Python3,下载我们需要的其他文件,保存即可。

下载SDK文档

我们点击这个就会进入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

使用事先申请的AppIdAppSecret初始化ZhenziSmsClient:

client = smsclient.ZhenziSmsClient(apiUrl, appId, appSecret);

apiUrl为请求地址,个人开发者使用https://sms_developer.zhenzikj.com,企业开发者使用https://sms.zhenzikj.com

下面是获取AppId、AppSecret的简单步骤:

1.首先,我们先登录。

zzy1.png

2.我们获取AppId、AppSecret

zzy2.jpg

温馨提示:

可以免费使用一条,后面就要自己购买了。

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 ,我会再给大家讲解。

你可能感兴趣的:(「 python 」 python 实现短信验证码)