python发送阿里云短信教程

864 阅读2分钟

我正在参加「掘金·启航计划」

python发送阿里云短信教程

1、开通云短信

注册阿里云,开通短信服务。

云短信.png

2、快速学习

进入控制台后,点击左边的快速学习,申请签名,申请模板

快速学习.png

签名与模板的生成需要审核,需等待,注意签名与模板作用范围要一致。

2.1、添加签名

添加签名,如果是验证码就选验证码,如果是自己定义模板,则选择通用:

添加签名.png

注:签名名称在代码中会使用到。

2.2、添加模板

如果是通用,则要设置好变量

添加模板.png

比如我的:

变量.png

在代码中需要一一匹配这些变量。

申请成功后可以在模板管理里面查看:国内消息->模板管理:

模板管理.png

注:模板CODE在代码中会使用到。

3、获取密钥

阿里云需要ACCESSKEY_ID与 ACCESSKEY_SECRET才能通过身份验证发送短信。

点击进入管理控制台后,进入概览,在右侧四个方框最右侧AccessKey:

获取密钥.png

点击右侧-->创建AccessKey,生成新的AK和SK,或使用已存在AK和SK,然后复制密钥:

复制密钥.png

4、安装第三方库

在本地虚拟环境中安装适合python的阿里云短信库:

 pip install aliyun-python-sdk-core-v3

安装库.png

5、示例代码

代码如下:

 def software_sms_short(params):
     # TODO 阿里云发送短信
     # pip install aliyun-python-sdk-core-v3
     '''
     模板内容
     光纤振动告警:
     时间:${time_d} 位置:${address} 类型:${type_name} 设备:${device} 线路:${channel}
     :param phone:
     :param start_time:
     :param address:
     :param type_name:
     :return:
     '''
     from aliyunsdkcore.client import AcsClient
     from aliyunsdkcore.request import CommonRequest
 ​
     data = {
         "time_d": params['start_time'],
         'address': params['address'],
         'type_name': params['alarm_type'],
         'device': params['device_name'],
         'channel': params['channel_code'],
     }
     try:
         client = AcsClient(settings.ACCESSKEY_ID, settings.ACCESSKEY_SECRET, 'cn-hangzhou')
         request = CommonRequest()
         request.set_accept_format('json')
         request.set_domain('dysmsapi.aliyuncs.com')
         request.set_method('POST')
         request.set_protocol_type('https')  # https | http
         request.set_version('2017-05-25')
         request.set_action_name('SendSms')
 ​
         request.add_query_param('RegionId', "cn-hangzhou")
         request.add_query_param('PhoneNumbers', params['phone']) # 手机号
         request.add_query_param('SignName', params['sign_name']) # 签名名称
         request.add_query_param('TemplateCode', params['template_code']) # 模板code
         request.add_query_param('TemplateParam', data) #  
 ​
         response_b = client.do_action_with_exception(request)
         response_dict = eval(response_b.decode('utf-8'))
         # print(str(response, encoding='utf-8'))
         print('短信发送成功', response_dict)
         if response_dict['Code'] == 'OK':
             return True
     except Exception as e:
         msg = '短信发送出错, {}'.format(e)
         print(msg)
     return False