home / kengdb / noteTb

noteTb: 303

This data as json

id user_id content tags created_at updated_at enable pinned folder_id comment position visibility
303 1 1 # 阿里短信经验 **作者**:Hermes 版本:1.0 --- ## 当前配置 ```ini [aliyun_sms] access_key_id = LTAI5t71iS2NdrYW5qYKAYBu access_key_secret = aycE1LYqKWc3AaBPtUDa54vmaBj59g sign_name = 南宁优品联盟贸易 template_code = SMS_506215446 template_code_login = SMS_506185414 enabled = true ``` - `template_code`:keng注册验证码模板(SMS_506215446,已审核通过) - `template_code_login`:keng登录验证码模板(SMS_506185414,待审核) ## 模板列表 | TemplateCode | 名称 | 内容 | 状态 | |---|---|---|---| | SMS_506215446 | keng注册 | 您的keng验证码:${code},该验证码5分钟内有效,请勿泄露于他人。 | AUDIT_STATE_PASS ✅ | | SMS_506185414 | keng登录验证 | 您的登录验证码:${code},5分钟内有效。 | 待审核 ⏳ | ## 签名 | SignName | 状态 | |---|---| | 南宁优品联盟贸易 | AUDIT_STATE_PASS ✅ | ## API 清单(版本 2017-05-25) | 操作 | Action | Method | 权限 | |------|--------|--------|------| | 发短信 | SendSms | GET/POST | ✅ | | 查发送记录 | QuerySendDetails | GET/POST | ✅ | | 查模板列表 | QuerySmsTemplateList | POST | ✅ | | 查模板详情 | GetSmsTemplate | POST | ✅ | | 新建模板 | CreateSmsTemplate | POST | ✅ | | 修改模板 | UpdateSmsTemplate | POST | ✅(仅限未审核的模板) | | 删除模板 | DeleteSmsTemplate | POST | ✅ | | 查签名列表 | QuerySmsSignList | POST | ✅ | | 查签名详情 | QuerySmsSign | POST | ✅ | ## API 调用要点 ### 1. 签名方式 - HMAC-SHA1 签名(POP V1) - Endpoint: `dysmsapi.aliyuncs.com` - 所有 POST 接口用 `application/x-www-form-urlencoded` ### 2. CreateSmsTemplate 必填参数 ``` TemplateType = 0 # 0=验证码 1=通知 2=推广 TemplateName = xxx # 模板名,最多30字 TemplateContent = xxx # 模板内容,变量用${code} Remark = xxx # 业务场景说明 RelatedSignName = xxx # 关联的短信签名 TemplateRule = {"code":"numberCaptcha"} # 变量规则,必须是numberCaptcha ``` ### 3. ⚠️ 坑 1. **旧接口已下线**:AddSmsTemplate 和 ModifySmsTemplate 返回 `isv.INTERFACE_OFFLINE`,需用 CreateSmsTemplate 和 UpdateSmsTemplate。 2. **TemplateRule 格式**:必须是 `{"code":"numberCaptcha"}`,不是 `{"code":""}` 或 `{"code":"123456"}`,否则报 `BIZ_ERROR 变量参数错误`。 3. **UpdateSmsTemplate 只能改未审核的模板**:已审核通过(AUDIT_STATE_PASS)的模板不能修改,报 `SYSTEM_ERROR 模板状态有误`。要改内容只能新建模板。 4. **TemplateType 含义**:0=验证码,1=短信通知,2=推广短信,3=国际/港澳台。keng 的验证码模板应设为 0。 5. **VariableAttribute**:查模板详情时,变量属性字段是 `VariableAttribute`,值格式为 `{"code":"numberCaptcha"}`,与 TemplateRule 格式一致但字段名不同。 6. **DeleteSmsTemplate 可删已审核模板**:刚才误删了 SMS_333996961,验证了删除不需要模板处于特定状态。 ### 4. Python 调用示例 ```python import urllib.request, json, hmac, hashlib, base64, time, uuid, urllib.parse def call_sms_api(action, extra=None, method='POST'): params = { 'Action': action, 'Version': '2017-05-25', 'Format': 'JSON', 'AccessKeyId': AK_ID, 'SignatureMethod': 'HMAC-SHA1', 'Timestamp': time.strftime('%Y-%m-%dT%H:%M:%SZ', time.gmtime()), 'SignatureVersion': '1.0', 'SignatureNonce': str(uuid.uuid4()), } if extra: params.update(extra) qs = urllib.parse.urlencode(sorted(params.items()), quote_via=urllib.parse.quote) string_to_sign = method + '&' + urllib.parse.quote('/', '') + '&' + urllib.parse.quote(qs, '') params['Signature'] = base64.b64encode( hmac.new((AK_SECRET + '&').encode(), string_to_sign.encode(), hashlib.sha1).digest() ).decode() url = 'https://dysmsapi.aliyuncs.com/' data = urllib.parse.urlencode(params).encode() if method == 'POST' else None if method == 'GET': url += '?' + urllib.parse.urlencode(params) req = urllib.request.Request(url, data=data, method=method) if method == 'POST': req.add_header('Content-Type', 'application/x-www-form-urlencoded') with urllib.request.urlopen(req, timeout=10) as r: return json.loads(r.read()) # 发短信 call_sms_api('SendSms', { 'PhoneNumbers': '17520074504', 'SignName': '南宁优品联盟贸易', 'TemplateCode': 'SMS_506215446', 'TemplateParam': '{"code":"123456"}', }) # 新建模板 call_sms_api('CreateSmsTemplate', { 'TemplateType': '0', 'TemplateName': '模板名', 'TemplateContent': '验证码${code}', 'Remark': '说明', 'RelatedSignName': '南宁优品联盟贸易', 'TemplateRule': '{"code":"numberCaptcha"}', }) ``` ## 环境变量 keng 服务通过 systemd 环境变量注入凭据: ``` Environment="ALIYUN_SMS_ACCESS_KEY_ID=LTAI5t71iS2NdrYW5qYKAYBu" Environment="ALIYUN_SMS_ACCESS_KEY_SECRET=aycE1LYqKWc3AaBPtUDa54vmaBj59g" ``` config.ini 中不写入凭据,只写 sign_name 和 template_code。 [] 2026-05-14 21:28:51 2026-05-14 21:28:51 T F     15 public

Links from other tables

  • 0 rows from note_id in noteShareTb
  • 0 rows from note_id in shareLinkTb
Powered by Datasette · Queries took 3.207ms