写一个Python接口:发送支付成功短信

文章目录

  • [📌 Python 接口示例:发送支付成功短信](#📌 Python 接口示例:发送支付成功短信)
    • 一、接口定义(给调用方看的)
      • [1️⃣ 接口信息](#1️⃣ 接口信息)
    • [二、HTTP 报文示例(重点)](#二、HTTP 报文示例(重点))
    • 三、接口完整实现(FastAPI)
      • [1️⃣ 安装依赖](#1️⃣ 安装依赖)
      • [2️⃣ 完整接口代码(可直接运行)](#2️⃣ 完整接口代码(可直接运行))
      • [3️⃣ 启动接口](#3️⃣ 启动接口)
    • [四、用 curl 调用接口(对接必备)](#四、用 curl 调用接口(对接必备))
    • [五、这个 Python 接口已经具备哪些「真实项目特征」](#五、这个 Python 接口已经具备哪些「真实项目特征」)

Python 接口示例,用的是 FastAPI

📌 Python 接口示例:发送支付成功短信

技术栈 :Python + FastAPI
接口类型 :REST API
数据格式:JSON


一、接口定义(给调用方看的)

1️⃣ 接口信息

项目 内容
接口名称 发送支付成功短信
URL /api/sms/send
Method POST
Content-Type application/json
认证方式 Bearer Token

二、HTTP 报文示例(重点)

请求报文

http 复制代码
POST /api/sms/send HTTP/1.1
Host: localhost:8000
Content-Type: application/json
Authorization: Bearer test-token-123

{
  "phone": "13800138000",
  "templateCode": "PAY_SUCCESS",
  "params": {
    "orderNo": "ORD202601060001",
    "amount": "99.00"
  }
}

响应报文(成功)

json 复制代码
{
  "code": 0,
  "message": "发送成功",
  "data": null
}

三、接口完整实现(FastAPI)

1️⃣ 安装依赖

bash 复制代码
pip install fastapi uvicorn

2️⃣ 完整接口代码(可直接运行)

python 复制代码
from fastapi import FastAPI, Header, HTTPException
from pydantic import BaseModel
from typing import Dict, Optional

app = FastAPI(title="SMS Service API")


# ---------- 请求模型 ----------
class SmsSendRequest(BaseModel):
    phone: str
    templateCode: str
    params: Dict[str, str]


# ---------- 统一返回模型 ----------
class ApiResponse(BaseModel):
    code: int
    message: str
    data: Optional[dict] = None


# ---------- 接口实现 ----------
@app.post("/api/sms/send", response_model=ApiResponse)
def send_sms(
    request: SmsSendRequest,
    authorization: str = Header(None)
):
    # 1. 简单鉴权
    if not authorization or not authorization.startswith("Bearer "):
        raise HTTPException(status_code=401, detail="未授权")

    token = authorization.replace("Bearer ", "")
    if token != "test-token-123":
        raise HTTPException(status_code=403, detail="Token 无效")

    # 2. 参数校验(业务级)
    if not request.phone:
        return ApiResponse(code=1001, message="手机号不能为空")

    if request.templateCode != "PAY_SUCCESS":
        return ApiResponse(code=1002, message="不支持的模板")

    # 3. 模拟发送短信(真实项目这里会调用第三方)
    print("=== 发送短信 ===")
    print("手机号:", request.phone)
    print("模板:", request.templateCode)
    print("参数:", request.params)

    # 4. 返回成功
    return ApiResponse(code=0, message="发送成功")

3️⃣ 启动接口

bash 复制代码
uvicorn main:app --host 0.0.0.0 --port 8000

启动后访问:

  • 👉 接口地址:http://localhost:8000/api/sms/send
  • 👉 自动接口文档:http://localhost:8000/docs

四、用 curl 调用接口(对接必备)

bash 复制代码
curl -X POST http://localhost:8000/api/sms/send \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer test-token-123" \
  -d '{
    "phone":"13800138000",
    "templateCode":"PAY_SUCCESS",
    "params":{
      "orderNo":"ORD202601060001",
      "amount":"99.00"
    }
  }'

五、这个 Python 接口已经具备哪些「真实项目特征」

标准 REST 风格

Header 鉴权

DTO / 请求模型

统一返回结构

HTTP 状态码 + 业务 code

自动 Swagger 文档

相关推荐
qingfeng1541520 小时前
企业微信定时群发实战:API 如何实现批量消息自动发送?
java·开发语言·python·自动化·企业微信
丁劲犇20 小时前
QodeAssist:为msys2 ucrt64 Qt Creator 注入 AI 灵魂的开源插件
开发语言·人工智能·qt
qingfeng1541520 小时前
企业微信 API 可以做什么?
java·开发语言·python·自动化·企业微信
梧桐和风20 小时前
2026 年 Java 趋势:AI 浪潮下,Java 会过时吗?
java·开发语言·人工智能
lsx20240620 小时前
React 组件详解
开发语言
Hesionberger20 小时前
LeetCode105:前序中序构建二叉树(三解法)
java·数据结构·python·算法·leetcode·深度优先
嗨嗨的迷子20 小时前
JDK 17 远程调试连不上 5005:从 attach timeout 到 JDWP 监听地址变更
java·开发语言
Chase_______20 小时前
【Java杂项】为什么 long 可以自动转 float?宽化基本类型转换与精度丢失详解
java·开发语言·python
listhi52020 小时前
基于QT的串口心电波形实时显示系统
开发语言·qt
之歆20 小时前
DAY_12JavaScript DOM 完全指南(三):高级工程篇
开发语言·前端·javascript·ecmascript