一. Django基于python3.6使用容联发送短信流程
容联官方的python支持2.7版本,当我们python解释器采用3版本时,需要修改容联接口中的一些参数及方法。
首先去容联官网注册账号,申请测试账号无需实名认证,而且开始账号自带8元钱,一条短信大概2分。
1.1 调用接口前的准备
首先注册登录之后再控制台中添加测试号码:
点击导航栏的开发文档:
选择短信开发手册:
之后点击Demo示例:
下载基于python的Demo:
下载完成后解压,将其中的两个文件复制:
然后在python项目文件夹下新建文件夹,比如libs,里面再新建一个文件夹,将这两个文件黏贴在其中:
然后在yuntongxun文件下新建sms.py文件,同时将接口调用示例中年的代码复制黏贴至其中:
将sms.py中的报错修改一下:
以上几个参数在控制台中可以看到:
同时可以修改一下sms.py文件中调用接口的函数,修改一下返回的信息,方便后续加入自己的逻辑,这里我将其函数名也修改了:
def send_msg(to, datas, tempId): # 初始化REST SDK rest = REST(serverIP, serverPort, softVersion) rest.setAccount(accountSid, accountToken) rest.setAppId(appId) result = rest.sendTemplateSMS(to, datas, tempId) if result.get('statusCode') == '000000': print('发送成功') return True else: print('发送失败') return False
result中的信息可以在开发文档中查看:
1.2 使用容联接口
打开CCPRestSDK.py发现报错:
将其中的模块修改如下,修改三个地方:
# 修改 from hashlib import md5 import base64 import datetime # 修改 from urllib import request as urllib2 import json # 修改 from .xmltojson import xmltojson from xml.dom import minidom
然后里面还有很多报错如下:
修改成以下格式即可(将Exception后的逗号去掉改为as即可),将所有该报错修改,共13个:
然后将第定位至235行:
首先修改生成sig中的内容:
#生成sig signature = self.AccountSid + self.AccountToken + self.Batch; md5_obj = md5() md5_obj.md5.new(signature) sig = md5_obj.hexdigest().upper()
# 仅仅修改其中的auth auth = base64.encodebytes(src.encode()).decode().strip()
修改如下:
req.data = body.encode()
使用Int将其转为整型:
if(int(self.ServerPort)<=0): print('172005'); print('端口错误(小于等于0)');
接着在yuntongxun文件夹下的__init__.py中加入以下语句:
from .sms import send_msg
import os # 以下三行配置django测试环境 os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffyapi.settings.dev') import django django.setup() from luffyapi.libs.yuntongxun import send_msg # send_msg('接收方手机号',(验证码,过期时间分钟), 模块编号) # 模板编号测试环境中只能为1,接收方手机号是我们控制台测试号码中配置的 # 过期时间客户端收到的是以分钟为单位的,我们通过该值配置redis等非关系型数据库中该验证码的过期时间 result = send_msg('15858291832', ('python', 5), 1) print(result)




from .CCPRestSDK import REST from django.conf import settings # 注:在配置文件dev中完成四个配置信息 # 说明:主账号,登陆云通讯网站后,可在"控制台-应用"中看到开发者主账号ACCOUNT SID _accountSid = settings.SMS_ACCOUNTSID # 说明:主账号Token,登陆云通讯网站后,可在控制台-应用中看到开发者主账号AUTH TOKEN _accountToken = settings.SMS_ACCOUNTTOKEN # 说明:请使用管理控制台首页的APPID或自己创建应用的APPID _appId = settings.SMS_APPID # 说明:请求地址,生产环境配置成app.cloopen.com,开发环境配置成sandboxapp.cloopen.com _serverIP = settings.SMS_SERVERIP # 说明:请求端口 ,生产环境为8883 _serverPort = "8883" # 说明:REST API版本号保持不变 _softVersion = '2013-12-26' def send_sms(mobile, code_expire_tuple, temp_id): # 配置 rest = REST(_serverIP, _serverPort, _softVersion) rest.setAccount(_accountSid, _accountToken) rest.setAppId(_appId) # 发送 result = rest.sendTemplateSMS(mobile, code_expire_tuple, temp_id) # 结果:信息成功发生,结果字典result中 statuCode 字段为 "000000" if result.get("statusCode") == "000000": return True # 表示发送短信成功 else: return False # 表示发送失败