面试官随便问几个问题就知道你究竟做没做过微信支付宝支付

2024-01-21

面试官随便问几个问题就知道你究竟做没做过微信支付宝支付

你知道直连模式和服务商模式吗

  • 网上的课程一般给你演示的都是直连模式,而企业中有不少是申请成为了服务商,因为里面有佣金提成。
  • 我粗俗地解释,直连模式,就是说你是一个会做生意的老板,自己会搞钱,搞到钱存到自己的一个商户号里。
  • 服务商模式,就是说你是一个会做生意的老板,但是自己不搞钱只提供做生意的渠道,其他老板用你的渠道,搞到钱了让你洗一洗,你分别转到他们各自的商户号里去,而你收取一点点服务费。
  • 然后我们对照上面的话再稍微专业点解释,直连模式就是你得自己接入支付功能,啥都要你自己做,服务商模式就是啥都不需要你做,你就提供个商户号,剩下的支付接入功能服务商给你全部搞定。
  • 如果面试官问你这个问题,你只要意思稍微到了就行,别人就知道你是做过的。

服务商模式下,你们如何控制多个子商户结算和退款的

  • 假如你有自己的一家公司,专门提供支付服务,而且申请成为了服务商,那么你就有自己的一个appid和mchid,统称为 服务商账户

  • 然后张三和李四也有各自的公司,但他们是做电商的,需要接入支付功能,找到了你,此时他们需要提供自己公司申请的appid和mchid,交给你去配置,这个统称为 子商户账户

  • 好了,接下来你作为服务商,该如何配置服务商账户和子商户账户呢?我这里贴出一个微信的小例子,你们可以参考下(文中的参数都是模拟的并非真实配置)。

  • wechat:
        pay:
            # 服务商
            appId: wx49f94d5f00f349f13
            mchId: 1550391234
            mchKey: miyao145bijv0974kf64833ld8wpi
            keyPath: classpath:wx-cert-dev/apiclient_cert.p12
            existsSub: false
            # 子商户
            subConfigs:
                - subAppId: wx50f05d5f11f560h24
                  subMchId: 1511405678
                  typeId: zhangsan
                - subAppId: wx61g16e6g22d781i35
                  subMchId: 1623519012
                  typeId: lisi
            # 回调地址      
            external:
                pay-notify-url: https://xxxx/gateway/pay/api/payOrder/notify
                refund-notify-url: https://xxxx/gateway/pay/api/refund/notify
                 
    
  • 其实配置的方式有很多,我这里只是展示其中一种,xdm也可以照搬的。

  • 这样配置了以后,如何读取呢,很简单,就用SpringBoot的 @ConfigurationProperties 注解来读取即可。

  • 这种方式是在SpringBoot项目启动时, 读取yml 中服务商和子商户的配置, 加载到map 中,然后在支付接口使用时,直接从map中获取即可,就相当于放到了缓存中。

  • 而配置中声明的 typeId就是区分子商户的标识 ,xdm可以根据业务场景去自定义即可。

  • 这样,不论是支付下单还是退款,都能直接读取到对应子商户的配置,从而支付下单或原路退回。

  • 本篇主要不是讲功能的,所以不在这里面的细节上过多赘述。

  • 如果有面试官问这个问题,你只需要说出配置和读取的思路就行。

先业务下单还是支付下单

  • 如果面试官问了这个问题,就属于是送分题了。
  • 肯定是先业务下单,因为支付功能是基于业务的基础上进行的,如果业务订单不记录下来,后面整个流程都没头没尾,一些业务相关的数据你也获取不到,状态也更新不了。
  • 所以要先记录下业务订单,包含订单号、业务类型、业务状态等属性,哪怕支付下单失败,你也有业务订单的痕迹可查。

下单后不支付怎么处理

  • 这个问题有多种答案,不同公司会有不同的做法,我这里分享一下我的做法。
  • 下单后如果不支付,这笔订单就不做处理,再次下单时生成一笔新的订单,原来的那个订单就当做废订单。
  • 对于中小企业而言,这种方案我觉得最简单,废订单的量也不会有你想象的那么多。
  • 另外,微信支付不能用重复的订单号再次下单,会报错,所以这个方案也顺便规避了这个问题。
  • 如果有面试官问这个问题,可以参考我这个做法来回答,这也是我待过的两家互联网公司都用过的方案。

