




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
华为云商店华为云商店5G消息基础版(短信)用户手册-5G消息云服务目录文档版本文档版本01(2023-11-30)PAGE\*roman华为云商店5G消息基础版(短信)用户手册消息云服务文档版本 01发布日期 2023-11-30目录产品介绍 1产品概述 1短信内容长度计算规则 1短信禁封规则 2功能更新说明 3快速入门 4用户指南 6企业账号认证 6查看总览信息 8快速引导 9申请短信签名 9申请短信模板 11产品购买 14开通接入 16群发助手 17剩余短信明细 20发送量统计 20发送详情 21审核规范 22签名审核规范 22模板审核规范 24开发指南 26开发准备 26API样例代码 27Java 274.2.2C# 35PHP 39NodeJs 42Python 44API错误码 46API错误码1. 46API错误码2. 120API错误码3. 199API参考 2685.1概述 268发送短信 268推送上行短信 272推送状态报告 2745.5附录 2755.5.1结果码 276状态报告状态码描述 276NamedPatameter对象定义 276短信下发消息体MtSmsMessage 277短信下发响应对象MtSmsMessageRsp 2786279产品咨询类 2795G消息基础版购买/退订 280授权书填写规范 281调用API发送短信 281短信发送详情 283常见错误码处理参考 283华为云商店华为云商店5G消息基础版(短信)用户手册-5G消息云服务1产品介绍文档版本文档版本01(2023-11-30)PAGE1产品介绍产品概述5G消息基础版(短信)是为企业用户提供的通信服务。全面覆盖国内三大运营商,支持验证码短信、通知短信及会员营销短信,其中验证码短信能实现秒级触达,99.9%到达率,100%实发率,接入便捷,稳定可靠。本帮助文档所提到的短消息服务即5G消息基础版(短信)。短信内容长度计算规则语言长度计算规则纯英文短信短信字数<=140个字数,按照140数一条短信计算。短信字数>140按照134个字数记为一条短信计算。其他语种短信短信字数<=70个字数,按照70一条短信计算。短信字数>70按照67个字数记为一条短信计算。说明若短信有签名,统计短信长度时包含短信签名,如:短信签名为“【华为云】”,按5数计算。${NUM_8}”,取值为“123456”,则按6个字数计算。中文/其他语种短信中小数点、字母、汉字、空格以及其他符号均按照一个中文/信字数进行统计。单条长短信最大支持发送500个字数,国内短信500字数自动拆分为8条短信。和计费。示例:以中文短信为例,短信字数为68,按1条短信计算;短信字数为134,按2条短信计算;短信字数为135,按3条短信计算。短信禁封规则短信服务会针对用户发送的短信内容进行审核,防范在短信中出现违反国家法律法规要求的相关内容。发现违反规定的短信内容,会对用户进行违规处罚,包括提醒、警告、暂停账号、封号(且不再开通)等。违规行为界定
违规定级:一般下发短信中不含有签名,或与报备签名不符合。非实时发送的业务,在每天21:00至次日8:00时间段内发送,且大于100条。违规定级:严重会员类信息,但未提供明确退订方式。向用户提供行业短信服务前未经用户确认同意接受。下发短信内容和报备内容不符(报备时的内容不符)。用行业通道发送推广短信内容(推广内容)。每月累计3次发生一般违规行为。月投诉率达到百万分之0.25,但未达到百万分之0.4。违规定级:重大用户明确表示退订某业务,但仍然发送到用户侧。每月累计3次发生严重违规行为。月投诉率达到百万分之0.4。违规定级:特别重大用户投诉到工信部12321且短信内容涉及以下信息:毒品、众筹、慈善募理财、赌博、中奖、一元夺宝、一元秒杀、A货、医疗、整形、美容、会所、酒吧、足浴、暴力、恐吓、色情、皮草、助考,商标注册、加群、加QQ或者加微信、贩卖个人信息、宣传短信通道、游戏推广、会展推广、网站推广、优惠券类推广、卡类推广、保险推广、酒类、用户拉新、用户召回、运营商相关(营业厅,移动,联通,电信,大王卡,短信群发等)、装修类、赛鸽类、直播类、催缴类不发(水务催缴除外)、邀评价、党政类、营销、流量(运营商)、法律维权、留学移民、抽奖、烟酒、交友、代开发票、代办证件、代缴社保及其他法律法规禁止的内容。违规罚则违规等级处理方式一般提醒沟通,及时修正。严重暂停子账号3天,对业务进行整改,连续3个月发生则关停30天,?}视情况调整商务。违规等级处理方式重大暂停子账号7天,对业务进行整改,连续2个月发生则关停30天,?}视情况调整商务。特别重大必做关停通道处理,同时按5000元/起进行罚款,在付款账单中体现。如造成乙方通道被关停或罚款,乙方有权按照条款7.2要求赔偿。功能更新说明本文介绍了5G消息基础版(短信)的产品新特性和对应的文档动态,新特性将在各个区域(Region)陆续发布,欢迎体验。2022年4月序号功能名称功能描述15G消息基础版(短信)上架支持国内短信套餐包购买华为云商店华为云商店5G消息基础版(短信)用户手册-5G消息云服务2快速入门文档版本文档版本01(2023-11-30)PAGE2快速入门应用场景1:通过API调用发送短信图2-1业务流?{入驻华为云华为云注册入口:点击注册页面企业实名认证:申请短信签名短信签名是指短信发送方的署名,标识发送方的身份。单击查看申请短信签名。申请短信模板短信模板是指短信发送方发送短信时使用的内容模板。单击查看申请短信模板。购买短信服务到华为云云商店购买5G消息基础版套餐包之后,可根据业务需要按需使用短信。开通接入购买短信套餐包后,进入开通接入页面,详情请参见开通接入。发送短信通过API调用进行短消息发送。根据是否收到状态报告判断短信发送是否成功。查看短信发送状态用户可以在控制台界面,申请状态报告接收,查看短信发送的状态。业务统计用户可以在控制台界面,查看剩余短信明细、发送量统计信息。应用场景2:通过群发助手发送短信图2-2业务流?{入驻华为云华为云注册入口:点击注册页面企业实名认证:申请短信签名短信签名是指短信发送方的署名,标识发送方的身份。单击查看申请短信签名。申请短信模板短信模板是指短信发送方发送短信时使用的内容模板。单击查看申请短信模板。购买短信服务到华为云云商店购买5G消息基础版套餐包之后,可根据业务需要按需使用短信。开通接入购买短信套餐包后,进入开通接入页面,详情请参见开通接入。群发助手群发助手是指通过控制台选择短信签名和短信模板创建群发任务,在指定的时间对指定的手机号码下发短信。使用方法可参见群发助手。注:群发助手支持“验证码/通知”和“营销推广”类型短信发送。查看发送状态通过“群发助手”进行短信群发,用户可以在控制台界面,查看群发任务的号码数量、任务状态等信息。业务统计用户可以在控制台界面,查看剩余短信明细、发送量统计信息。华为云商店华为云商店5G消息基础版(短信)用户手册-5G消息云服务3用户指南文档版本文档版本01(2023-11-30)PAGE3用户指南企业账号认证/shortmessage。输入华为云账号和密码,单击“登录”。注册华为云?}实名认证如果您已有一个华为云帐户,请跳到下一个任务。如果您还没有华为云帐户,请参考以下步骤创建。打开华为云网站单击“注册”,根据提示信息完成注册。注册成功后,系统会自动跳转至您的个人信息界面。企业帐号实名认证请参考:企业账号认证绑定注册邮箱。选择账号名,单击“基本信息”。单击“修改”,修改注册邮箱。单击“立即验证”。单击“获取短信验证码”,输入后,单击“下一步”。输入“绑定邮箱”,单击“获取邮箱验证码”。输入“邮箱验证码”,单击“确定”,完成邮箱注册。查看总览信息简介服务总览页面会提供快捷操作入口等信息,若已购买短信套餐包,会展示短信统计数据信息。若没有购买,则会展示新手引导。详细操作详细操作如下:进入5G消息基础版控制台,单击“总览”可查看整体信息。成功量和未发送成功量。快捷操作的“添加签名”及“添加模板”可进入对应的原添加。快速引导/shortmessage。输入华为云账号和密码,单击“登录”。单击菜单栏“快速引导”,可了解短信服务的整体流?{。说明发送短信支持两种方式,请根据实际情况选择:通过API调用发送短信:具有开发能力的客户通过调用API发送短信。通过群发助手发送短信:无需开发,直接发送短信。申请短信签名短信签名简介
短信签名是根据用户身份来创建的符合自身属性的签名信息,一般建议将签名设置为账号主体所在机构的全称或简称。当发送短信时,短信平台会根据设置,在短信内容里附加个性签名,再发送给指定手机号码。例如,手机终端收到的短信为“【华为云】您的验证码为:123456(5分钟内有效),为了保证您的账户安全,请勿向任何人提供此验证码”,其中,“【华为云】”为短信签名。详细操作
详细步骤如下:进入短消息控制台,选择“国内短信>短信签名”,进入短信签名页面。看短信签名信息。单条添加短信签名。单击“单条添加”按钮,进入添加签名页面。根据实际情况填写后,单击“提交”,完成短信签名创建。批量导入短信签名。单击“批量导入”按钮,选择本地短信签名文件上传,单击“短信签名”,可下载短信签名附件,请严格按照模板要求填写,单击“提交”,完成批量上传短信签名。签名创建后需要审核通过才可以使用,短信签名审核标准请参见签名审核规范。工作日提交申请,预计2小时内完成审核,法定节假日顺延,请耐心等待。签名创建后,可以在短信签名“审批状态”中查看审核状态,不同状态下的签名支持不同的操作:审批中:不可修改,不可删除。已通过:不可修改,可以删除。未通过:可以修改,可以删除。说明签名来源:如果网站、App站、App、小?{序或公众号上线之后,再申请签名提交审核。可添加的签名数量无限制。申请短信模板简介短信模板是具体发送的短信内容,由纯固定文本或固定文本加变量组成。制化。的模板,然后组合成最终短信内容。例如,【华为云】您的验证码为:{code}(5分钟内有效),为了保证您的账户安全,请勿向任何人提供此验证码。短信签名为:【华为云】短信模板为:您的验证码为:{code}(5分钟内有效),为了保证您的账户安全,请勿向任何人提供此验证码。模板变量为:{code}手机终端收到的短信为:【华为云】您的验证码为:123456(5分钟内有效),为了保证您的账户安全,请勿向任何人提供此验证码。详细操作
详细步骤如下:进入短消息控制台,选择“国内短信>短信模板”,进入短信模板页面。“查询”,可以查看短信模板信息。说明单击“导出”,可将查询到的短信模板导出到本地保存查看。单条添加短信模板。单击“单条添加”按钮,进入添加模板页面。根据实际情况填写后,单击“提交”,完成短信模板创建。说明单击“常用模板库”,可查看?}使用不同模板类型的常用模板内容。可添加的模板数量无限制。批量导入短信模板。严格按照模板要求填写?}上传。单击“提交”,完成短信模板的批量导入。模板创建后需要审核通过才可以使用,短信模板审核标准请参见模板审核规范工作日提交申请,预计2小时内完成审核,法定节假日顺延,请耐心等待。模板创建后,可以在短信模板“审批状态”中查看审核状态,不同状态下的模板支持不同的操作:
审批中:不可修改,不可删除。已通过:不可修改,可以删除。未通过:可以修改,可以删除。前提条件
已完成企业账号认证?}绑定邮箱。具体操作请参见企业账号认证。操作步骤步骤1登录华为云。进入华为云官网。华为云官网地?}:/单击页面右上角的“登录”,进入登录页面。图3-1登录页面输入已注册?}开通华为云的华为账号、帐号密码,单击“登录”。说明若您需要使用其他方式登录华为云,请参考登录华为云。步骤2购买5G消息云服务-基础版。在页面顶端搜索栏搜索您需要购买的产品:5G消息云服务。单击产品名称,进入详情页面。查看产品信息,选择需要购买产品的规格。 注意注意:套数和购买时长必须选1,“自动续费”不可勾选。单击“立即购买”,进入购买页面。核对订单详情,填写订单推荐的经销商账号或者客户经理账号(如涉及),“协议及授权”,单击“去支付”。待经销商/客户经理改价后确认付款,付款成功即完成产品购买流?{。购买成功的产品可在已购买的服务中查看。结束开通接入简介我们提供多个短信发送API接口,可以快捷接入自建系统,迅速完成短信发送任务,实现本地业务和短信业务的一体化。调用API发送前,需要先开通相关接入信息。详细操作
详细操作步骤如下:进入短消息通信控制台,选择“国内短信>开通接入”,进入开通接入页面。根据界面提示完成参数填写。说明接入信息由平台自动分配,仅支持查看,不支持修改。“协议类型”默认选中“HTTPS”。“?}发数”默认为100。参数填写说明如下表所示。参数说明协议类型协议类型。请根据实际情况进行选择。包含如下:CMPP2.0CMPP3.0SMGP3.0SGIP1.2HTTPS(含群发助手接入)可扩展位数接入号可扩展位数。说明扩展位数不超过8位。?}发数短信提交?}发数,默认为100,单位:条每秒。请根据实际情况进行填写。群发助手根据企业需求,不需要开发,用户可以使用群发助手功能。前提条件操作步骤
已开通国内短信服务。请参见产品购买和开通接入。进入短消息控制台,选择“国内短信>持任务列表查询、添加发送任务、详情查看、撤销、删除、导出。图3-2群发助手图3-3添加发送任务参数说明任务名称必填,手动输入,参数说明任务名称必填,手动输入,长度<=30个字符。短信签名根据实际情况选择已申请的短信签名。说明必填,选择下拉框中客户报备已通过的签名列表。若无需要的签名,可参考申请短信签名进行申请。短信模板短信模板包括验证码/选择。说明若无需要的模板,可参考申请短信模板进行申请。参数说明导入接收号码文件文件模板可根据界面提示进行下载。模板中,“接收号码”表示接收方手机号,文件名只能包含数字字母中文。导入接收号码文件请上传xlsx格式,严格遵守样例文件格式填写;Excel文件个数不可超过5个,单个文件导入号码不超过5000个;若选择的是带变量参数的短信模板,仅支持上传文件的方式导入号码;若上传文件中有重复号码,系统自动去重,仅以第一条数据为准。手动输入接收号码直接输入手机号,例如:138111XXXX1;输入手机号敲击回车键确定,一行视为一个号码;手动输入最多支持100个号码,大批量号码建议通过文件导入形式提交;若输入手机号有重复号码,系统自动去重,仅以第一条数据为准。设置发送时间发送时间。如需撤销,请在发送时间前5分钟操作。国内消息只能设置为在三天内发送任务。单击“提交发送任务”。界面自动跳转“群发助手”界面。任务状态:显示该任务的发送状态。说明状态为“发送中”,用户可进行查看操作。状态为“待发送”,用户可进行撤销和查看操作。状态为“已撤销”,用户可进行查看和删除操作。状态为“发送完毕”,用户可进行查看操作。单击“查看”,可查看任务发送详情。图3-4任务发送详情剩余短信明细简介用户查看剩余短信明细,方便决策何时订购新的短信包。操作步骤操作步骤如下:进入短消息控制台,选择“业务统计>剩余短信明细”。余短信条数。服务。发送量统计简介用户查看发送量统计报表,可以对发送业务进行分析。号码在发送记录查询进行查看;发送统计分析中,发送条数就是计费条数,例如一条短信条数73条,实际计费条数是2条,在发送统计分析中显示为2条;发送量统计报表,每天凌晨3点进行更新,当天发送总条数要等第二天三点后查询为准,由于状态报告时72小时内返回,当天成功总数在第四天三点后为准。操作步骤
进入短消息控制台,选择“业务统计>发送量统计”,进入发送量统计页面。短信发送总条数、成功条数、失败条数及发送成功率。发送详情简介用户查看发送详情,方便了解短信发送的结果,包括未成功发送短信的明细以及失败原因。操作步骤
进入短消息控制台,选择“业务统计>发送详情”,进入发送详情页面。下发记录。单击“申请导出”,可以提交申请将查询到的发送记录导出。说明导出申请提交后,需要到“导出记录”页签查看导出结果。请结果。“下载”,可将导出结果的Excel表下载到本地进行查看。审核规范签名审核规范格式限制
签名名称不能含有黄赌毒及其他违反法律规定的信息;签名不支持中性化签名,需能辨别所属公司或公司归属的网站、产品、APP;国内短信签名由【】及签名名称组成,签名名称要求2~12个字(数字、字母,不能为纯数字,国内短信签名名称尽量使用中文);RTC001”和“rtc001称;申请短信签名时只需要提交签名名称。审核规则
由于短信签名需要在运营商备案,需要您提供企业的营业执照正本或副本复印件(要加盖企业公章),没有涉及第三方权益签名不需要上传授权委托书,如果第三方短信签名侵犯到第三方权益须获第三方的真实授权,查看第三方权益介绍(不需要)。签名来源不同,需要提供的申请材料也不同,查看签名申请材料。第三方权益
概念介绍如果A公司申请签名,签名归属主体属于A,则不涉及第三方权益;如果A公司替B公司申请签名,签名归属主体属于B,则涉及第三方权益且需要B公司给与A公司的授权委托书。功能优势加入第三方权益介绍的概念是为了简化签名申请的流?{,对于不涉及第三方权益可以直接申请签名,只需上传企事业单位的营业执照,对于涉及第三方权益需要上传企事业单位的企业营业执照和企事业单位的授权委托书。签名申请材料签名来源是否涉及第三方权益申请要求企事业单位的全称或简称否上传企事业单位的营业执照是上传签名归属方企事业单位的营业执照和授权委托书签名来源是否涉及第三方权益申请要求工信部备案网站的全称或简称否上传企事业单位的营业执照;输入工信部备案网站域名,如查询入口:/(选择“公共查询”)是上传签名归属方企事业单位的营业执照和授权委托书;输入工信部备案网站域名,如查询入口:http:///(选择“公共查询”)APP应用的全称或简称否上传企事业单位的营业执照必须备注提供任一应用商店的下载链接是上传签名归属方企事业单位的营业执照和授权委托书必须备注提供任一应用商店的下载链接微信公众号或小?{序的全称或简称否上传企事业单位的营业执照如需查看公众号或小?{序签名归属与账号主体是否一致,请打开微信-搜索-公众号/小?{序-点击右上角更多资料查看相关信息。是上传签名归属方企事业单位的营业执照和授权委托书如需查看公众号或小?{序签名归属与账号主体是否一致,请打开微信-搜索-公众号/小?{序-点击右上角更多资料查看相关信息。电商平台店铺名的全称或简称否上传企事业单位的营业执照如需查看电商平台店铺签名归属与账号主体是否一致,请打开电商平台-搜索店铺-左上角店铺名称营业执照查看信息真实性。是上传签名归属方企事业单位的营业执照和授权委托书如需查看电商平台店铺签名归属与账号主体是否一致,请打开电商平台-搜索店铺-左上角店铺名称-营业执照查看信息真实性。商标名的全称或简称否上传企事业单位的营业执照如需查看签名归属商标申请人与账号主体是否一致,请前往中国商标网查看相关信息真实性。是上传签名归属方企事业单位的营业执照和授权委托书如需查看签名归属商标申请人与账号主体是否一致,请前往中国商标网查看相关信息真实性。模板审核规范模板格式规范
模板内容由纯固定文本组成。短信模板样例:尊敬的用户,您的初始密码为123456。请于1月1日15:00前领取您的快递。短信格式规范推广短信内容需要添加退订方式,退订格式为“拒收请回复R”,其余格式不支持。不支持如¥、★等特殊符号,以及通过按键输入的组合型特殊符号,如^_^、&、√、※。验证码短信和通知短信内容规范行业通道只能发送验证码短信和通知短信。验证码模板内容必须含有验证码,注册码,校验码,动态码这4个词其中之一。不支持金融、游戏、教育、房地产行业的验证码、通知短信发送。禁止发送涉及以下行业的短信:毒品、赌博、色情、党政类、众筹、慈善募捐、宗教、迷信、股票、移民、面试招聘、彩票、赛鸽类、返利、贷款、催款催缴、投资理财、中奖、抽奖、一元夺宝、一元秒杀、A酒吧、足浴、暴力、恐吓、皮草、助考、商标注册、加群、加QQ微信等私人联系方式、贩卖个人信息、同行、会展、卡类推广、保险、烟酒类、用户拉新、用户召回、运营商相关(营业厅,移动,联通,电信,大王卡,流量等)、运营商禁止发送的信息、违反广告法用语、殡葬、刷单、做任务、空包网、邀请好评、转店类、众包业务、装修建材类、直播类、营销、法律维权、交友、婚恋、代开发票、代办证件、代缴社保、POS机、积分兑换及其他法律法规禁止的内容。不允许发送未经许可的邀请,主要指邀请注册、邀请成为会员等行为。句不通顺、非常用的表达法等。涉及实时发送的短信,建议提前加模板,以免造成延迟(信息等)。 注意内容规范可能随运营商规则变化实时调整,以最终内容审核结果为准。推广短信内容规范推广短信模板内容不支持变量。不支持给非会员用户发送推广短信。推广短信发送时间为每日8:00-21:00,尽量避免夜间发送。禁止发送涉及以下行业的短信:不支持教育、留学移民、房地产、金融类、医疗、游戏相关内容的发送。禁止发送涉及以下行业的短信:毒品、赌博、色情、众筹、慈善募捐、宗投资理财、中奖、抽奖、一元夺宝、一元秒杀、医疗、整形、美容、会所、酒吧、足浴、暴力、恐吓、皮草、助考、商标注册、二类电商、加群、加QQ或微信等私人联系方式、贩卖个人信息、同行、招商加盟类、运营商相关(营业厅,移动,联通,电信,大王卡等)、展会、团购、运营商禁止发送的信息、网站推广、优惠券类推广、卡类推广、保险、烟酒类、流量推广、捐款献血、用户拉沙发翻新、高仿A货、功效类产品、内容不雅、建材家私、交友、婚恋、带有威胁性质、工商代办、代开发票、买卖黑车、非法钓鱼、招商加盟、知识产权、POS机、积分兑换及其他违反法律法规的内容。不允许发送未经许可的邀请,主要指邀请注册、邀请成为会员等行为。字、语句不通顺、非常用的表达法等。求,加强自身业务安全,健康发送短信。 注意内容规范可能随运营商规则变化实时调整,以最终内容审核结果为准。华为云商店华为云商店5G消息基础版(短信)用户手册-5G消息云服务4开发指南文档版本文档版本01(2023-11-30)PAGE4开发指南开发准备开发流?{主要进行下述操作:参考开发准备,获取调用短消息API的关联数据。参考API样例代码,进行短消息发送。根据请求响应消息,判断请求是否成功。说明数据准备
若请求失败,请参考API参考进行修正,?}重新执行2。根据短信发送请求,判断是否存在状态报告回调地?}。根据状态报告通知,判断短消息是否发送成功。参数名取值样例描述信息APP接入地?}https://{domain}/common/sms/sendTemplateMessage用户发送短信消息的APP接入地?}。模板ID8ff55eac1d0b478ab3c06c3c6a492300模板ID。可通过登录管理控制台,从“消息服务>短信模板”页面获取。访问URIhttps://{domain}/common/sms/sendTemplateMessage用户发送短信消息的URI。accountZhike下发账号。请根据实际情况进行填写。passwordZhike_123账号明文密码。请根据实际情况进行填写。API样例代码Java说明发送短信
本文档所述Demo关法律采取足够的措施,以确保用户的个人数据受到充分的保护。Demo仅用于功能演示,不允许客户直接进行商业使用。本文档信息仅供参考,不构成任何要约或承诺。packagesms;packagesms;importcom.fasterxml.jackson.databind.ObjectMapper;importjava.io.BufferedReader;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.io.OutputStreamWriter;importjava.io.PrintWriter;import.URL;importjava.security.cert.CertificateException;importjava.security.cert.X509Certificate;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjava.util.HashMap;importjava.util.List;importjava.util.Map;import.ssl.HostnameVerifier;import.ssl.HttpsURLConnection;import.ssl.SSLContext;import.ssl.SSLSession;import.ssl.TrustManager;import.ssl.X509TrustManager;//IftheJDKversionisearlierthan1.8,usethethird-partylibrarytoprovidetheBase64class.publicclassSendSms{/***设置不验证主机*/privatestaticfinalHostnameVerifierDO_NOT_VERIFY=newHostnameVerifier(){@Overridepublicbooleanverify(Stringhostname,SSLSessionsession){returntrue;}};publicstaticvoidmain(String[]args)throwsException{//APP接入地?}+接口访问URI,IP:Port表示5G消息基础版服务的IP和端口号,IP和端口信息在申请开通接入完成后会自动分配,可在控制台-国内短信-开通接入页面进行查看。Stringurl="https://ip:port/common/sms/sendTemplateMessage";String[]msisdn={"8612345678911","8612345678912"};//手机号,支持传入多个,需要list格式,若只需传入1个,格式为:{"8612345678911"}StringsmsTemplateId="SMS_2003240016";//模板编号//当发送短信使用的是无变量模板时,不需要templateParas对象,请删除该对象。Map<String,String>templateParas=newHashMap<String,String>();//当发送短信使用的是带变量的模板时,需要配置本行代码。VarName表示模板中变量的参数名称,VarValue表示该变量实际要配置的参数值,请按照实际情况配置VarName和VarValue。若需要配置多个变量,请参考本行代码格式进行添加。templateParas.put("VarName","VarValue");Stringaccout="account";//实际账号Stringpassward="passward";//实际密码//Iftherequestbodydoesnotcontainthesignaturename,setsignaturetonull.Map<String,Object>body=buildRequestBody(msisdn,smsTemplateId,templateParas,accout,passward);if(null==body||body.isEmpty()){System.out.println("bodyisnull.");return;}HttpsURLConnectionconnection=null;InputStreamis=null;BufferedReaderbr=null;trustAllHttpsCertificates();try{URLrealUrl=newURL(url);URLrealUrl=newURL(url);connection=(HttpsURLConnection)realUrl.openConnection();connection.setHostnameVerifier(DO_NOT_VERIFY);connection.setDoInput(true);//设置可输入connection.setDoOutput(true);//设置该连接是可以输出的connection.setRequestMethod("POST");//设置请求方式connection.setRequestProperty("Content-Type","application/json;charset=UTF-8");//connection.connect();ObjectMapperobjectMapper=newObjectMapper();PrintWriterpw=newPrintWriter(newOutputStreamWriter(connection.getOutputStream(),"UTF-8"));pw.flush();pw.close();br=newBufferedReader(newInputStreamReader(connection.getInputStream(),"utf-8"));intstatus=connection.getResponseCode();if(200==status){//200is=connection.getInputStream();}else{//400/401is=connection.getErrorStream();}br=newBufferedReader(newInputStreamReader(is,"UTF-8"));Stringline=null;StringBuilderresult=newStringBuilder();while((line=br.readLine())!=null){//读取数据result.append(line+"\n");}connection.disconnect();System.out.println(result.toString());}catch(Exceptione){e.printStackTrace();}finally{try{if(null!=is){is.close();}if(null!=br){br.close();}}catch(Exceptione){e.printStackTrace();}}}//msisdn,smsTemplateId,paramValues,countryIDpublicstaticMap<String,Object>buildRequestBody(Stringmsisdn,StringsmsTemplateId,Map<String,String>paramValues,Stringaccout,Stringpassward){if(null==msisdn||null==smsTemplateId||null==accout||null==passward){System.out.println("buildRequestBody():mobiles,templateIdortemplateParasoraccountorpasswordisnull.");returnnull;}List<String>mobiles=newArrayList<String>();//多个手机号参数for(Stringmobile:msisdn){mobiles.add(mobile);}Map<String,Object>map=newHashMap<String,Object>();List<MtSmsMessage>requestLists=newArrayList<MtSmsMessage>();MtSmsMessagemtSmsMessage=newMtSmsMessage();List<String>mobiles=newArrayList<String>();mobiles.add(msisdn);mtSmsMessage.setMobiles(mobiles);mtSmsMessage.setTemplateId(smsTemplateId);mobiles.add(msisdn);mtSmsMessage.setMobiles(mobiles);mtSmsMessage.setTemplateId(smsTemplateId);//当发送短信使用的是无变量模板时,不需要给TemplateParas对象赋值。mtSmsMessage.setTemplateParas(paramValues);mtSmsMessage.setSignature("【华为云】");//短信签名requestLists.add(mtSmsMessage);map.put("account",accout);map.put("password",passward);map.put("requestLists",requestLists);returnmap;}publicstaticclassMtSmsMessage{List<String>mobiles;StringtemplateId;Map<String,String>templateParas;Stringsignature;StringmessageId;StringextCode;List<NamedPatameter>extendInfos;/**返回mobiles*@returnmobiles值*/publicList<String>getMobiles(){returnmobiles;}/**对mobiles进行赋值*@parammobilesmobiles值*/publicvoidsetMobiles(List<String>mobiles){this.mobiles=mobiles;}/**返回templateId*@returntemplateId值*/publicStringgetTemplateId(){returntemplateId;}/**对templateId进行赋值*@param@paramtemplateIdtemplateId值*/publicvoidsetTemplateId(StringtemplateId){this.templateId=templateId;}/**返回templateParas*@returntemplateParas值*/publicMap<String,String>getTemplateParas(){returntemplateParas;}/**对templateParas进行赋值*@paramtemplateParastemplateParas值*/publicvoidsetTemplateParas(Map<String,String>templateParas){this.templateParas=templateParas;}/**返回signature*@returnsignature值*/publicStringgetSignature(){returnsignature;}/**对signature进行赋值*@paramsignaturesignature值*/publicvoidsetSignature(Stringsignature){this.signature=signature;}/**返回messageId*@returnmessageId值*/publicStringgetMessageId(){returnmessageId;}/**对messageId进行赋值*@parammessageIdmessageId值*/publicvoidsetMessageId(StringmessageId){this.messageId=messageId;}/**返回extCode**@returnextCode值*/publicStringgetExtCode(){returnextCode;}/**对extCode进行赋值*@paramextCodeextCode值*/publicvoidsetExtCode(StringextCode){this.extCode=extCode;}/**返回extendInfos*@returnextendInfos值*/publicList<NamedPatameter>getExtendInfos(){returnextendInfos;}/**对extendInfos进行赋值*@paramextendInfosextendInfos值*/publicvoidsetExtendInfos(List<NamedPatameter>extendInfos){this.extendInfos=extendInfos;}}publicclassNamedPatameter{Stringkey;Stringvalue;/**返回key*@returnkey值*/publicStringgetKey(){returnkey;}/**对key进行赋值*@paramkeykey值*/publicvoidsetKey(Stringkey){this.key=key;}/**返回返回value*@returnvalue值*/publicStringgetValue(){returnvalue;}/**对value进行赋值*@paramvaluevalue值*/publicvoidsetValue(Stringvalue){this.value=value;}}staticvoidtrustAllHttpsCertificates()throwsException{TrustManager[]trustAllCerts=newTrustManager[]{newX509TrustManager(){@OverridepublicvoidcheckClientTrusted(X509Certificate[]chain,StringauthType)throwsCertificateException{return;}@OverridepublicvoidcheckServerTrusted(X509Certificate[]chain,StringauthType)throwsCertificateException{return;}@OverridepublicX509Certificate[]getAcceptedIssuers(){returnnull;}}};SSLContextsc=SSLContext.getInstance("TLSv1.2");sc.init(null,trustAllCerts,null);HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());}}importjava.io.UnsupportedEncodingException;import.URLDecoder;importjava.util.HashMap;importjava.util.Map;importjava.io.UnsupportedEncodingException;import.URLDecoder;importjava.util.HashMap;importjava.util.Map;/***上行短信通知短信平台通过客户添加应用时配置的上行短信接收地?}推送上行短信通知给客户*/publicclassSmsUpData{publicstaticvoidmain(String[]args)throwsException{//上行短信通知样例(urlencode)StringupData="mobile=12345678911&content=***&sendTime=20220127020758&extCode=";onSmsUpData(upData);}/**/**解析上行短信通知数据*@paramdata短信平台推送的上行短信通知数据*/staticvoidonSmsUpData(Stringdata){if(null==data||data.isEmpty()){System.out.println("onSmsUpData():dataisnull.");return;}Map<String,String>keyValues=newHashMap<String,String>();try{//解析上行短信通知数据String[]params=URLDecoder.decode(data,"UTF-8").split("&");String[]temp;for(inti=0;i<params.length;i++){temp=params[i].split("=");if(temp.length==2&&null!=temp[1]&&temp[1]!=""){keyValues.put(temp[0],temp[1]);}}/**Example:此处以解析content为例,请按需解析所需参数?}自行实现相关处理*'mobile':上行短信手机号'content':短信内容'sendTime':上行短信时间'extCode':扩展码*/Stringcontent=keyValues.get("content");//上行短信发送的内容System.out.println("Smsupdata.Content:"+content);}catch(UnsupportedEncodingExceptione){e.printStackTrace();}}}importjava.io.UnsupportedEncodingException;import.URLDecoder;importjava.util.HashMap;importjava.util.Map;/***importjava.io.UnsupportedEncodingException;import.URLDecoder;importjava.util.HashMap;importjava.util.Map;/***短信状态报告短信平台收到短信网关的状态报告,或超过72户*/publicclassSmsStatusReport{publicstaticvoidmain(String[]args)throwsException{//短信平台上报状态报告数据样例(urlencode)//Stringsuccess_body="requestId=20220126&mobile=12345678911&messageId=2022012619403400&status=DELIVRD&resultCode=000000&resultDesc=success&smsCount=null&receiveTime=null";Stringfailed_body="requestId=20220126&mobile=12345678911&messageId=2022012619403400&status=E200027&resultCode=1020001&resultDesc=Parametererror.&smsCount=null&receiveTime=null";//onSmsStatusReport(success_body);onSmsStatusReport(failed_body);}/**/**解析状态报告数据*@paramdata短信平台上报的状态报告数据*/staticvoidonSmsStatusReport(Stringdata){if(null==data||data.isEmpty()){System.out.println("onSmsStatusReport():dataisnull.");return;}Map<String,String>keyValues=newHashMap<String,String>();try{//解析状态报告数据String[]params=URLDecoder.decode(data,"UTF-8").split("&");String[]temp;for(inti=0;i<params.length;i++){temp=params[i].split("=");if(temp.length==2&&null!=temp[1]&&temp[1]!=""){keyValues.put(temp[0],temp[1]);}}/**Example:此处以解析status为例,请按需解析所需参数?}自行实现相关处理*'messageId':短信唯一标识'smsCount':长短信拆分条数'receiveTime':资源更新时间'status':状态码*/Stringstatus=keyValues.get("status");//状态报告枚举值//通过status判断短信是否发送成功if("DELIVRD".equalsIgnoreCase(status)){System.out.println("Sendsmssuccess.messageId:"+keyValues.get("messageId"));}else{//发送失败,打印statusSystem.out.println("Sendsmsfailed.messageId:"+keyValues.get("messageId"));System.out.println("Failedstatus:"+status);}}catch(UnsupportedEncodingExceptione){e.printStackTrace();}}}C#说明本文档所述Demo关法律采取足够的措施,以确保用户的个人数据受到充分的保护。本文档所述Demo仅用于功能演示,不允许客户直接进行商业使用。本文档信息仅供参考,不构成任何要约或承诺。usingSystem;usingSystem.Collections;usingSystem.Collections.Generic;usingSystem;usingSystem.Collections;usingSystem.Collections.Generic;usingSystem.IO;usingSystem.Linq;usingSystem.Net;usingSystem.Net.Security;usingSystem.Runtime.Serialization.Formatters.Binary;usingSystem.Security.Cryptography.X509Certificates;usingSystem.Text;usingSystem.Text;usingNewtonsoft.Json;namespacesms{classSendSms{publicclassNamedPatameter{//对key进行赋值publicstringkey{get;set;}//对value进行赋值publicstringvalue{get;set;}}publicclassMtSmsMessage{//对mobiles进行赋值publicList<string>mobiles{get;set;}//对templateId进行赋值publicstringtemplateId{get;set;}//对templateParas进行赋值publicDictionary<string,string>templateParas{get;set;}//对signature进行赋值publicstringsignature{get;set;}//对messageId进行赋值publicstringmessageId{get;set;}//对extCode进行赋值publicstringextCode{get;set;}//对extendInfos进行赋值publicList<NamedPatameter>extendInfos{get;set;}}///<summary>///构建请求参数///</summary>///<paramname="msisdn">手机号,多个以,号分隔</param>///<paramname="smsTemplateId">短信模板id</param>///<paramname="paramValues">键值对map,比如user,email</param>///<paramname="accout">真实账号</param>///<paramname="passward">真实密码</param>///<paramname="signature">短信签名</param>///<returns>返回请求参数体</returns>privatestaticHashtablebuildRequestBody(stringmsisdn,stringsmsTemplateId,Dictionary<string,string>paramValues,stringaccout,stringpassward,stringsignature){if(null==msisdn||null==smsTemplateId||null==accout||null==passward){Console.WriteLine("buildRequestBody():mobiles,templateIdortemplateParasoraccountorpasswordisnull.");returnnull;}Hashtablemap=newHashtable();List<Hashtable>requestLists=newList<Hashtable>();HashtablemtSmsMessage=newHashtable();List<string>mobiles=msisdn.Split(newstring[]{","},StringSplitOptions.RemoveEmptyEntries).Cast<string>().ToList<string>();mtSmsMessage.Add("mobiles",mobiles);mtSmsMessage.Add("templateId",smsTemplateId);//当发送短信使用的是无变量模板时,不需要添加templateParas参数。mtSmsMessage.Add("templateParas",paramValues);mtSmsMessage.Add("signature",signature);requestLists.Add(mtSmsMessage);map.Add("account",accout);map.Add("password",passward);////状态报告通知地?},根据实际情况修改map.Add("statusCallback","https://ip:port/sms/notifySmsMessage");map.Add("requestLists",requestLists);returnmap;}publicstaticvoidMain(string[]args){Dictionary<string,string>templateParas=newDictionary<string,string>();templateParas.Add("user","$user");templateParas.Add("email","$email");//ip:port根据实际情况填写conststringurl="https://ip:port/common/sms/sendTemplateMessage";//手机号,多个手机号以,号分隔conststringmsisdn="12345678911,12345678912,12345678913";//短信模板conststringsmsTemplateId="SMS_2003240016";//实际账号conststringaccout="xxxxxx";//实际密码conststringpassward="xxxxxx";//短信签名conststringsignature="【华为云】";//Iftherequestbodydoesnotcontainthesignaturename,setsignaturetonull.Hashtablepars=buildRequestBody(msisdn,smsTemplateId,templateParas,accout,passward,signature);if(null==pars){Console.WriteLine("bodyisnull.");return;}Post(url,pars);Console.ReadLine();}///<summary>///发起post请求///</summary>///<paramname="url">请求url</param>///<paramname="pars">请求参数</param>///<returns>响应结果</returns>publicstaticstringPost(stringurl,System.Collections.Hashtablepars){HttpWebRequestrequest=null;if(url.Contains("https://")){ServicePointManager.ServerCertificateValidationCallback+=(s,cert,chain,sslPolicyErrors)=>true;ServicePointManager.SecurityProtocol=SecurityProtocolType.Ssl3|SecurityProtocolType.Tls|SecurityProtocolType.Tls11|SecurityProtocolType.Tls12|SecurityProtocolType.Tls13;request=(HttpWebRequest)WebRequest.CreateDefault(newUri(url));}else{request=(HttpWebRequest)WebRequest.Create(url);}request.UserAgent="Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/64.0.3282.167Safari/537.36";request.Method="POST";//post请求方式request.ContentType"application/json";//设置为json串格式request.ProtocolVersion=HttpVersion.Version10;//对参数进行序列化,生成字节流stringbuffer=JsonConvert.SerializeObject(pars);byte[]postmsg=Encoding.UTF8.GetBytes(buffer);//请求响应结果流StreammyResponseStream=request.GetRequestStream();myResponseStream.Write(postmsg,0,postmsg.Length);myResponseStream.Flush();myResponseStream.Write(postmsg,0,postmsg.Length);myResponseStream.Flush();HttpWebResponseresponse=null;StreamReadermyStreamReader=null;stringretString="";try{response=(HttpWebResponse)request.GetResponse();using(myStreamReader=newStreamReader(response.GetResponseStream(),Encoding.UTF8)){retString=myStreamReader.ReadToEnd();Console.WriteLine("result="+retString);}}catch(Exceptione){returne.Message;}finally{if(response!=null){response.Close();}myStreamReader.Close();myResponseStream.Close();if(request!=null){request.Abort();}}returnretString;}//设置对证书进行不校验,绕过https证书publicstaticboolCheckValidationResult(objectsender,X509Certificatecertificate,X509Chainchain,SslPolicyErrorserrors){returntrue;}}}usingSystem;usingusingSystem;usingnamespacemsgsms_csharp_demo{classUpData{staticvoidMain(string[]args){stringupdata="mobile=%2B12345678911&content=***&sendTime=20220127020758&extCode=";onSmsUpData(updata);}///<summary>///解析上行短信通知数据///</summary>///<paramname="data">短信平台推送的上行短信通知数据</param>staticvoidonSmsUpData(stringdata){varkeyValues=HttpUtility.ParseQueryString(data);//解析上行短信通知数据/**Example:此处以解析content为例,请按需解析所需参数?}自行实现相关处理*'mobile':上行短信手机号'content':短信内容'sendTime':上行短信时间'extCode':扩展码*/stringcontent=keyValues.Get("content");//stringcontent=keyValues.Get("content");//上行短信发送的内容Console.WriteLine("Smsupdata.Content:"+content);}}}usingSystem;usingnamespacemsgsms_csharp_demo{usingSystem;usingnamespacemsgsms_csharp_demo{classUpData{staticvoidMain(string[]args){///Stringsuccess_body="requestId=20220126&mobile=12345678911&messageId=2022012619403400&status=DELIVRD&resultCode=000000&resultDesc=success&smsCount=null&receiveTime=null";Stringfailed_body="requestId=20220126&mobile=12345678911&messageId=2022012619403400&status=E200027&resultCode=1020001&resultDesc=Parametererror&smsCount=null&receiveTime=null";///onSmsStatusReport(success_body);onSmsStatusReport(updata);}///<summary>///解析状态报告数据///</summary>///<paramname="data">短信平台上报的状态报告数据</param>staticvoidonSmsStatusReport(stringdata){varkeyValues=HttpUtility.ParseQueryString(data);//解析状态报告数据/**Example:此处以解析status为例,,请按需解析所需参数?}自行实现相关处理*'messageId':短信唯一标识'sms
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2030年中国绿化素市场分析及竞争策略研究报告
- 2025-2030年中国LED封装键合银线市场发展趋势及前景调研分析报告
- 2025年中国硝基彩绘漆数据监测研究报告
- 2025-2030年中国LED车灯行业投资研究及发展前景预测分析报告
- 2025-2030年中国ITO靶材行业运行动向及行业竞争力发展研究报告
- 2025至2031年中国烧结钕硼磁体行业投资前景及策略咨询研究报告
- 营销业务管理与销售技巧提升
- 年度总结中对管理模式的反思计划
- 培养团队协作意识的具体行动计划
- 学校幼儿园教学计划书
- 瓷砖空鼓装修合同协议
- 中职生职业生涯课件
- 2025年浙江省生态环境厅所属事业单位招聘考试备考题库
- 入团考试测试题及答案
- 河南省普通高中2024-2025学年高三下学期学业水平选择性模拟考试(四)历史试题(原卷版+解析版)
- 旅游消费者决策
- 企业员工环保培训
- 2025年河北省唐山市玉田县第三中学中考一模地理试卷(含答案)
- 2025届金丽衢十二校高三语文第二次联考考场高分作文点评:“效率至上”与“深度求索”
- 完形填空 20篇 集训-2025年译林版七年级英语下册寒假预习(含答案)
- 各岗位应知应会“明白卡”(含矿长等)
评论
0/150
提交评论