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

推荐订阅源

Stack Overflow Blog
Stack Overflow Blog
云风的 BLOG
云风的 BLOG
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Recent Announcements
Recent Announcements
Microsoft Security Blog
Microsoft Security Blog
Microsoft Azure Blog
Microsoft Azure Blog
J
Java Code Geeks
D
DataBreaches.Net
U
Unit 42
P
Proofpoint News Feed
I
InfoQ
Apple Machine Learning Research
Apple Machine Learning Research
Google DeepMind News
Google DeepMind News
博客园 - Franky
博客园_首页
IT之家
IT之家
博客园 - 叶小钗
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 【当耐特】
Hugging Face - Blog
Hugging Face - Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
阮一峰的网络日志
阮一峰的网络日志

人人都是产品经理

为什么你的产品找不到差异化?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迎来强劲对手 – 人人都是产品经理,
接一个第三方支付,开发说要2个月?
产品海豚湾 · 2022-12-17 · via 人人都是产品经理

很多产品在进行支付的时候,都有第三方支付的选项,这些年第三方支付的方式也在不断增加。这就要求产品在设计支付渠道时,要考虑到拓展性。本文作者对此进行了分析,希望对你有帮助。

产品:我们近期需要增加一个支付渠道,评估一下工期吧?

技术:这个很麻烦,要改订单,改流水,改前端支付接入……估计要两个月吧。

产品:要这么久吗?Boss 说半个月内要上线。

技术:当初设计的时候没有考虑接多个支付渠道,现在哪能想加就加,这可是涉及资金的环节,怎么可能这么快?

产品:……

一、前言

涉及到线上交易环节的系统都会接入第三方支付。当前的第三方支付渠道越来越多,从一开始的支付宝支付、到微信支付、再到云闪付……现在还有各家银行的支付渠道。比如我们看美团,就支持了微信、支付宝、云闪付、美团支付和华为支付。

如此多的支付渠道,如果一开始的产品设计对支付这块没有考虑好,那么出现上面的对话很正常,而且确实不能说是技术的锅。

当然,做过多支付渠道接入的技术可能在一开始设计技术方案的时候就会考虑,但是大部分技术可能只是实现了支付的功能而已,并没有考虑扩展性。然后,要扩展支付渠道的时候就会很被动。

二、支付网关

我们来看看在没有支付网关的情况下,支付这个过程是怎么样的。

上面这幅流程图是一个简化版本的正向支付流程图,发起支付的时候,用户端需要选择支付渠道,然后根据不同的支付渠道发起对应的支付。支付成功后,再处理订单的支付状态。

每一个支付渠道都有一套独立的支付流程,也就意味着每接入一个支付渠道,这些部分都需要单独开发,工作量和当初一开始做第一个支付的差不多,工期长就难免了。

这还是简化的正向的支付流程,如果考虑订单退款、资金流水管理,那么工作量会更多。

怎么化解这种情况?实际上还是需要产品从业务层面抽象支付过程。

我们梳理一下上面各个支付渠道的过程,发现其实发起支付、支付成功判断和通知订单支付成功这三个环节其实是类似的,因此可以将上面的流程图简化为下面的样子。

中间框起来的那部分就是支付网关要做的事情。这个时候也许会有人质疑,实际上每个支付渠道还是要单独处理一遍,并没有简化什么。从面上看确实是,所以这里就涉及到领域驱动设计的思想了。

三、领域抽象

回到我们的支付环节,我们可以拆分成三个模块,前台模块、后台的订单模块和支付模块。

这三个模块如果能够在前期通过一种形式进行分离和交互约定,那么当三个模块的某个模块发生变动时,其他两个模块的变动可以降低到极限,从而可以减轻变动带来的系统开发工作量。

我们先来看看如何分离,分离的目的是尽量保证数据的单向流动,比如支付环节的数据流向图如下。

从这幅图我们可以看到,实际上前台模块到支付模块的数据流是可以单向流动的,那么我们约定好不同模块的数据交互规则就可以减少某个模块变动带来的影响了。

下面是三个模块约定的信息:

  • 前台到订单:提交订单时提供商品信息,包括 SKU 的 id,数量,若考虑优惠的话把优惠信息也一并提交;
  • 订单到前台:订单信息,例如订单详情。
  • 前台到支付:提供支付渠道(由用户选择)和订单号;支付模块会根据订单号获取实际要支付的金额创建支付流水,此时支付流水处于待支付状态。这里要注意,不能由前台提交支付金额,因为前台数据不是绝对可信的,实际金额要以后台订单模块的为准。
  • 支付到第三方:一般接入第三方支付都需要后台向第三方申请支付参数(通常会需要提供商户号、金额、商家订单号、商品信息)。
  • 支付到前台:将获取到的第三方支付参数按约定格式组装给到前台,让前台能够按对应渠道的要求将支付参数提交到支付渠道(通常是第三方提供的 SDK)发起支付。
  • 第三方支付到支付模块:支付后,第三方支付会推送支付成功的对账信息通知给到后台,后台核对无误后,确认支付成功。支付模块会将之前创建的流水标记为支付成功。
  • 支付模块到订单模块:支付模块会告知订单模块哪个订单号支付成功了,然后订单模块标记订单为付款成功。
  • 订单模块到前台:将支付成功信息给到前台,前台会告知用户已经支付成功。

由上面的数据流可以看到,实际上三个模块的边界和数据交互是很清晰的。

因此,我们在设计的时候,把三个模块之前的交互数据约定好,那么当支付渠道发生改变的时候,就只需要做少量改动就可以了。

  • 在正向支付过程中订单模块是不需要改动的,订单模块和第三方支付并没有直接的关联。
  • 增加支付渠道时,前台一方面下单支付时提交对应的支付渠道即可。发起支付时按照第三方渠道的要求,将支付模块的渠道支付参数提交到第三方即可,实际上只是增加了第三方渠道支付的适配工作;
  • 支付模块只需要适配新增渠道的申请支付和处理第三方支付成功的对账通知即可。

整个工作经过梳理后会简单很多,但这里的前提是产品在设计之初就将支付模块和订单模块分离了,分离后的支付模块就可以扩展为支付网关。

退款的逆向操作也是类似的,步骤如下:

  1. 前台用户发起退款申请,这里也可以是后台客服替用户发起退款申请;
  2. 后台审核通过后,提交退款申请到支付网关(实际上是订单模块到支付网关);
  3. 支付网关向第三方提交退款申请。退款成功后,第三方支付会通知支付网关;
  4. 支付网关核对退款信息无误后,通知订单模块退款操作成功,订单模块会标记订单的退款状态。

当接入新的支付渠道时,实际上退款过程只需要支付网关处理即可,订单模块不需要做任何改动。

四、总结

很多产品都会和第三方系统做对接,而第三方支付是最常见的一种形式。

如果产品同一项功能可能和多个不同渠道的第三方对接,那么建议在不同渠道和具体业务功能之间增加一个适配功能,从而当接入新的第三方时,只需要更改适配功能,而不需要对业务功能进行大的改动,例如本篇介绍的支付网关。

这种设计方式,一方面需要产品经理能够提前预判业务发展趋势,另一方面还需要产品经理具备优秀的业务梳理和抽象能力。实际上,业务梳理和抽象能力是很多高级产品经理和初中级产品经理最为明显的区别。

作者:产品海豚湾;公众号:产品海豚湾(ID:pm-dophin-bay)

本文由@产品海豚湾 原创发布于人人都是产品经理,未经许可,禁止转载。

题图来自Unsplash,基于CC0协议。

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