你们有支付中心吗,如何处理回调的

  • 面试官问这个问题,大概率是想知道你们有没有对支付服务做解耦。
  • 微信和支付宝下单成功后,都会通过回调通知返回给你,这种情况下,说明肯定支付成功了。
  • 正常而言,只需要配置回调地址即可,但是在分布式的环境中,支付服务一般是独立出来的,也就是会搭建一个支付中心,我们假定是微服务的架构,支付中心是pay服务,那么其他服务用到支付接口都是调pay服务的接口。
  • 所以回调接口肯定是要写在pay服务里面的,这里就会有一个问题,pay服务收到了回调通知,如何告诉其他业务服务呢?
  • 这里就要引入MQ,比如RabbitMQ,在回调中更新支付订单状态后,要通过它来转发到其他业务服务,其他业务服务消费MQ之后,继续处理自己的业务逻辑。
  • 这样就做到了解耦,只要回答出这一点,也能说明是接入过支付功能的。

你们如何处理重复回调的问题

  • 微信和支付宝是有概率犯病的,虽然很小,但确实有,我就遇到过。
  • 这个时候你可能会想到,我在业务逻辑上做判断不就好了,如果已经更新过状态了,就不再处理了。
  • 理论上可以,但实战的话依然会有很多现实问题。
  • 首先,你如何保证回调中的业务逻辑处理有多少,真实业务场景下,不单单只会更新一下状态,你可能还会做一些入库、发消息、rpc调用等等一系列操作,这都是基于业务决定的,你很难说每次都能用同样的办法解决。
  • 另外,我有在工作中通过日志平台观察过重复回调的时间间隔,微信或支付宝的重复回调几乎都是同1秒发生的,是不是感到有点熟悉,有点类似于处理高并发的问题了对吗。
  • 如果你们是分布式架构,且业务量达到一定规模,那么这个问题一旦发生,你单纯靠代码判断是不保险的。
  • 所以,最简单可靠的办法还是把回调中处理业务逻辑的代码都抽取到一个方法中,然后对这个方法上 分布式锁
  • 如果面试官问到你这个问题,你就说用分布式锁即可。

回调中第三方业务处理失败,如何退款的

  • 这个问题对于完全没在企业中接入过支付功能的xdm来说,就是比较难回答的了,因为牵扯到第三方,那说明回调中很可能还要走rpc调用来完成某些业务确认操作。
  • 我曾经专门写过一篇真实发生的关于微信支付退款逻辑不严谨导致重大事故的文章,里面有讲过这个流程,有兴趣的可以自己找找看。
  • 记住,千万别张口就说程序自动退款,这是非常不严谨的,牵扯到钱的东西,都是要谨慎的,如果是服务商模式,更是如此,因为那都是客户的钱。
  • 我这里把其中一些重点罗列出来:
    • 支付时,要先支付下单,回调中再进行rpc业务确认(先付钱再给票),因为你是服务商,要优先维护客户的利益,试想如果先给了票,结果人家不给钱直接跑了,那客户不就亏了么;
    • 回调中,如果rpc业务确认失败,就将这笔订单记录到一张异常记录表中,这张记录表的作用就是专门处理rpc调用失败需要进行退款的订单数据;
    • 定时任务扫描异常记录表,比如15分钟一次,将这些确认失败的订单费用都原路退回;
    • 执行退费逻辑之前,还得先rpc调一下第三方的查询确认状态接口,对方没有那么你必须要求他们提供,只有保证对方明确可以退,你才能再走微信或支付宝的退费接口,否则可能导致多退。因为会存在一种情况,就是第三方自己其实确认成功了,但是网络问题超时或他们程序漏洞导致返回给你是失败的,那么你以为可以退,结果退了后这钱是短款,你就得承担损失了。
    • 这个流程还是蛮复杂的,不想清楚很容易把自己搞死,所以在接入支付功能时,一定要自己画一画,把整个逻辑理清楚,然后再开始编码。

