# 准备停止服务,先处理还欠用户的结果 | EasyNet Source: https://easynet.run/cases/problems/retire-paid-ai-service [easynet.run · 全部问题场景](https://easynet.run/cases#problem-scenarios) # 准备停止服务,先处理还欠用户的结果 作者准备停止维护一项生成服务,关掉运行进程很容易,但还有人付了费没拿到文件,也有人订阅尚未到期。技术入口停了,这些交付关系并没有同时结束。 少量客户可以先用订单表、邮件和现有支付平台逐项处理。已有订阅系统应负责停续费和退款。首先需要一份未完成责任清单,而不是把所有页面统一改成“已下线”。 停服可以先关闭新订单准入,再通过已接入的处理与查询操作核对在途工作。EasyNet 的调用记录帮助定位执行,但待交付、待退款和无法联系的用户仍以业务订单为准。 能完成的订单安排最后交付,不能完成的按约定退款或协商替代。产物导出只向对应买家开放,并说明领取期限;不能为了方便迁移,把所有客户文件打包成一个共享链接。 运行方确认何时停止接受工作,订单负责人跟进欠交付,支付负责人核对款项,存储负责人按约定处理资料。连接失效不会替这些人发通知或退款,已保存文件也不会因此自动删除。 用一张未开始订单、一张运行中订单和一张待领取订单演练停服。检查旧购买链接不再收新单,每张存量订单都有明确去向,无法联系的用户留下后续处理记录,而不是随着服务关闭被遗忘。 01 停售与停续费 旧购买链接也要检查 02 欠单逐笔处理 交付、退款或联系负责人 03 限定领取窗口 买家只取自己的文件,再处理存储 先停止新承诺,再结清旧订单,最后关闭运行入口。 停服前找出还没结案的订单 这段代码只筛选虚构订单,不发送通知、退款或删除文件。实际支付退款需要已核对的 settled_refund 状态。 本地示例 · python ``` orders = [ {"id": "O-91-A", "state": "running"}, {"id": "O-91-B", "state": "ready_to_collect"}, {"id": "O-91-C", "state": "settled_refund"}, ] closed = {"delivered", "settled_refund"} for order in orders: if order["state"] not in closed: print(order["id"], order["state"], "needs_owner") ``` 预期结果:列出 O-91-A 与 O-91-B;待领取不算已交付,运行进程关闭也不会让它们自动结案。 接入时的检查项 停售后不能从旧链接产生新收费订单,已付款任务仍可查询处理状态。 每笔欠单都有交付或退款结论,不以提供方离线代替结案。 导出不暴露他人素材,通知失败名单有人工跟进方式。 源码与接入资料 [不复制源码,也能复用业务逻辑](https://easynet.run/cases/function-reuse) [设备接入指南](https://easynet.run/docs/connect/runtime) [Stripe Connect 官方:平台收款与多方资金流](https://docs.stripe.com/connect)