摘要:獲取阿里云訪問密鑰為了使用短信發送,您必須申請阿里云的訪問密鑰。國際港澳臺消息只能使用國際港澳臺短信模版發送短信。
1.獲取阿里云訪問密鑰
為了使用短信發送API-Python SDK,您必須申請阿里云的訪問密鑰。
阿里云訪問秘鑰是阿里云為用戶使用 API(非控制臺)來訪問其云資源設計的“安全口令”。您可以用它來簽名 API 請求內容以通過服務端的安全驗證。
該訪問秘鑰成對(AccessKeyId 與 AccessKeySecret)生成和使用。每個阿里云用戶可以創建多對訪問秘鑰,且可隨時啟用(Active)、禁用(Inactive)或者刪除已經生成的訪問秘鑰對。
您可以通過阿里云控制臺的?秘鑰管理頁面?創建、管理所有的訪問秘鑰對,且保證它處于“啟用”狀態。由于訪問秘鑰是阿里云對 API 請求進行安全驗證的關鍵因子,請妥善保管你的訪問秘鑰。如果某些秘鑰對出現泄漏風險,建議及時刪除該秘鑰對并生成新的替代秘鑰對。
2.在控制臺完成模板與簽名的申請,獲得調用接口必備的參數短信簽名
根據用戶屬性來創建符合自身屬性的簽名信息。企業用戶需要上傳相關企業資質證明,個人用戶需要上傳證明個人身份的證明。
短信簽名需要審核通過后才可以使用。
短信模板
短信模板,即具體發送的短信內容。
短信模板可以支持驗證碼、短信通知、推廣短信、國際/港澳臺消息四種模式。驗證碼和短信通知,通過變量替換實現個性短信定制。推廣短信不支持在模板中添加變量。國際/港澳臺消息只能使用國際/港澳臺短信模版發送短信。
短信模板需要審核通過后才可以使用。
3.參數列表 入參列表參數名稱 | 參數類型 | 必填與否 | 樣例取值 | 參數說明 |
---|---|---|---|---|
PhoneNumbers | String | 必須 | 15000000000 | 短信接收號碼。支持以逗號分隔的形式進行批量調用,批量上限為1000個手機號碼,批量調用相對于單條調用及時性稍有延遲,驗證碼類型的短信推薦使用單條調用的方式,發送國際/港澳臺消息時,接收號碼格式為00+國際區號+號碼,如“0085200000000” |
SignName | String | 必須 | 云通信 | 短信簽名 |
TemplateCode | String | 必須 | SMS_0000 | 短信模板ID,發送國際/港澳臺消息時,請使用國際/港澳臺短信模版 |
TemplateParam | String | 可選 | {“code”:”1234”,”product”:”ytx”} | 短信模板變量替換JSON串,友情提示:如果JSON中需要帶換行符,請參照標準的JSON協議對換行符的要求,比如短信內容中包含rn的情況在JSON中需要表示成rn,否則會導致JSON在服務端解析失敗 |
OutId | String | 可選 | abcdefgh | 外部流水擴展字段 |
出參名稱 | 出參類型 | 樣例取值 | 參數說明 |
---|---|---|---|
RequestId | String | 8906582E-6722 | 請求ID |
Code | String | OK | 狀態碼-返回OK代表請求成功,其他錯誤碼詳見錯誤碼列表 |
Message | String | 請求成功 | 狀態碼的描述 |
BizId | String | 134523^4351232 | 發送回執ID,可根據該ID查詢具體的發送狀態 |
SDK下載
執行:
安裝依賴:進入根目錄執行命令: python setup.py install #如果為python3,請執行:python3 setup.py install
修改信息:從阿里云控制臺上獲取ACCESS_KEY_ID與ACCESS_KEY_SECRET,并填入文件const.py中
運行程序:python demo_sms_send.py #如果為python3,請執行python3 demo_sms_send.py
pip install aliyun-python-sdk-core-v3==2.8.6,2.9版本的region_provider沒有add_endpoint屬性
注意:您還需要在控制臺上申請短信模板,并將相關信息填入至文件demo_sms_send.py中
錯誤碼列表Code | 描述 |
---|---|
OK | 請求成功 |
isp.RAM_PERMISSION_DENY | RAM權限DENY |
isv.OUT_OF_SERVICE | 業務停機 |
isv.PRODUCT_UN_SUBSCRIPT | 未開通云通信產品的阿里云客戶 |
isv.PRODUCT_UNSUBSCRIBE | 產品未開通 |
isv.ACCOUNT_NOT_EXISTS | 賬戶不存在 |
isv.ACCOUNT_ABNORMAL | 賬戶異常 |
isv.SMS_TEMPLATE_ILLEGAL | 短信模板不合法 |
isv.SMS_SIGNATURE_ILLEGAL | 短信簽名不合法 |
isv.INVALID_PARAMETERS | 參數異常 |
isp.SYSTEM_ERROR | 系統錯誤 |
isv.MOBILE_NUMBER_ILLEGAL | 非法手機號 |
isv.MOBILE_COUNT_OVER_LIMIT | 手機號碼數量超過限制 |
isv.TEMPLATE_MISSING_PARAMETERS | 模板缺少變量 |
isv.BUSINESS_LIMIT_CONTROL | 業務限流 |
isv.INVALID_JSON_PARAM | JSON參數不合法,只接受字符串值 |
isv.BLACK_KEY_CONTROL_LIMIT | 黑名單管控 |
isv.PARAM_LENGTH_LIMIT | 參數超出長度限制 |
isv.PARAM_NOT_SUPPORT_URL | 不支持URL |
isv.AMOUNT_NOT_ENOUGH | 賬戶余額不足 |
注:查詢所有錯誤碼及解決辦法請點擊短信接口調用錯誤碼
4.短信發送demo# -*- coding: utf-8 -*- # import sys from aliyunsdkdysmsapi.request.v20170525 import SendSmsRequest from aliyunsdkdysmsapi.request.v20170525 import QuerySendDetailsRequest from aliyunsdkcore.client import AcsClient import uuid from aliyunsdkcore.profile import region_provider from aliyunsdkcore.http import method_type as MT from aliyunsdkcore.http import format_type as FT import const """ 短信業務調用接口示例,版本號:v20170525 Created on 2017-06-12 """ # 這里setdefaultencoding為utf8設置默認編碼為utf-8,但是現在可能由于版本原因會出錯 # try: # reload(sys) # sys.setdefaultencoding("utf8") # except NameError: # pass # except Exception as err: # raise err # 注意:不要更改 REGION = "cn-hangzhou" PRODUCT_NAME = "Dysmsapi" DOMAIN = "dysmsapi.aliyuncs.com" #ACCESS_KEY_ID 和ACCESS_KEY_SECRET要傳入 acs_client = AcsClient(ACCESS_KEY_ID, ACCESS_KEY_SECRET, REGION) region_provider.add_endpoint(PRODUCT_NAME, REGION, DOMAIN) #這里寫入自己的簽名和模板,后面調用就不用寫了 def send_sms(business_id, phone_numbers,template_param=None,sign_name="***",template_code="***"): smsRequest = SendSmsRequest.SendSmsRequest() # 申請的短信模板編碼,必填 smsRequest.set_TemplateCode(template_code) # 短信模板變量參數 if template_param is not None: smsRequest.set_TemplateParam(template_param) # 設置業務請求流水號,必填。 smsRequest.set_OutId(business_id) # 短信簽名 smsRequest.set_SignName(sign_name) # 數據提交方式 # smsRequest.set_method(MT.POST) # 數據提交格式 # smsRequest.set_accept_format(FT.JSON) # 短信發送的號碼列表,必填。 smsRequest.set_PhoneNumbers(phone_numbers) # 調用短信發送接口,返回json smsResponse = acs_client.do_action_with_exception(smsRequest) # TODO 業務處理 return smsResponse if __name__ == "__main__": __business_id = uuid.uuid1() #print(__business_id) params = "{"code":"12345","product":"云通信"}" #params = u"{"name":"wqb","code":"12345678","address":"bz","phone":"13000000000"}" print(send_sms(__business_id, "13000000000", params)) 阿里短信發送短信時返回這個信息,之前是可以發送的,現在阿里應該是做了限制的。如果你的短信模板類型為“驗證碼”,發送的短信內容只能是包含字母和數字 所以當你的短信內容包含特殊符號和中文時,請把短信模板類型修改為“通知”,這里只能新增一個模板了,因為短信模板目前沒有修改。5.接口的調用
class SmsCodeViewset(mixins.CreateModelMixin,viewsets.GenericViewSet): """ 手機驗證碼 """ serializer_class = SmsSerializer def generate_code(self): """ 生成四位數字的驗證碼 """ str1 = "" for i in range(4): str1 += str(random.randint(0,9)) return str1 def create(self, request, *args, **kwargs): serializer = self.get_serializer(data=request.data) # 驗證合法 serializer.is_valid(raise_exception=True) mobile = serializer.validated_data["mobile"] code = self.generate_code() params = {"code":code} sms_status = demo_sms_send.send_sms(uuid.uuid1(),mobile,params) #字節轉字符串 sms_status = sms_status.decode() #字符串轉字典 sms_status = eval(sms_status) if sms_status["Code"] != "OK": return Response({ "mobile": sms_status["Message"] }, status=status.HTTP_400_BAD_REQUEST) else: code_record = VerifyCode(code=code, mobile=mobile) code_record.save() return Response({ "mobile": mobile }, status=status.HTTP_201_CREATED)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42272.html
摘要:了解更多場景如何玩如何將變現請下載阿里云免費下載用到的阿里云提供的語音服務短信服務郵件服務等。只需開通郵件推送服務,調用,就可以快速將郵件通知給多達人。 摘要: 釘釘是企業IM市場上的領先者,深受中小企業客戶的喜歡,就再幾天前剛剛宣布用戶數超過1億!在釘釘里面有個特別實用的功能,那就是Ding一下,如果你發的消息特別緊急,可以直接通過短信、電話等方式直接通知到接收人的手機上。 點此查看...
摘要:一安裝拓展地址二拓展配置阿里云阿里云三實現短信發送單條短信發送單條發送短信簽名短信簽名短信模板編號短信接收者模板變量發送短信流水號,選填多條短信發送批量發送簽名手機號模板字段數組長度必須相等短信簽名短信簽名短信簽名短信模板編號 一:安裝saviorlv/yii2-dysms拓展 composer地址:https://packagist.org/package... composer r...
摘要:今天快哥帶大家來看下阿里云的云通信產品,和域名與網站產品一樣,也是老樹開新花。云通信產品主要包括短信服務語音服務流量服務消息服務郵件推送。手機對手機的模式,在實時通訊軟件中已經幫我們解決了,并不在阿里云通信產品中。今天快哥帶大家來看下阿里云的云通信產品,和域名與網站產品一樣,也是老樹開新花??旄缈破胀瓯WC你能了解掌握,也是以后和別人討論的素材。?云通信產品是之前運營商的產品,現在被阿里、騰訊...
閱讀 897·2019-08-30 15:54
閱讀 1466·2019-08-30 15:54
閱讀 2399·2019-08-29 16:25
閱讀 1291·2019-08-29 15:24
閱讀 748·2019-08-29 12:11
閱讀 2505·2019-08-26 10:43
閱讀 1226·2019-08-26 10:40
閱讀 464·2019-08-23 16:24