惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
CXSECURITY Database RSS Feed - CXSecurity.com
Help Net Security
Help Net Security
P
Privacy International News Feed
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Tor Project blog
AWS News Blog
AWS News Blog
K
Kaspersky official blog
A
Arctic Wolf
Latest news
Latest news
T
Threat Research - Cisco Blogs
L
LINUX DO - 最新话题
P
Privacy & Cybersecurity Law Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
Google DeepMind News
Google DeepMind News
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
月光博客
月光博客
N
News and Events Feed by Topic
Jina AI
Jina AI
博客园 - 司徒正美
WordPress大学
WordPress大学
罗磊的独立博客
雷峰网
雷峰网
AI
AI
Hugging Face - Blog
Hugging Face - Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
S
Security @ Cisco Blogs
博客园 - 三生石上(FineUI控件)
H
Heimdal Security Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
酷 壳 – CoolShell
酷 壳 – CoolShell
C
Cisco Blogs
博客园 - 【当耐特】
The Hacker News
The Hacker News
有赞技术团队
有赞技术团队
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Schneier on Security
Schneier on Security
博客园 - Franky
S
SegmentFault 最新的问题
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Cloudbric
Cloudbric
爱范儿
爱范儿
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
S
Secure Thoughts
Last Week in AI
Last Week in AI
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Know Your Adversary
Know Your Adversary
Google DeepMind News
Google DeepMind News

人人都是产品经理

