阿里云短信发送服务SDK-Python3
本文提供阿里云的短信发送服务SDK,使用Python3实现。
# -*- coding: utf-8 -*-
# pip install requests
import requests
import urllib.request
import time
import uuid
import hmac
import base64
import datetime
import json
def params(accesskeyid, mobiles, tpl_code, tpl_params, sign_name):
p = [
["SignatureMethod", "HMAC-SHA1"],
["SignatureNonce", uuid.uuid4().hex],
["AccessKeyId", accesskeyid],
["SignatureVersion", "1.0"],
["Timestamp", time_now_fmt()],
["Format", "JSON"],
["Action", "SendSms"],
["Version", "2017-05-25"],
["RegionId", "cn-hangzhou"],
["PhoneNumbers", "{0}".format(mobiles)],
["SignName", sign_name],
["TemplateParam", json.dumps(tpl_params, ensure_ascii=False)],
["TemplateCode", tpl_code],
["],
]
return p
def time_now_fmt():
r = datetime.datetime.utcfromtimestamp(time.time())
r = time.strftime("%Y-%m-%dT%H:%M:%SZ", r.timetuple())
return r
def special_url_encode(s):
r = urllib.parse.quote_plus(s).replace("+", "%20").replace("*", "%2A").replace("%7E", "~")
return r
def encode_params(lst):
s = "&".join(list(map(
lambda p: "=".join([special_url_encode(p[0]), special_url_encode(p[1])]),
sorted(lst, key=lambda p: p[0])
)))
return s
def prepare_sign(s):
r = "&".join(["GET", special_url_encode("/"), special_url_encode(s)])
return r
def sign(access_secret, prepare_str):
k = "{0}{1}".format(access_secret, "&")
r = hmac.new(k.encode(), prepare_str.encode(), sha1).digest()
base_str = base64.b64encode(r).decode()
return special_url_encode(base_str)
def _send_sms_ali(mobiles, tpl_code, tpl_params):
prefix_url = "https://dysmsapi.aliyuncs.com/?"
accesskeyid = "xxxxx"
accesssecret = "xxxxx"
sign_name = "xxxxx"
params_lst = params(accesskeyid, mobiles, tpl_code, tpl_params, sign_name)
eps = encode_params(params_lst)
prepare_str = prepare_sign(eps)
sign_str = sign(accesssecret, prepare_str)
url = "{0}Signature={1}&{2}".format(prefix_url, sign_str, eps)
r = requests.get(url)
if r.status_code != 200:
return False
else:
jn = json.loads(r.text)
if jn.get("Code") == "OK":
return True
else:
return False
if __name__ == "__main__":
# 签名校验测试,与测试样例一致,待拿到正式参数时再做测试修改
_tpl_code = "SMS_120785003"
_tpl_params = {"}
_send_sms_ali("150xxxxxxxxx,177xxxxxxxx", _tpl_code, _tpl_params)
阿里云短信发送服务SDK-Python3的更多相关文章
- Abp 添加阿里云短信发送
ABP中有短信发送接口ISmsSender public interface ISmsSender { Task<string> SendAsync(string number, stri ...
- 2018阿里云短信发送DEMO接入简单实例
以下更新2018-04-2309:57:54 后续不再更新, 基本类: app/SignatureHelper.php <?php namespace aliyun_mns; /** * 签名助 ...
- spring boot集成阿里云短信发送接收短信回复功能
1.集成阿里云通信发送短信: 在pom.xml文件里添加依赖 <!--阿里短信服务--> <dependency> <groupId>com.aliyun</ ...
- Java调用阿里云短信通道服务【千锋】
这里我们使用SpringBoot 来调用阿里通信的服务. 阿里通信,双11.收到短信,日发送达6亿条.保障力度非常高. 使用的步骤: 1.1. 第一步:需要开通账户 1.2. 第二步:阅读接口文档 1 ...
- 零基础大数据入门教程:Java调用阿里云短信通道服务
这里我们使用SpringBoot 来调用阿里通信的服务. 阿里通信,双11.收到短信,日发送达6亿条.保障力度非常高. 使用的步骤: 1.1. 第一步:需要开通账户 1.2. 第二步:阅读接口文档 1 ...
- .net core 使用阿里云短信发送SMS
阿里云官方的skd(aliyun-net-sdk-core,aliyun-net-sdk-dysmsapi)在dnc中发送短信会出错,nuget上的包貌似也一样不管用.直接改下sdk当然也可以,但就发 ...
- tp5阿里云短信发送
到阿里云下载php版demo,下完整版的,不是轻量级的; 框架 :TP5 把下载下来的文件放到extend里面 文件名:alimsg 里面的文件 import('alimsg.api_demo.Sm ...
- java 阿里云短信发送
记录自己的足迹,学习的路很长,一直在走着呢~ 第一步登录阿里云的控制台,找到此处: 点击之后就到此页面,如果发现账号有异常或者泄露什么,可以禁用或者删除 AccessKey: 此处方便测试,所以就新 ...
- 移动端获取短信验证码java实现——阿里云短信服务
需求:移动端输入手机号,获取验证码.点击登录,验证验证码是否输入错误.是否超时等情况,一旦校验通过,将用户数据保存到数据中(业务逻辑). 前提:注册阿里用户,开通短信服务,申请key.秘钥.签名.短信 ...
随机推荐
- u3d 加密资源并缓存加载
// C# Example // Builds an asset bundle from the selected objects in the project view. // Once compi ...
- 据库分库分表(sharding)系列(一) 拆分实施策略和示例演示
本文原文连接: http://blog.csdn.net/bluishglc/article/details/7696085 ,转载请注明出处!本文着重介绍sharding切分策略,如果你对数据库sh ...
- Mac下Intellij IDea发布JavaWeb项目 详解一 (1、新建JavaEE Project并进行相应设置 2、配置tomcat)
IDEA中 javaWeb项目的创建和tomcat配置(完整) 1.先新建JavaEE Project并进行相应设置 2.在配置tomcat Step1 新建JavaEE Project并进行相应设置 ...
- struts1的配置文件详解
要想使用Struts,至少要依靠两个配置文件:web.xml和struts-config.xml.其中web.xml用来安装Struts框架.而struts-config.xml用来配置在Struts ...
- struts.xml文件中配置tiles.xml
Apache Tiles是一个JavaEE应用的页面布局框架.Tiles框架提供了一种模板机制,可以为某一类页面定义一个通用的模板,该模板定义了页面的整体布局.布局由可以复用的多个块组成,每个页面可以 ...
- C/C++注册动态对象到Lu系统并进行运算符重载
欢迎访问Lu程序设计 C/C++注册动态对象到Lu系统并进行运算符重载 1 说明 要演示本文的例子,你必须下载Lu32脚本系统.本文的例子需要lu32.dll.lu32.lib.C格式的头文件lu32 ...
- java(8) HashMap源码
系统环境: JDK1.7 HashMap的基本结构:数组 + 链表.主数组不存储实际的数据,存储的是链表首地址. 成员变量 //默认数组的初始化大小为16 static final int DEFAU ...
- Elasticsearch学习之深入聚合分析二---案例实战
以一个家电卖场中的电视销售数据为背景,来对各种品牌,各种颜色的电视的销量和销售额,进行各种各样角度的分析,首先建立电视销售的索引,然后 添加几条销售记录 PUT /tvs { "mappin ...
- Sencha Touch 扩展集合
https://market.sencha.com/extensions http://try.sencha.com/touch/2.1.0/ http://www.mitchellsimoens.c ...
- Node.js 文件系统fs模块
Node.js 文件系统封装在 fs 模块是中,它提供了文件的读取.写入.更名.删除.遍历目录.链接等POSIX 文件系统操作. 与其他模块不同的是,fs 模块中所有的操作都提供了异步的和 同步的两个 ...