#!/usr/bin/env python
#-*- coding:utf-8 -*-
#Author:lzd import uuid
import datetime
import hmac
import base64
import requests
from urllib.parse import urlencode, quote class AliyunSMS(object):
def __init__(self): self.format = "JSON"
self.version = "2017-05-25"
self.key = 'xxx'
self.secret = 'xxx'
self.signature = ""
self.signature_method = "HMAC-SHA1"
self.signature_version = "1.0"
self.signature_nonce = str(uuid.uuid4())
self.timestamp = datetime.datetime.utcnow().isoformat("T")
self.region_id = 'cn-hangzhou' self.gateway = "http://dysmsapi.aliyuncs.com"
self.action = "SendSms"
self.sign = ""
self.template = ""
self.params = {}
self.phones = "" def send_single(self, phone, sign, template, params):
self.action = "SendSms"
self.phones = phone
self.sign = sign
self.params = params
self.template = template query_string = self.build_query_string()
resp = requests.get(self.gateway + "?" + query_string).json()
model = resp.get("Model")
if model is not None:
return True
print(model)
print("send sms to %s , reason: %s" % (self.phones, resp.get("Message")))
print(resp)
return False def build_query_string(self):
query = []
query.append(("Format", self.format))
query.append(("Version", self.version))
query.append(("AccessKeyId", self.key))
query.append(("SignatureMethod", self.signature_method))
query.append(("SignatureVersion", self.signature_version))
query.append(("SignatureNonce", self.signature_nonce))
query.append(("Timestamp", self.timestamp))
query.append(("RegionId", self.region_id))
query.append(("Action", self.action))
query.append(("SignName", self.sign))
query.append(("TemplateCode", self.template))
query.append(("PhoneNumbers", self.phones))
params = "{"
for param in self.params:
params += "\"" + param + "\"" + ":" + "\"" + str(self.params[param]) + "\"" + ","
params = params[:-1] + "}"
print(params)
query.append(("TemplateParam", params))
query = sorted(query, key=lambda key: key[0])
query_string = ""
i=0
for item in query:
query_string += quote(item[0], safe="~") + "=" + quote(item[1], safe="~") + "&"
i+=1
print(query_string)
print(i)
query_string = query_string[:-1]
print(query_string)
tosign = "GET&%2F&" + quote(query_string, safe="~")
secret = self.secret + "&"
hmb = hmac.new(secret.encode("utf-8"), tosign.encode("utf-8"), "sha1").digest()
self.signature = quote(base64.standard_b64encode(hmb).decode("ascii"), safe="~")
query_string += "&" + "Signature=" + self.signature
print(query_string)
return query_string sms=AliyunSMS()
params = {"code":"test","product":"test2"}
sms.send_single(phone="13900000000", sign="猎宝网", template='SMS_33435156', params=params)

最新文章

  1. 隐藏标题栏 requestWindowFeature(Window.FEATURE_NO_TITLE);
  2. LR性能指标分析
  3. SqlServer将没有log文件的数据库文件附加到服务器中
  4. tmux下的滚屏
  5. shell 标出输入、标准输出、错误输出
  6. Cookie存储中文报错:java.lang.IllegalArgumentException: Control character in cookie value or attribute.(转)
  7. C 语言字符 和字符串输出
  8. Unity3D入门(二):碰撞检測
  9. php学习笔记——文件(1)
  10. 锤子便签的 monkeyrunner 测试脚本(转)
  11. webservice_模拟报文测试
  12. 多线程面试题系列(3):原子操作 Interlocked系列函数
  13. 剑指Offer_11_旋转数组的最小数字
  14. 嵌入式Tomcat容器的参数(maxParameterCount)设定
  15. jmeter5.0 while controller使用总结
  16. requests支持socks5代理了
  17. 福利爬虫妹子图之获取种子url
  18. 微服务、SOA 和 API对比与分析
  19. LHC大神问的矩阵转置问题
  20. 李洪强iOS开发之苹果企业开发者账号申请流程

热门文章

  1. 谷歌浏览器&360浏览器安装——有道云笔记插件
  2. BZOJ 3122 【SDOI2013】 随机数生成器
  3. Codeforces Round #169 (Div. 2) E. Little Girl and Problem on Trees dfs序+线段树
  4. lua劈分字符串方法及实例
  5. spark + cassandra +postgres +codis 大数据方案
  6. OKR 说明
  7. log4j日志文件配置
  8. Page.TryUpdateModel 方法
  9. Zabbix SNMP OID discovery,自动发现
  10. 将java打jar包成linux后台服务service