为什么你的产品找不到差异化?90%的失败都卡在第一步上(下) – 人人都是产品经理, 3年从30万到1300万用户、获2200万美元融资,这个AI教育产品用“抽卡”破解了获客难题 – 人人都是产品经理, 园区招商系统怎么做才能真正帮到去化?我加了这一个功能,推广链接转发400次阅读过万 – 人人都是产品经理, AI大事件:OpenAI发完网络安全模型又搞药物研发,小鹏汽车要抓”DeepSeek时刻” – 人人都是产品经理, 电商不是卖货,是一场更残酷的产品经理实战 – 人人都是产品经理, 没想到,活动营销又回来了! – 人人都是产品经理, 为何All-in海外KOC:一场关于AI时代窗口期的豪赌 – 人人都是产品经理, 重新理解企业的内部协作 – 人人都是产品经理, 苹果的 AI 战略到底是什么? – 人人都是产品经理, 医疗智能体·第2讲——合规护城河:等保、PIPL与HIPAA的架构实战 – 人人都是产品经理, 向量知识库五步法:从“答非所问”到“精准回复” – 人人都是产品经理, 鸿蒙PC三方库构建总指挥HPKBUILD(sha)库为例 – 人人都是产品经理, 何时该用LLM?AI产品经理的LLM设计指南 – 人人都是产品经理, 医疗信息领域的需求方、决策方、准入方以及关注点(二) – 人人都是产品经理, 即梦涨价:一场被误读的「傲慢」 – 人人都是产品经理, 面试AI PM必答题:Hermes和OpenClaw的区别,如何讲清楚业务价值 – 人人都是产品经理, AI的下一张船票:世界模型——AI产品经理必须理解的技术拐点 – 人人都是产品经理, 小红书做GEO,怎么让AI信你?记住这 3 个重要信息 – 人人都是产品经理, 5 家印度 AI 初创公司,看看印度 AI 再做什么 – 人人都是产品经理, AI项目跨团队协作:产品技术业务如何不打架 – 人人都是产品经理, Agentic Workflow(智能体工作流):让AI从”答案生成器”变成”数字员工” – 人人都是产品经理, lycium_plusplus 项目全景解读:OpenHarmony 三方库构建的“大管家” – 人人都是产品经理, 从爆单救火到前置履约:两套预采策略,把生鲜大促履约效率拉满 – 人人都是产品经理, 什么时候该补货?我用一轮数据做了一个决定 – 人人都是产品经理, 从“机械兜底”到“动态分流”:AI客服重复进线治理的4大底层逻辑 – 人人都是产品经理, 抖音拼效率,红书拼洞察 – 人人都是产品经理, 全民狂欢与退潮——为什么龙虾这波热潮冷却得如此之快? – 人人都是产品经理, Stripe押注!MPP重塑全球支付 – 人人都是产品经理, 小红书GEO:AI引用你的内容,不是因为你对,而是因为你看起来可信 – 人人都是产品经理, 前百度副总裁押注办公Agent,日韩付费爆发,Manus迎来强劲对手 – 人人都是产品经理, 企事业单位数字化的业务供需本质 – 人人都是产品经理, 医疗智能体·第1讲——医疗信息化重构:从“辅助软件”到“自主智能体”的范式转移 – 人人都是产品经理, 粉丝量就是空气!!! – 人人都是产品经理, 用户说“薯片碎了”,机器回“要买吗?”:意图识别的翻车与破局 – 人人都是产品经理, RAG召回准确率从75到90 我做对了这三件事 – 人人都是产品经理, AI大事件:Anthropic改收费、OpenAI发安全版、手术机器人纳入医保、阿里发布”秒悟” – 人人都是产品经理, Chrome 推出 Skills 新功能,Agent 重塑上网方式 – 人人都是产品经理, GitHub前创始人拿了a16z的1700万美元,做Agent时代的Git – 人人都是产品经理 拷贝或克隆其他 Flutter OH 项目到本地后无法运行 – 人人都是产品经理, 优惠券设计:优惠券创建 – 人人都是产品经理, 不用死磕文档!AI 助手 1 小时搞定飞书 CLI 安装 + 配置 + 知识库 – 人人都是产品经理, 用小龙虾做竞品分析报告:从2天到20分钟,我是怎么做到的 – 人人都是产品经理 用小龙虾做市场分析报告:搞懂这3个公式,市场规模不再靠猜 – 人人都是产品经理, 你早就在做 Harness 工程,只是不知道它叫这个名字 – 人人都是产品经理, Think Long就够?你可能想多了! – 人人都是产品经理, 货代SRM实战:供应商准入怎么做,才能让资源池不是通讯录而是可交付网络? – 人人都是产品经理, 如何做好用户调研?详解基本技巧 – 人人都是产品经理, 木鸟、途家、美团对打,平台春天行动开“卷” – 人人都是产品经理, 入职才发现公司不靠谱?小红书从业者求职避坑指南 – 人人都是产品经理, 美国 AI 三巨头联手封堵,中国 AI 突围之路在何方 – 人人都是产品经理, 小红书,放在需求对面的镜子 – 人人都是产品经理, AI 会带来大规模失业吗? – 人人都是产品经理, 从出单到补货前,我第一次犹豫:该不该放大? – 人人都是产品经理, Flutter 三方库鸿蒙化适配:5 种高效检查方式,快速判断是否需要适配 – 人人都是产品经理, 从做产品进阶拿结果:医美机构产品经理转岗科室运营经理 – 人人都是产品经理, 阿里HappyHorse,一场关于“Token经济”的阳谋 – 人人都是产品经理, To B AI:客户留存落地的观察与思考 – 人人都是产品经理, AI产品的“生命线”——数据采集、标注、清洗的产品化设计 – 人人都是产品经理, 谈谈AI Agent(二):当“孩子”能自己“体验世界”时,你该学什么? – 人人都是产品经理, UI/UX设计师的3层能力进阶,前两层让你活下来,第三层…才是真正的分水岭 – 人人都是产品经理, 2分钟 → 30秒,效率提升75%:B端产品经理如何用「规则枷锁」驯服AI幻觉? – 人人都是产品经理, 还没来得及学OpenClaw,来了个更猛的:Hermes Agent – 人人都是产品经理, AI日报:宇树机器人跑出10m/s刷新世界纪录 – 人人都是产品经理, 一文说透基金互金如何用情绪价值引导用户决策做转化 – 人人都是产品经理, 当浏览器开始替你”看”网页:AI 浏览器正在亲手拆掉它脚下的那张网 – 人人都是产品经理, 0代码,一天时间我Vibe Coding了个网站 – 人人都是产品经理, Hermes 和 OpenClaw 之争,Agent 的能力应该“装上去”还是“长出来”? – 人人都是产品经理 视频生成的“桌子”,字节Seedance 2掀完,阿里快乐马掀 – 人人都是产品经理, 从听不懂到完全信任:我的 Codex 深度产品体验 – 人人都是产品经理, 当虚拟偶像有了北京户口,与真人偶像还有什么区别? – 人人都是产品经理, 会说,远远比会做更重要 —— 对 SBTI 爆火现象的五层观察 – 人人都是产品经理, AI产品经理必看:当“搭环境”比“选模型”更重要,你的认知还在2024年吗? – 人人都是产品经理, 2026年AI产品商业化核心逻辑:从功能demo到规模化营收的3个必破卡点 – 人人都是产品经理, 京东围绕供应链,卷起裤腿下场的那些事儿 – 人人都是产品经理, SBTI一夜刷屏:它赢在了“太会说人话” – 人人都是产品经理, 折扣零售的真相:不是便宜,而是价值感! – 人人都是产品经理, 和甲方吵了一架,最后加钱做了——我学到的ToB产品经理生存法则 – 人人都是产品经理, 和几位小红书操盘手聊了8小时,干货全在这 – 人人都是产品经理, 智谱GLM-5.1登场,开源模型首超Opus4.6!!! – 人人都是产品经理 Anthropic收入凭什么反超OpenAI,终于有人把这事说清楚了 – 人人都是产品经理, 史上最有故事感的技术报告——Claude最强模型Mythos 7个极其精彩的细节 – 人人都是产品经理, 模型不是壁垒,Harness 也不是 – 人人都是产品经理, 抖音本地生活业务思考21 – 人人都是产品经理, Superpowers:145k Star的AI编码框架,到底是什么来头? Superpowers:145k Star的AI编码框架,到底是什么来头? – 人人都是产品经理, OpenAI 的路走错了,Anthropic Harness 解法启示:模型需要实践专科生 – 人人都是产品经理, 画原型图的前一步:设计站点地图 – 人人都是产品经理, 给 DeepSeek 的最后一封催更信 – 人人都是产品经理, 手把手教你用 Claude Code 搭建 AI 营销团队:5 个 Agent、12 项技能,独立完成研究、写作、设计全流程 – 人人都是产品经理, 你以为大模型在学语言?不,它在重新发明语言学 – 人人都是产品经理 所谓Skill,不过是AI时代的工业垃圾 – 人人都是产品经理, 聊一聊内容传播的几个方法 – 人人都是产品经理, 当平台开始吃掉生态:从 OpenClaw 被封杀,读懂 Anthropic 的这盘棋 – 人人都是产品经理, 你装了 10 个 AI 插件,Obsidian 还是一个文件夹 – 人人都是产品经理 关于AI智能体架构演进的系统性思考:从单体试水到多体协同的重构 – 人人都是产品经理, 当“人”变成Skill,我们又该何去何从? – 人人都是产品经理 Mythos 事件:前沿 AI 治理的意外实验 – 人人都是产品经理, 货代CRM:信用与风险管理怎么做,才能把坏账风险拦在放货之前? – 人人都是产品经理, 从HR收集自拍照到员工自助录入——我见证了园区人脸识别从”不可用”到”真好用”的全过程 – 人人都是产品经理 千问闯关AI混沌期:阿里画靶,吴嘉张弓,马云射箭? – 人人都是产品经理,
支付系统返回码设计及映射避坑指南
隐墨星辰 · 2024-12-02 · via 人人都是产品经理

