写一个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 文档

相关推荐
额呃呃3 小时前
std::allocator<T>::destroy
开发语言
Chris_12193 小时前
Halcon学习笔记-Day6进阶:工业级视觉系统核心技术详解
人工智能·python·深度学习·halcon
期待のcode3 小时前
Java虚拟机栈
java·开发语言·jvm
iso少年3 小时前
Go 语言并发编程核心与用法
开发语言·后端·golang
故事不长丨3 小时前
C#字典(Dictionary)全面解析:从基础用法到实战优化
开发语言·c#·wpf·哈希算法·字典·dictionary·键值对
飞鸟真人3 小时前
关于python -m http.server的一些安全问题
python·安全·http
tjjucheng4 小时前
小程序定制开发哪家性价比高
python
Sun_小杰杰哇4 小时前
Dayjs常用操作使用
开发语言·前端·javascript·typescript·vue·reactjs·anti-design-vue
No0d1es4 小时前
2025年12月 GESP CCF编程能力等级认证Python六级真题
python·青少年编程·gesp·ccf·六级