博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python3调用阿里云短信服务
阅读量:4315 次
发布时间:2019-06-06

本文共 3218 字,大约阅读时间需要 10 分钟。

#!/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)

转载于:https://www.cnblogs.com/itfat/p/8514331.html

你可能感兴趣的文章
POJ 1740
查看>>
【翻译】火影忍者鸣人 疾风传 终级风暴2 制作介绍
查看>>
http和webservice
查看>>
hdu1879------------prim算法模板
查看>>
jdbc之二:DAO模式
查看>>
MySQL性能优化方法一:缓存参数优化
查看>>
Angular2 - 概述
查看>>
正则表达式tab表示\t
查看>>
NodeJS+Express+MongoDB 简单实现数据录入及回显展示【Study笔记】
查看>>
Highcharts使用指南
查看>>
网络基础(子网划分)
查看>>
Google C++ Style
查看>>
MyBatis总结八:缓存介绍(一级缓存,二级缓存)
查看>>
div+css教程网站建设门户网站和电子商务网站CSS样式表
查看>>
[LeetCode][JavaScript]Candy
查看>>
Mybatis分页插件
查看>>
sk_buff Structure
查看>>
oracle的级联更新、删除
查看>>
多浏览器开发需要注意的问题之一
查看>>
Maven配置
查看>>