华为云短信发送

This commit is contained in:
caoqianming 2021-06-22 14:58:05 +08:00
parent 988b6f805a
commit 0a61fffe7a
4 changed files with 56 additions and 6 deletions

View File

@ -9,12 +9,12 @@ import requests #需要先使用pip install requests命令安装依赖
url = 'https://rtcsms.cn-north-1.myhuaweicloud.com:10743/sms/batchSendSms/v1' #APP接入地址+接口访问URI
APP_KEY = "Zee8JqWxdjEFteKTIK2xBs1T4QVq" #APP_Key
APP_SECRET = "IU035p6THoKmf0joKMEo7GuXR2YH" #APP_Secret
sender = "csms12345678" #国内短信签名通道号或国际/港澳台短信通道号
TEMPLATE_ID = "f81f97bd0ffe4c2292a02505e0fc20ec" #模板ID
sender = "8821061835858" #国内短信签名通道号或国际/港澳台短信通道号
TEMPLATE_ID = "da24fc8c77dc4789917a7cd1d7ad4026" #模板ID
#条件必填,国内短信关注,当templateId指定的模板类型为通用模板时生效且必填,必须是已审核通过的,与模板类型一致的签名名称
#国际/港澳台短信不用关注该参数
signature = "华为云短信测试" #签名名称
signature = "中科辐射学堂" #签名名称
# 必填,全局号码格式(包含国家码),示例:+86151****6789,多个号码之间用英文逗号分隔
receiver = "+8618911936305" #短信接收人号码
@ -45,6 +45,24 @@ def buildWSSEHeader(appKey, appSecret):
digestBase64 = base64.b64encode(digest.encode()).decode() #PasswordDigest
return 'UsernameToken Username="{}",PasswordDigest="{}",Nonce="{}",Created="{}"'.format(appKey, digestBase64, nonce, now);
def sendMsg(phone, code):
phone = '+86'+phone
code = '["'+ str(code) + '"]'
# 请求Headers
header = {'Authorization': 'WSSE realm="SDP",profile="UsernameToken",type="Appkey"',
'X-WSSE': buildWSSEHeader(APP_KEY, APP_SECRET)}
# 请求Body
formData = {'from': sender,
'to': phone,
'templateId': TEMPLATE_ID,
'templateParas': code,
'statusCallback': statusCallBack,
# 'signature': signature #使用国内短信通用模板时,必须填写签名名称
}
# 为防止因HTTPS证书认证失败造成API调用失败,需要先忽略证书信任问题
r = requests.post(url, data=formData, headers=header, verify=False)
return r.text
def main():
# 请求Headers
header = {'Authorization': 'WSSE realm="SDP",profile="UsernameToken",type="Appkey"',

View File

@ -0,0 +1,24 @@
# Generated by Django 3.0.4 on 2021-06-22 06:20
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('crm', '0034_candidate_create_admin'),
]
operations = [
migrations.AlterField(
model_name='candidate',
name='consumer',
field=models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='candidate_consumer', to='crm.Consumer'),
),
migrations.AlterField(
model_name='sendcode',
name='code',
field=models.CharField(max_length=6, verbose_name='验证码'),
),
]

View File

@ -102,7 +102,7 @@ class SendCode(CommonModel):
验证码发送记录
'''
phone = models.CharField(max_length=11, verbose_name='发送号码')
code = models.CharField(max_length=4, verbose_name= '验证码')
code = models.CharField(max_length=6, verbose_name= '验证码')
class Candidate(CommonModel):
consumer = models.ForeignKey(Consumer, on_delete=models.DO_NOTHING, related_name='candidate_consumer')

View File

@ -36,6 +36,7 @@ from django.http import Http404
from .spider import getZs
import time
from server.config import *
from .hwmsg import sendMsg
def my_payload_handler(user, dtype="admin"):
payload = {
@ -320,7 +321,7 @@ class ConsumerViewSet(ModelViewSet):
发送验证码
'''
client = ZhenziSmsClient(sms_url, sms_appid, sms_appsecret)
code = random.randint(1000,9999)
code = random.randint(10000,99999)
phone = request.query_params.get('phone')
params = {'message':'您的验证码为:' + str(code) +',5分钟内有效', 'number': phone}
result = json.loads(client.send(params))
@ -328,7 +329,14 @@ class ConsumerViewSet(ModelViewSet):
SendCode.objects.create(phone=phone, code=code)
return Response(status=status.HTTP_200_OK)
else:
return Response({'error':result['data']})
# 尝试华为云短信发送
result = json.loads(sendMsg(phone, code))
if result['code'] == '000000':
SendCode.objects.create(phone=phone, code=code)
return Response(status=status.HTTP_200_OK)
else:
return Response({'error':'发送失败'})
# return Response({'error':result['data']})
@action(methods=['post','delete','get'], detail=False,
url_path='collects', url_name='create_collects', perms_map=[{'*':'my_collects'}])