上一篇
http请求xml发送短信
- 行业动态
- 2025-04-29
- 2502
通过POST请求,设置Content-Type为text/xml,将XML数据作为请求
HTTP请求发送XML短信的流程
准备工作
- 选择短信服务商:如阿里云、酷盾安全、华为云等,注册账号并开通短信服务。
- 获取API权限:获取
AppKey
、AppSecret
或API Key
、Signature
等认证信息。 - 阅读官方文档:确认接口地址、请求方式(POST/GET)、XML模板要求。
构造XML请求报文
短信服务商通常要求严格的XML格式,以下为通用字段示例:
字段名 | 说明 | 示例值 |
---|---|---|
To | 接收手机号 | 13800138000 |
From | 短信签名(需审核) | XX公司 |
TemplateId | 模板ID(需预审核) | SMS_123456 |
Param | 模板参数(JSON格式) | {"code":"1234","time":"5"} |
SignName | 签名名称(部分平台需单独传) | XX科技 |
示例XML:
<Request> <To>13800138000</To> <From>XX公司</From> <TemplateId>SMS_123456</TemplateId> <Param>{"code":"1234","time":"5"}</Param> <SignName>XX科技</SignName> </Request>
发送HTTP请求
- 请求方式:通常为
POST
。 - URL:服务商提供的API地址(如
https://sms.aliyuncs.com/
)。 - Headers:
Content-Type
:text/xml;charset=utf-8
Authorization
:APPCODE 123456789
(部分平台需签名认证)
Python示例代码:
import requests url = "https://sms.example.com/send" headers = {"Content-Type": "text/xml;charset=utf-8"} xml_data = """ <Request> <To>13800138000</To> <From>XX公司</From> <TemplateId>SMS_123456</TemplateId> <Param>{"code":"1234","time":"5"}</Param> </Request> """ response = requests.post(url, data=xml_data, headers=headers) print(response.text)
关键注意事项
问题类型 | 解决方案 |
---|---|
签名错误 | 检查 AppSecret 、Timestamp 、Nonce 是否按规则生成(如HMAC-SHA256)。 |
模板审核未通过 | 登录控制台提交模板,等待审核通过后再调用。 |
手机号格式错误 | 确保手机号为11位数字,且符合运营商号段规则。 |
余额不足 | 充值或联系服务商解决。 |
响应处理
服务商返回的XML通常包含以下字段:
| 字段名 | 说明 |
|—————|————————–|
| StatusCode
| 状态码(如 OK
) |
| Message
| 描述信息 |
| BizId
| 业务ID(用于查询状态) |
| Code
| 厂商自定义状态码(如 200
)|
成功响应示例:
<Response> <StatusCode>OK</StatusCode> <BizId>1234567890abcdef</BizId> <Message>发送成功</Message> </Response>
相关问题与解答
问题1:如何测试短信接口?
解答:
- 使用服务商提供的测试手机号(如阿里云的
13800000000
)。 - 启用沙箱环境(部分平台支持)。
- 发送后检查返回状态和实际接收情况。
问题2:如何处理超时或网络异常?
解答:
- 设置合理的超时时间(如
requests.post(timeout=5)
)。 - 捕获异常并重试(建议最多重试3次)。