在支付系统的构建与管理中,返回码的设计和映射是确保交易顺畅进行的关键环节。本文将深入探讨支付系统返回码的重要性、常见问题及其解决方案,旨在帮助开发者和支付系统管理者避免潜在的陷阱,提升用户体验,并确保交易的准确性和安全性。


我在支付行业呆了十来年,和返回码映射导致的线上生产问题交手无数次,有很多是因为影响用户体验,也有一些直接导致了线上资损,所以有必要开一篇小文聊一下。

一、返回码还是错误码

有些人喜欢用“返回码”,有些人喜欢用“错误码”。两者本质相同,都是用于标识通信或交易的状态。但我更倾向于使用“返回码”,因为它不仅涵盖错误状态,还包括成功状态,而成功并非错误,所以使用“返回码”更为合适。

二、返回码的本质

我很喜欢探寻事物的本质,那么返回码的本质是什么?我觉得是解决2个问题:

  1. 标识单一系统内的业务处理结果:在一个单一系统内,如何表达业务处理的结果,比如参数不对,余额不足,还是成功等。
  2. 完成异构系统或应用之间的处理结果同步:在多个系统之间如何同步业务处理的结果,比如渠道的结果同步给支付平台的网关系统,网关系统同步给支付引擎等。

三、返回码最核心的关注点

