笔者最近在做外币虚拟信用卡的项目,项目马上上线。现在抽出来点时间对整个项目做个简单总结,希望借这篇文章能跟读者有进一步的交流。
一、项目准备
1)选择卡片类型在项目的初期,我们需要明确卡片的最终使用场景,是用于特定行业的商户还是需要覆盖尽可能多的海外商户,这能帮助我们最终决定选择预付卡、借记卡、还是信用卡。通常海外商户对信用卡的支持程度最高,其次是借记卡,最后是预付卡。笔者的项目是面向B端,覆盖跨境出口电商和海外线上消费,需要更广的海外商户覆盖度,选的是企业借记卡。
2)选择发卡通道确定好使用场景后我们需要选择接入的卡组织,一般我们都会选择Visa或Mastercard,实力大的公司可以直接跟Visa、Mastercard做对接来发卡,当然更多的企业是对接发卡通道来完成发卡。笔者项目对接的是一家非银行的发卡机构。
3)选择持卡人账户模型就笔者对发卡通道的了解,发卡通道都会提供两种持卡人账户模型供接入企业选择,我们就姑且叫它们鉴权模式和懒人模式。两种模式下通道都会提供我们一个资金池账户,鉴权模式的机制是:交易发生时发卡通道会先询问我们是否要继续完成交易,当我们响应为继续完成交易时,发卡通道实时扣除资金池账户里对应的交易金额;而懒人模式的机制是发卡通道会记录持卡人卡内余额,交易会实时从持卡人的卡内余额扣除对应的交易金额,在交易完成前,我们对交易一无所知。
所以两种模式的区别在于鉴权模式需要我们单独建立并维护在我们这端的一套交易系统和账务系统用于及时响应交易的状态,持卡人看到的卡片余额都是我们自己去维护的;懒人模式下,我们只需要在用户有资金充值过来时通过接口将用户充值的金额从资金池账户转到持卡人的卡账户(实时充值成功)。
通常鉴权模式更为灵活,可扩展性也更强,比如当我们做想做个营销活动,给一部分持卡人一笔小额的授信,懒人模式就需要我们先把所有的授信总金额作为营销成本全部转入资金池账户,再充值到用户的个人账户,资金压力会比鉴权模式大很多。笔者做了两个虚拟卡项目,分别对接了不同的两个发卡通道,用的持卡人账户模型也不一样,选择哪种账户模型取决于我们根据公司业务诉求对项目开展的整体把握。笔者这次的项目用的是懒人模式。
二、项目建设
项目初期准备工作都确定好了,我们就要进入实际建设阶段了。笔者对一期建设规划为依次实现如下功能:
1)查看卡片详情包括卡片余额、完整卡号、CVV、有效期、交易明细。这些我们都直接从发卡通道的接口中获取就行。当然因为大多数发卡通道都是海外的公司,接口的请求响应时间可能会相对较长,针对这个问题,我们可以做一些缓存的策略,比如笔者的项目有主动和被动更新缓存的机制,当用户的个人账户有充值到账时我们会接收到响应的webhook,那么我们就可以以此为触发来更新缓存(被动更新),然后我们以可以固定每几分钟更新缓存(主动更新)来提升用户体验。
2)卡片充值笔者的项目是外币卡项目,因此充值也必须以外币资产充值。由于涉及到一些其他问题,充值的最开始的方案是用户外币资产转账到笔者公司的海外母公司的对公账户,然后再手工转账到资产池账户,最后是调用发卡通道的接口充值到用户的卡账户。此充值方案成本高且手工流程多,因此当时就想在上线前寻找一个更合理的充值方案。
3)卡内余额转出这个没有意料到的是在跟发卡通道聊到马上进行这部分功能开发过程中,突然被告知不支持卡片余额转出(之前讨论业务模型的时候也没提出过意见o(╥﹏╥)o)。于是这部分功能就搁置了。
4)虚拟信用卡卡申请这部分就根据发卡通道需要的资料再结合自身的业务想法设计卡申请流程就好了。
5)充值方案优化在做卡申请的功能时,笔者有了一套更合理的卡片充值方案。对接一款收款产品,然后将受到的款项可以通过接口发起转账到资金池账户的交易。收款产品和接口发起转出的功能相结合,降低了运营成本,提高了资金操作效率。笔者的收款产品不需要发起收款请求,而是直接将收款账户呈现给用户,同时为每个B端用户提供一个唯一的数字码便于我们区分资金来源。
在此基础上,我们衍生出了用户钱包账户的概念。区别上述提到到卡账户,用户账户的余额来自所有转账到收款账户的金额,用户需要再次从用户钱包账户中选择特定的金额充值到用户的卡账户。用户充值卡账户的真实资金流是我们首先把用户要充值的金额从收款账户转出到资金池账户,而这笔转账走的是SWIFT转账,因此时间会较长,为了提升用户体验,我们会先在资金池账户存放一部分备付金,先垫付用户的充值,后批次将收款账户余额转入资金池账户。笔者实行的收款账户到资金池账户的转账策略为固定频率和组包相结合的形式,即每天固定频率检查需要转出的金额是否到达一定的阈值,到达阈值则自动发起到资金池账户,没超过则不进行操作。
6)钱包账户因为引入了钱包账户的概念,因此也提供给客户钱包余额、钱包交易明细查询等功能。这些信息是单独维护在我们这端的,因此不会有接口响应慢的问题。
7)对账这里主要涉及到两部分,一是资金池账户的对账,二是持卡人的交易对账。
由于我们会发起从收款账户到资金池账户的转账,我们需要跟发卡通道每天有资金池账户的余额变动的对账机制,笔者目前没有特意做每天日切时点资金池的余额和批量入账交易的对账,而是简单地把收款账户的转出交易放进待匹配交易库,与资金池账户的转入交易匹配后改变交易的状态。
对于持卡人的交易对账,由于笔者这个项目用的是懒人模式,暂未采取交易对账机制。但是如果接入的是鉴权模式,交易对账还是少不了的。
三、项目后续
至此,虚拟信用卡的一期搭建工作已经差不多了。后续笔者的项目会继续实现如下功能以更好的服务客户:
1)收款账户优化前面提到的收款账户仅用于用户充值,收款账户的优化会是在为每个B端客户提供独立的海外当地收款账户用于接收电商平台(如Amazon店铺)和收单渠道(PayPal)的收款账户。收款账户接收到电商平台或收单渠道的打款后,相应的金额会增加到用户的钱包账户。
2)换汇提供用户钱包账户资产换汇的功能。
3)钱包账户转出前面提到卡账户余额不能转出,我们希望利用钱包账户来资产转出的功能,这样避免用户收到电商平台或收单渠道的打款后因只能充值到卡账户而产生抵触情绪。