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

相关推荐
-银雾鸢尾-14 分钟前
C#中的拓展方法
开发语言·c#
guodingdingh2 小时前
软件开发工作问题总结0718
java·开发语言·数据库
优橙教育4 小时前
5G网优培训 vs Java开发:转行选哪个?
java·开发语言·5g
想会飞的蒲公英5 小时前
计算机怎样读取中文文本:编码、清洗与标准化
人工智能·python·自然语言处理
SeaTunnel6 小时前
从 Python Script 地狱到标准化数据集成框架
大数据·开发语言·python·程序员·代码·seatunnel
深度研习笔记6 小时前
OpenCV工业视觉实战09|项目EXE打包+工控机无环境部署+后台常驻运行,彻底脱离Python环境,完成项目最终交付
python·opencv·webpack
碎光拾影6 小时前
ARM交叉工具链各工具作用及IMX6ULL平台LED+蜂鸣器裸机程序实现
java·开发语言·数据库
CCPC不拿奖不改名7 小时前
大模型推理架构与开源生态知识整理
数据库·windows·python·架构·langchain·开源·github
Marst Code7 小时前
(python)2026Plotly 库评估:交互式可视化到底值不值得引入?
开发语言·python
databook7 小时前
当散点图不够用时:用 t-SNE 可视化多维数据
python·数据分析·数据可视化