你知道微信支付宝退款的时限吗

  • 这个很多人反而不知道,因为网上的教程是不会告诉你的,往往是真实企业中维护过支付功能才会知道,因为你经常要处理一些退费,那么此时就很可能遇到这个问题。

  • 微信和支付宝的政策是不同的,而且可能会变,所以如果要面试的公司是要求懂支付功能的,你最好分别到微信和支付宝的官方文档中查看下最新的规定。

  • 我这里找了下分享给各位

  • 微信支付

  • 在这里插入图片描述

  • 支付宝支付

  • 在这里插入图片描述

你了解聚合支付吗

  • 一般互联网公司接入支付接口,聚合支付大概率是跑不掉的。
  • 简单理解就好,以国内目前的情况来说,大多数情况也就是微信和支付宝的聚合。
  • 为了更好理解,我这里举个好懂的例子,就是大家去医院看病的时候,是不是有时候医生会给你打印出一个凭条,凭条上会有个二维码,然后你直接扫码进行支付就可以了对吧。
  • 其实这就是一种聚合支付,这个二维码本质就是一个链接,链接里面会有对方提供给你的参数,你扫码的时候也就是读取这些参数的过程,拿到参数后就可以去展示订单详情,然后进行后续的支付等等。
  • 你不管用微信或支付宝哪个载体去扫码,实际上就是走的哪个渠道,前端是可以传递渠道信息给服务端的,如果是小程序那更简单,直接会自动识别并唤起对应的小程序订单详情界面。
  • 这里面微信支付的话,还需要在微信公众平台中配置一个转发链接,除此以外也没什么其他操作了,聚合支付其实没有那么复杂。
  • 大家以后如果有幸在生活中接触到聚合支付的场景,完全可以把聚合码拍下来,然后回去上网搜索草料二维码,用解码器把这个聚合码解析出来,你就能看见到底是个什么玩意儿了。

对账你了解多少

  • 正常来讲,面试官一般不会问这个的,因为没啥必要,除非这个公司专门招需要懂得对账的工程师。
  • 如果真问到你了,你可以稍微聊聊,别一问三不知就行。
  • 企业级的支付功能,是肯定要有对账的,尤其是给客户提供支付服务,对账平台也是其中重要的一环,要帮助客户财务平账。
  • 你可以告诉面试官,你们是接入的第三方对账平台,这个回答是最简单的,变相告诉对方你见过用过,这就可以了。
  • 你如果说对账平台是你们自己做的,对方若是个懂行的,估计会问你更多细节,所以我不推荐面试中主动这么回答。
  • 简单来讲,对账的方法是调微信、支付宝、第三方(如果有)的账单接口,拉取到账单然后进行订单的比对,计算出长款多少,短款多少,财务主要关心的是短款,因为短款表示客户亏钱了,那么财务就要追踪这些款项丢失的原因,如果是长款,财务可问可不问,因为是多收的钱,对于财务来讲没所谓,有人找来就人工退掉,没人找来不就白赚么。
  • 总而言之,对账的目的是为了辅助财务查账,通过对账平台,财务可以清晰直观地看到每天的对账结果。

总结

  • 如果哪一天有面试官问你这些东西,你只要回答了,别人立马就知道你是正儿八经做过支付的。
  • 最后回归到开头我问的那个问题,xdm知道我以前面试别人问的是其中哪个问题么,我可以透露下,我不会问很复杂的,但是一个问题就能知道对方是不是真的做过。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