返回码最核心的关注点也只有2个:

  1. 同一系统内定义是否足够清晰明确。减少歧义,减少误解。
  2. 异构系统或应用之间的映射是否足够准确。映射不好,轻则影响用户体验,重则有资损。

四、曾经碰到过的坑

踩过的坑很多,大致可以归为以下几类:

  1. 对客映射不准确,导致用户持续重试失败,影响用户体验。比如“余额不足”或“风控不过”,返回给用户“系统异常,请重试”,有些用户就疯狂地重试。
  2. 外部渠道没有明确成功或失败,内部映射成明确成功或失败造成资损。比如:

支付同步请求渠道响应还没有回来,发起了查询,查询返回“订单不存在”,直接推进失败,但最后银行扣款成功。

退款同步请求渠道响应返回“系统异常”,直接推进到失败,但最后银行退款成功。

3. 外部渠道有双层返回码,没有做完整判断。比如第1层只表示接口是否成功(通信层面),第2层才是表示业务是否成功,但是只判断了接口层面,就推进了内部订单的业务状态。

4. 返回码制定过于笼统或太细

五、最佳实践

5.1. 基本原则

  • 制定统一返回码规范:在团队或公司层面制定统一的返回码规范,明确各个返回码的含义,确保各模块一致性。
  • 严格遵守返回码定义:研发人员在编码时,应严格按照规范返回对应的返回码,确保返回码与实际状态匹配。明确成功才推进成功,明确失败才推进失败,其它全部按“未知”处理
  • 区分接口/通信成功与业务成功
  • 流入到平台的(支付、充值等),谨慎映射到成功。从平台流出的(提现,代发等),谨慎映射到失败。

5.2. 三级返回码体系

外部商户对接支付平台,支付平台内部有自己的业务处理,同时还对接了外部的很多渠道,所以需要管理三套返回码

  • 提供给商户OpenAPI使用的返回码:这块可以直接参考微信支付、支付宝等机构的门户网站。
  • 内部各应用使用的标准返回码:用于内部业务的处理。
  • 渠道返回码:外部渠道提供的返回码,每个渠道都不一样,需要映射到内部标准返回码。

为什么需要三层?主要有3个原因:

  1. 内部应用使用的标准返回码需要精确,便于内部系统运行的监控。
  2. 给商户OpenAPI的返回码需要业务语义明确,但不能过于精确。比如内部出现“卡的有效期不正确”,对外则是“卡号或持卡人或有效期不正确”,避免轮询攻击。
  3. 外部渠道返回码不能全部一对一映射到内部,因为外部渠道太多,容易膨胀。

5.3. 商户OpenAPI返回码设计

这部分建议直接参考微信支付、支付宝或者ISO20022标准,这几家代表了行业的最高水准。

一般来说最少有两个字段:resultCode和message,一个表示码,一个表示码的描述。

也可以增加一个参数result,使用S,F,U表示业务状态的成功、失败、未知。

如果是查询类接口,一定要明确说明是接口成功,还是业务成功。

5.4. 内部标准返回码设计

支付平台内部也分了不同域,建议使用一个共同的规范,比如:RS+子系统编号+错误级别+具体返回码。具体如下图所示:

支付系统返回码设计及映射避坑指南_v0.2

