# coding=utf-8
import urllib.parse
import requests
from apig_sdk import signer
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
if __name__ == '__main__':
# 必填,请参考"开发准备"获取如下数据,替换为实际值
url = 'url接口网址/sms/batchSendSms/v1' # APP接入地址+接口访问URI
# 认证用的appKey和appSecret硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;
APP_KEY = "" # APP_Key
APP_SECRET = "" # APP_Secret
sender = "" # 国内短信签名通道号
TEMPLATE_ID = "" # 模板ID
# 条件必填,国内短信关注,当templateId指定的模板类型为通用模板时生效且必填,必须是已审核通过的,与模板类型一致的签名名称
signature = "华为云短信测试" # 签名名称
# 必填,全局号码格式(包含国家码),示例:+86151****6789,多个号码之间用英文逗号分隔
receiver = "+86" # 短信接收人号码
# 选填,短信状态报告接收地址,推荐使用域名,为空或者不填表示不接收状态报告
statusCallBack = ""
'''
选填,使用无变量模板时请赋空值 TEMPLATE_PARAM = '';
单变量模板示例:模板内容为"您的验证码是${1}"时,TEMPLATE_PARAM可填写为'["369751"]'
双变量模板示例:模板内容为"您有${1}件快递请到${2}领取"时,TEMPLATE_PARAM可填写为'["3","人民公园正门"]'
模板中的每个变量都必须赋值,且取值不能为空
查看更多模板规范和变量规范:产品介绍>短信模板须知和短信变量须知
'''
TEMPLATE_PARAM = '["369751"]' # 模板变量
formData = urllib.parse.urlencode({
'from': sender,
'to': receiver,
'templateId': TEMPLATE_ID,
'templateParas': TEMPLATE_PARAM,
'statusCallback': statusCallBack,
'signature': signature # 使用中国大陆短信通用模板时,必须填写签名名称
}).encode('ascii')
print(formData)
sig = signer.Signer()
sig.Key = APP_KEY
sig.Secret = APP_SECRET
r = signer.HttpRequest("POST", url)
r.headers = {"content-type": "application/x-www-form-urlencoded"}
r.body = formData
sig.Sign(r)
print(r.headers["X-Sdk-Date"])
print(r.headers["Authorization"])
# 构建请求的完整URL
request_url = r.scheme + "://" + r.host + r.uri
# 发送请求
resp = requests.request(r.method, request_url, headers=r.headers, data=r.body, verify=False)
print(resp.status_code, resp.reason)
print(resp.content)
这是自己完整的代码。与官方文档不同的是自己加了一列忽略证书进行http访问接口的代码。是在大佬那里学的。以下是代码和原链接。
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
原链接:https://blog.csdn.net/dugufeilei/article/details/113760451
用之前记得先在控制台申请企业认证,然后创建应用管理、短信模板、签名,不然跑通了也发不出去噢。在哪里申请也给大家放下边了,自取。https://console.huaweicloud.com/msgsms/?agencyId=23554650b134414b98cf87c342c83415&locale=zh-cn®ion=cn-north-4#/msgsms/SendtoDetails