面试官随便问几个问题就知道你究竟做没做过微信支付宝支付 的相关文章

  • Java:如何将ArrayList作为对象的实例变量?

    我正在开展一个班级项目 用 Java 构建一个小型 Connect4 游戏 我目前的想法是拥有一类 Columns 它具有一些整数 索引 最大长度 isFull 作为实例变量 以及一个 ArrayList 来接收上面的整数和每个玩家的表现
  • 知道 akka actor 何时完成

    有几个人和我一起从事一个项目 一直在试图找出解决这个问题的最佳方法 看起来这应该是经常需要的标准东西 但由于某种原因我们似乎无法得到正确的答案 如果我有一些工作要做 并且我向路由器抛出一堆消息 我如何知道所有工作何时完成 例如 如果我们正在
  • GSON:如何在保持循环引用的同时防止 StackOverflowError?

    我有一个带有循环引用的结构 出于调试目的 我想转储它 基本上任何格式都可以 但我选择了JSON 由于它可以是任何类 所以我选择了不需要 JAXB 注释的 GSON 但是 GSON 会遇到循环引用并递归直到StackOverflowError
  • 无法使用 Maven 编译简单的 Java 10 / Java 11 项目

    我有一个简单的 Maven 项目 src main java module info java pom xml pom xml
  • “android.enableUnitTestBinaryResources”已弃用[重复]

    这个问题在这里已经有答案了 我刚刚更新了我的 Android Studio 现在当我构建我的项目时 我收到此错误 选项 android enableUnitTestBinaryResources 已弃用 这 当前默认值为 假 已从当前版本中
  • Glide:如何使用 Glide v4 调整 gif 大小并将其另存为文件?

    我想调整 gif 文件的大小并保存它 我尝试使用一些建议的方法 但这些方法给出了错误 后来我知道有些方法在 Glide 中已被弃用v4 byte bytes Glide with context asGif load url toBytes
  • Servlet 包含 Tomcat 中的 HTTP 标头

    我有一个 servlet 它的请求调度程序包含另一个 servlet 包含的 servlet 设置了我想在包括小服务程序 因此 我在 include 方法中传入一个自定义 HTTPResponse 对象 该对象捕获来自 servlet 的所
  • GWT 和 Web 服务 (wsdl)

    谁能告诉我一种从 GWT 客户端访问 WSDL Web 服务的方法 这可能吗 Thanks 智能网关 http www smartclient com product index jsp支持 WSDL 数据源 除此之外 您始终可以将 WSD
  • 何时使用环境变量与系统属性?

    我想知道以下哪种方法是首选方法 我们可以将事情设置为APP HOME path to file export in profile或类似的东西 并将其访问为System getenv APP HOME 或者 也可以使用属性作为 DAPP H
  • Java - Servlet 的默认 contentType

    在servlet中 通常我们会指定一个contentType 然后我们就可以打印出html代码了 response setContentType text html PrintWriter out response getWriter 如果
  • 动态元素 ID 到 setId(int) - Android

    我看到了语法定义setId int and findViewByID int 但我们如何使用findViewById R id row1 我尝试使用这个 Object1 setId Integer parseInt repeat 它没有显示
  • 无法在IntelliJ IDEA中编译和运行java代码

    使用 IntelliJ IDEA 版本 12 1 6 我想运行 Horstmann Core Java 书中的示例 public class Welcome public static void main String args Strin
  • Swing 是否支持 Windows 7 风格的文件选择器?

    我刚刚添加了一个标准 打开文件 与我正在编写的一个小型桌面应用程序的对话 基于JFileChooserSwing 教程的入口 http download oracle com javase tutorial uiswing componen
  • 如何将跨源资源共享与 Spring MVC 4.0.0 RESTful Webservice 集成

    我有一个简单的 Web 服务返回JSON data The 用户等级 com bargadss SpringService Domain 是个POJO类包含 用户 ID 名字 姓氏 电子邮件 The 用户服务类 com bargadss S
  • Apache POI - JAVA - 迭代 Excel 中的列

    这里是java新手 我正在编写一个代码 该代码读取 Excel 文件 查看列中的单元格 然后编写如下表所示的内容 我有一个 Excel 文件 如下所示 col1 col2 col3 col4 row1 2 3 1 1 w row2 3 2
  • 如果Jetty的密钥库中有多个证书,它如何选择?

    我们的系统中有一些代码用于自动将自签名证书生成到密钥库中 然后由 Jetty 使用 如果给定主机的密钥已经存在 那么什么也不会发生 但如果它不存在 我们会生成一个新密钥 如下所示 public void generateKey String
  • 将十六进制字节数组解码为特定代码页在随后编码时会产生错误结果

    我创建了一个简单的应用程序 如下所示 String stringValue new String new byte 0x00 0x00 0x00 0x25 273 byte valueEncoded Arrays copyOfRange s
  • 将 XML 转换为 Java 对象 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • JVM 是否会内联对象的实例变量和方法?

    假设我有一个非常紧密的内部循环 每次迭代都会访问和改变一个簿记对象 该对象存储有关算法的一些简单数据 并具有用于操作它的简单逻辑 簿记对象是私有的和最终的 并且它的所有方法都是私有的 最终的和 inline 下面是一个示例 Scala 语法
  • “您的安全设置已阻止本地应用程序运行”Java 8

    我正在尝试在 Chrome 窗口中运行一个小小程序 但收到错误消息 我确实看到所有回复都告诉我将安全性更改为中级 但版本 8 中不存在该选项 到目前为止 几个小时的谷歌搜索和向同学寻求帮助没有带来任何进展 有人可以建议一下吗 Medium在

