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

相关推荐
swordbob30 分钟前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
源分享1 小时前
Java线程同步的多种实现方法(非常详细)
java·开发语言·jvm
Luminous.1 小时前
C语言--day30
c语言·开发语言
码云骑士1 小时前
32-慢查询排查全流程(下)-索引优化实战与最左前缀原则
python
何以解忧,唯有..1 小时前
Go语言循环语句详解:for、range与循环控制
开发语言·算法·golang
謓泽2 小时前
C语言不是语法,是通往机器的地图。
c语言·开发语言
云水一下2 小时前
从零开始学 PHP 系列(一):PHP 的前世今生与开发环境搭建
开发语言·php
飞天狗1112 小时前
零基础JavaWeb入门——第五课第二小节:九大内置对象 · 第2个:response(响应对象)
java·开发语言
DJ斯特拉2 小时前
axios快速使用
开发语言·前端·javascript