说明:

  • 1-2位:固定值RS,Result缩写。
  • 3-5位:子系统编号。比如001:收银支付,002:会员等。可方便定位哪个系统出的问题。
  • 6位:错误类或等级。比如:0:正常,1:业务级异常,2:系统级异常。
  • 7-9位:各业务线自己定。比如:1xx:参数相关,2xx:数据库相关,3xx:账户状态/Token状态相关等。
  • 这样的好处在于,每个子域或子系统既有全局的规范,又有自己的灵活性,减少沟通成本。
  • 注意:上面只是写了resultCode,还需要有message,用于描述这个码代表什么语义。
  • 核心代码(注:使用chatGPT o1生成,请自行增删):
public interface IResultCode {
    String getResultCode();
    String getMessage();
}
public enum PaymentResultCode implements IResultCode {
    SUCCESS( "0000", "success"),
    FAIL("2998", "fail"),
    SYSTEM_ERROR("2999","system error"),
    // 额度相关 11XX
    INSUFFICIENT_FUND("1101", "insufficient fund"),
    // 风控相关 12XX
    RISK_REJECTED("1201", "risk rejected"),
    // DB相关 21XX    ;
    private static final String PREFIX = "RS";
    private static final String SYSTEM_CODE = "101";
    private String codeNumber;
    private String message;
    @Override
    public String getResultCode() {
        return PREFIX + SYSTEM_CODE + codeNumber;
    }
    @Override
    public String getMessage() {
        return message;
    }
    PaymentResultCode(String codeNumber, String message) {
        this.codeNumber = codeNumber;
        this.message = message;
    }
}

5.5. 渠道返回码映射

每个渠道的返回码都是不一样的,所以需要设计外部渠道返回码映射到内部标准返回码。需要遵守几个原则:

  1. 只有明确成功,才能映射到成功
  2. 只有明确失败,才能映射到失败。比如渠道返回:订单不存在,或者系统异常,不能直接映射到失败,因为有可能会成功。
  3. 涉及个人敏感信息或内部系统敏感信息的,需要转成模糊返回码和描述出去,不能给最终用户展示精确信息。比如内部一个系统宕机,不能直接把异常抛出去。有效期错误也需要映射成“卡号或姓名或有效期不正确”。
  4. 与敏感信息无关的,越准确越好,避免用户无谓的重试。比如余额不足,就不要映射成“系统异常,请重试”。
  5. 查询类接口,务必要区分是接口成功,还是业务成功。

具体的技术实现,通过使用映射表就足够,加到缓存中,增加运算速度。如果找不到映射关系,就全部转到一个默认的返回码上面,同时对这个默认返回码做监控,定期把这些没有做映射的返回码映射到正确的返回码上面去。避免应该把类似“余额不足”映射成了“系统异常请重试”的场景。

5.6. 返回码监控与告警

大部分团队都会监控成功率,只有少数团队会监控返回码或定期分析返回码。然而当交易量足够大时,成功率的波动可能只有0.5%,很难看出异常,而如果去分析返回码,则可以快速看出并定位问题。

一般来说,有几个建议:

  1. 实时监控返回码的突变异常。比如:最近10分钟,某个返回码突然增加50%,或者比明天突然增加50%等。都需要介入看看。
  2. 定期观察返回码曲线表。如果某个返回码连续多天持续在上升,一般都是有问题的。
  3. 建立返回码全链路映射大盘。比如渠道返回“余额不足”或“风控不通过”,映射到用户展示“系统异常,请重试”,那就有问题。而且类似这种情况还非常常见。
  4. 定期分析用户支付行为。以前在分析用户行为时,发现同一用户重试了20多次,最后排查发现,就是返回码映射不准确,导致用户无谓的重试。

六、结束语

卷用户体验和成功率时,往往需要于细微处见真章,而返回码的设计和映射就是如此。做得不好,轻则影响用户体验,重则资损。

希望对大家在设计标准返回码及映射时有所启发,也欢迎点赞转发。

这是《图解支付系统设计与实现》专栏系列文章中的第(48)篇。欢迎和我一起深入解码支付系统的方方面面。

作者:隐墨星辰,公众号:隐墨星辰

本文由 @隐墨星辰 原创发布于人人都是产品经理。未经作者许可,禁止转载

题图来自Unsplash,基于CC0协议

该文观点仅代表作者本人,人人都是产品经理平台仅提供信息存储空间服务