随机推荐

  • 电脑操作系统的发展史:从初级到高级的演变

    自电脑诞生以来 操作系统作为其重要组成部分 不断推动着电脑技术的进步与发展 本文将带您回顾电脑操作系统的发展历程 探究其在不同阶段的特点与影响 一 早期操作系统 真空管与批处理 在电脑诞生初期 真空管技术占主导地位 此时的操作系统尚未形成完
  • 人工智能 AI 如何让我们的生活更加便利

    每个人都可以从新技术中获益 一想到工作或生活更为便利 简捷且拥有更多空余时间 谁会不为之高兴呢 借助人工智能 每天能够多一些空余时间 或丰富自己的业余生活 为培养日常兴趣爱好增添一点便利 从电子阅读器到智能家居 再到植物识别应用和智能室内花
  • 鸿蒙开发Flex、栅格布局详解

    Flex弹性布局 一 direction 1 FlexDirection Row 主轴为水平方向 子组件从起始端沿着水平方向开始排布 2 FlexDirection RowReverse 主轴为水平方向 子组件从终点端沿着FlexDirec
  • 独家 | 鸿蒙(HarmonyOS)开发详细学习笔记免费分享

    前言 华为宣布 将在1月18日 在北京 上海 杭州 南京 成都 厦门 武汉 长沙 8 大城市同时召开大会 届时将揭秘鸿蒙生态和 HarmonyOS NEXT 进阶新篇章 简单的来说就是 纯血鸿蒙系统 即将彻底揭晓 鸿蒙系统自推出来以来 就一
  • SpringBoot中整合ElasticSearch快速入门以及踩坑记录

    场景 若依前后端分离版手把手教你本地搭建环境并运行项目 若依前后端分离版手把手教你本地搭建环境并运行项目 本地运行若依前后端分离 CSDN博客 参考上面搭建项目 ElaticSearch Elasticsearch 是java开发的 基于
  • 会议设备:提升会议体验与效率的关键

    在当今高度信息化的社会 会议已成为企业 机构和团队之间交流与合作的重要方式 而会议设备的选择与使用 对于提升会议的体验与效率具有举足轻重的地位 本文将详细探讨会议设备的重要性 以及如何选择和使用合适的会议设备 以实现高效 顺畅的沟通 首先
  • Android Studio Android Flutter问题记录 - UNABLE TO FIND BUNDLED JAVA VERSION

    前言 有个紧急问题需要修复 本以为很快就能解决继续休假 没想到项目打开运行后Android端跑不起来了 iOS端正常运行 这就有点莫名其妙 明明放假前还是没问题的 难道我拉取的最新代码有问题 不会吧 谁放假还敲代码啊 樂 看了下最新的提交记
  • 30天精通Nodejs--第二十二天:express-认证和授权

    目录 引言 理解JWT及其工作原理 安装与引入JWT库 生成JWT令牌 验证JWT令牌 注意事项与最佳实践 结语 引言 在现代Web应用开发中 JSON Web Tokens JWT 作为一种轻量级 自包含且安全的标准 已被广泛用于实现用户
  • Kubernetes (十一) 存储——Secret配置管理

    一 简介 从文件创建 echo n admin gt username txt echo n westos gt password txt kubectl create secret generic db user pass from fi
  • AI在保护环境、应对气候变化中的作用

    对于AI生命周期数据领域的全球领导者而言 暂时搁置我们惯常的AI见解和AI生命周期数据内容产出 来认识诸如世界地球日这样的自然环境类活动日 似乎是个奇怪的事情 我们想要知道 数据是否真的会影响我们的地球环境 简而言之 是 确实如此 但作为一
  • 数据加密保障数据安全

    一 目标 1 1 预研需求 数据加密是安全领域中常用的安全措施 它们的主要作用是保护数据的机密性和完整性 以防止未经授权的访问 窃取 篡改或泄漏敏感信息 数据传输加密 保护敏感数据在传输过程中的安全 当数据通过网络传输时 它们可能会经过多个
  • AI在广告中的应用——预测性定位和调整

    营销人员的工作就是在恰当的时间将适合的产品呈现在消费者面前 从而增加他们购买的可能性 随着时间的推移 营销人员能够深入挖掘越来越精准的客户细分市场 他们不仅具备了实现上述目标的能力 而且这种能力还在呈指数级提升 在AI技术帮助下 现在的营销
  • Kubernetes (十二) 存储——Volumes配置管理

    一 卷的概念 官方地址 卷 Kubernetes https v1 24 docs kubernetes io zh cn docs concepts storage volumes 二 卷的类型及使用 emptyDir卷 1 创建编辑文件
  • JVM优化之 -Xss -Xms -Xmx -Xmn 参数设置

    JVM优化之 Xss Xms Xmx Xmn 参数设置 XmnXmsXmxXss有什么区别 Xmn Xms Xmx Xss都是JVM对内存的配置参数 我们可以根据不同需要区修改这些参数 以达到运行程序的最好效果 Xms 堆内存的初始大小 默
  • 图片编辑软件有哪些好用的?这几款快收藏吧

    你有没有过这样的经历 精心拍摄了一组照片 却发现有些角度不对 光线不够好 或者想要给图片加上一些特别的滤镜效果来达到心目中的样子 这时 你就需要一款合适的图片编辑软件了 但是 市面上的图片编辑软件琳琅满目 哪一款才是适合自己的呢 别担心 今
  • 30天精通Nodejs--第二十一天:express-依赖注入

    目录 引言 Express中的模块化实践 依赖注入 什么是依赖注入 Express中实现依赖注入 结语 引言 在构建大型且复杂的Node js Express应用程序时 良好的架构设计至关重要 模块化编程可以帮助我们把代码分解为可复用 易维
  • 面试官问,如何在十亿级别用户中检查用户名是否存在?

    面试官问 如何在十亿级别用户中检查用户名是否存在 前言 不知道大家有没有留意过 在使用一些app注册的时候 提示你用户名已经被占用了 需要更换一个 这是如何实现的呢 你可能想这不是很简单吗 去数据库里查一下有没有不就行了吗 那么假如用户数量
  • 数据库 | 面试官:一次到底插入多少条数据合适啊?.....面试连环炮

    数据库 面试官 一次到底插入多少条数据合适啊 面试连环炮 数据库插入操作的基础知识 插入数据是数据库操作中的基础 但是 我们程序员将面临随之而来的问题 如何快速有效地插入数据 并保持数据库 性能 当你向数据库中插入数据时 这些数据直接存储到
  • PCL点云库使用

    一 下载PCL文件 下载地址 如1 12 0版本 PCL 1 12 0 AllInOne msvc2019 win64 exe 安装该文件可为后续编译源码提供必要的第三方库 pcl 1 12 0 pdb msvc2019 win64 zip
  • 面试官随便问几个问题就知道你究竟做没做过微信支付宝支付

    面试官随便问几个问题就知道你究竟做没做过微信支付宝支付 你知道直连模式和服务商模式吗 网上的课程一般给你演示的都是直连模式 而企业中有不少是申请成为了服务商 因为里面有佣金提成 我粗俗地解释 直连模式 就是说你是一个会做生意的老板 自己会搞