本文提供阿里云的短信发送服务SDK,使用Python3实现。

  1. # -*- coding: utf-8 -*-
  2. # pip install requests
  3. import requests
  4. import urllib.request
  5. import time
  6. import uuid
  7. import hmac
  8. import base64
  9. import datetime
  10. import json
  11.  
  12. def params(accesskeyid, mobiles, tpl_code, tpl_params, sign_name):
  13. p = [
  14. ["SignatureMethod", "HMAC-SHA1"],
  15. ["SignatureNonce", uuid.uuid4().hex],
  16. ["AccessKeyId", accesskeyid],
  17. ["SignatureVersion", "1.0"],
  18. ["Timestamp", time_now_fmt()],
  19. ["Format", "JSON"],
  20.  
  21. ["Action", "SendSms"],
  22. ["Version", "2017-05-25"],
  23. ["RegionId", "cn-hangzhou"],
  24. ["PhoneNumbers", "{0}".format(mobiles)],
  25. ["SignName", sign_name],
  26. ["TemplateParam", json.dumps(tpl_params, ensure_ascii=False)],
  27. ["TemplateCode", tpl_code],
  28. ["],
  29. ]
  30. return p
  31.  
  32. def time_now_fmt():
  33. r = datetime.datetime.utcfromtimestamp(time.time())
  34. r = time.strftime("%Y-%m-%dT%H:%M:%SZ", r.timetuple())
  35. return r
  36.  
  37. def special_url_encode(s):
  38. r = urllib.parse.quote_plus(s).replace("+", "%20").replace("*", "%2A").replace("%7E", "~")
  39. return r
  40.  
  41. def encode_params(lst):
  42. s = "&".join(list(map(
  43. lambda p: "=".join([special_url_encode(p[0]), special_url_encode(p[1])]),
  44. sorted(lst, key=lambda p: p[0])
  45. )))
  46. return s
  47.  
  48. def prepare_sign(s):
  49. r = "&".join(["GET", special_url_encode("/"), special_url_encode(s)])
  50. return r
  51.  
  52. def sign(access_secret, prepare_str):
  53. k = "{0}{1}".format(access_secret, "&")
  54. r = hmac.new(k.encode(), prepare_str.encode(), sha1).digest()
  55. base_str = base64.b64encode(r).decode()
  56. return special_url_encode(base_str)
  57.  
  58. def _send_sms_ali(mobiles, tpl_code, tpl_params):
  59. prefix_url = "https://dysmsapi.aliyuncs.com/?"
  60.  
  61. accesskeyid = "xxxxx"
  62. accesssecret = "xxxxx"
  63. sign_name = "xxxxx"
  64.  
  65. params_lst = params(accesskeyid, mobiles, tpl_code, tpl_params, sign_name)
  66. eps = encode_params(params_lst)
  67. prepare_str = prepare_sign(eps)
  68. sign_str = sign(accesssecret, prepare_str)
  69.  
  70. url = "{0}Signature={1}&{2}".format(prefix_url, sign_str, eps)
  71.  
  72. r = requests.get(url)
  73. if r.status_code != 200:
  74. return False
  75. else:
  76. jn = json.loads(r.text)
  77. if jn.get("Code") == "OK":
  78. return True
  79. else:
  80. return False
  81.  
  82. if __name__ == "__main__":
  83. # 签名校验测试,与测试样例一致,待拿到正式参数时再做测试修改
  84.  
  85. _tpl_code = "SMS_120785003"
  86. _tpl_params = {"}
  87. _send_sms_ali("150xxxxxxxxx,177xxxxxxxx", _tpl_code, _tpl_params)

阿里云短信发送服务SDK-Python3的更多相关文章

  1. Abp 添加阿里云短信发送

    ABP中有短信发送接口ISmsSender public interface ISmsSender { Task<string> SendAsync(string number, stri ...

  2. 2018阿里云短信发送DEMO接入简单实例

    以下更新2018-04-2309:57:54 后续不再更新, 基本类: app/SignatureHelper.php <?php namespace aliyun_mns; /** * 签名助 ...

  3. spring boot集成阿里云短信发送接收短信回复功能

    1.集成阿里云通信发送短信: 在pom.xml文件里添加依赖 <!--阿里短信服务--> <dependency> <groupId>com.aliyun</ ...

  4. Java调用阿里云短信通道服务【千锋】

    这里我们使用SpringBoot 来调用阿里通信的服务. 阿里通信,双11.收到短信,日发送达6亿条.保障力度非常高. 使用的步骤: 1.1. 第一步:需要开通账户 1.2. 第二步:阅读接口文档 1 ...

  5. 零基础大数据入门教程:Java调用阿里云短信通道服务

    这里我们使用SpringBoot 来调用阿里通信的服务. 阿里通信,双11.收到短信,日发送达6亿条.保障力度非常高. 使用的步骤: 1.1. 第一步:需要开通账户 1.2. 第二步:阅读接口文档 1 ...

  6. .net core 使用阿里云短信发送SMS

    阿里云官方的skd(aliyun-net-sdk-core,aliyun-net-sdk-dysmsapi)在dnc中发送短信会出错,nuget上的包貌似也一样不管用.直接改下sdk当然也可以,但就发 ...

  7. tp5阿里云短信发送

    到阿里云下载php版demo,下完整版的,不是轻量级的; 框架  :TP5 把下载下来的文件放到extend里面 文件名:alimsg 里面的文件 import('alimsg.api_demo.Sm ...

  8. java 阿里云短信发送

    记录自己的足迹,学习的路很长,一直在走着呢~ 第一步登录阿里云的控制台,找到此处: 点击之后就到此页面,如果发现账号有异常或者泄露什么,可以禁用或者删除  AccessKey: 此处方便测试,所以就新 ...

  9. 移动端获取短信验证码java实现——阿里云短信服务

    需求:移动端输入手机号,获取验证码.点击登录,验证验证码是否输入错误.是否超时等情况,一旦校验通过,将用户数据保存到数据中(业务逻辑). 前提:注册阿里用户,开通短信服务,申请key.秘钥.签名.短信 ...

随机推荐

  1. 【代码审计】TuziCMS_v3.0_任意文件删除漏洞分析

      0x00 环境准备 TuziCMS官网:http://www.tuzicms.com/ 网站源码版本:TuziCMS_v3.0_20161220 程序源码下载:http://www.tuzicms ...

  2. using 释放内存的写法

    using (FileStream fileStream = File.Open(fileName,FileMode.Open,FileAccess.Read,FileShare.ReadWrite) ...

  3. [Python] Python 之 function, unbound method 和 bound method

    首先看一下以下示例.(Python 2.7) #!/usr/bin/env python # -*- coding: utf-8 -*- class C(object): def foo(self): ...

  4. 安装win7到移动硬盘

    jpg改rar http://www.360doc.com/content/16/0816/10/19373891_583556875.shtml

  5. 【docker】 centos7 安装docker

    1.Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 通过 uname -r 命令查看你当前的内核版本 unam ...

  6. STL 迭代器 iterator const

    STL迭代器很多时候可以当成指针来使用. 但是指针一般可以用const来控制访问. 那迭代器呢. #include <iostream> #include <vector> u ...

  7. c++多线程——锁技巧

    [转自]here 编写程序不容易,编写多线程的程序更不容易.相信编写过多线程的程序都应该有这样的一个痛苦过程,什么样的情况呢?朋友们应该看一下代码就明白了, void data_process() { ...

  8. 【分享】IT产业中的三大定理(三) —— 反摩尔定理 (Reverse Moore's Law)

    Google(谷歌)的 CEO 埃里克·施密特在一次采访中指出,如果你反过来看摩尔定理,一个 IT 公司如果今天和十八个月前卖掉同样多的.同样的产品,它的营业额就要降一半.IT 界把它称为反摩尔定理. ...

  9. UITableView 如何设置背景颜色

    http://blog.sina.com.cn/s/blog_6734cee201011kya.html 原因:1.backgroundView 属性不为nil,所有设置backgroundColor ...

  10. Adobe Acrobat Reader DC For Android 下载

    http://get.adobe.com/cn/reader/otherversions/ 点击“立即下载”按钮,即可开始下载到PC端