海外支付:抵御信用卡欺诈的CyberSource

吴剑 2014-06-04

原创文章,转载必需注明出处:http://www.cnblogs.com/wu-jian

吴剑 http://www.cnblogs.com/wu-jian

前言

最近技术文章写的很少,不是因为不热爱技术了,而是因为随着年龄越来越大,各种压力也随之而来,无法做到像刚毕业那会儿,纯碎的学习和研究一个技术话题。

在深圳搬过很多次家,家具换了很多次,但一直没变的是大书架上的书越堆越多,有时在书架前徘徊一会儿,看着.Net Framework从1.1到了4.5、看着Web Service成了WCF、看着Javascript风起云涌......我在想,对于一个开发者来说,他不断追寻技术的最终目标到底是什么?为了一个程序诞生那一瞬间心理和身理的愉悦?为了工作为了生活为了养家糊口老婆孩子?

在中国12年算一轮回,如果前12年我在乐此不疲学习,那么后12年我希望在学习的同时能用所学干一些有意义的事情。最近在整理一些商业应用的文章,最近两年都在做海外支付,好吧,那么就从海外支付说起:

海外支付:遍布全球的Paypal

海外支付:抵御信用卡欺诈的CyberSource

海外支付:南美的AstroPay

海外支付:俄罗斯的Yandex与WebMoney

吴剑 http://www.cnblogs.com/wu-jian

概述

在欧美地区,Paypal与信用卡为两大主要在线支付方式。Paypal大家都很熟悉,而信用卡,相信做海外电商的企业在这上面都吃过苦头,因为信用卡会面临一个严峻问题:欺诈风险。

Visa 于2010年以20亿美金收购了 CyberSource 成为它的全资控股子公司。在中国大的在线支付平台背后,几乎都有CyberSource提供的反欺诈服务,如阿里的支付宝、腾讯的财富通......

<图1.CyberSource支付流程>

吴剑 http://www.cnblogs.com/wu-jian

Secure Acceptance

图1描述了CyberSource信用卡支付的完整流程(使用CyberSource支付网关,使用CyberSource Decision Manager),同时本文针对非PCI认证商家(即信用卡信息必须存在于第三方)。

OK,第一个步骤是采集用户的设备指纹,即通过一些CyberSource提供的API来唯一识别一个用户;然后通过Secure Acceptance接口向CyberSource发起信用卡的授权请求。在这个请求中包含了支付相关的所有信息,比如支付币种、金额、账单信息等等,以及如果使用CyberSource Decision Manager附带的风控所需数据。

此处,需要特别注意如下几点:

1、CyberSource会对Secure Acceptance的请求数据进行验证(如字段长度,字段特殊字符等,在API开发文档中有相关章节,但由于开发文档版本迭代频繁,此处需要测试用例的合理覆盖),如验证未通过,不会进行银行授权,直接Return一个“Request parameters are invalid or missing”至商家页面。因为未进行银行授权,所以Return回来时不会包含网关ID这个关键参数,后续也就无法进行Capture或Reversal动作。

2、如果用户的Secure Acceptance请求经过了Decision Manager,Return回来时会包含DM的决策结果,同时在DM API中会再次将决策结果通知到商家(见Decision Manager章节)。

3、Secure Acceptance的结果由CyberSource商户后台配置的URL进行回调,这里可能会存在一个中断,比如因为网络原因导致Return结果未到达商家服务器,因此后面需要一个单独的程序来定期进行查询和处理(见对中断的处理章节)。

吴剑 http://www.cnblogs.com/wu-jian

Decision Manager

CyberSource的强大之处在于它的反欺诈服务,这个服务称之为:Decision Manager。

CyberSource DM系统很容易让我联想到西蒙斯和他的文艺复兴公司(Renaissance Technologies Corp),通过大数据,通过算法,通过数学模型玩转对冲基金,收益甚至把巴菲特甩了几条街。CyberSource Decision Manager也干着类似的事情,首先它有足够大的用户交易行为数据,一旦你使用CyberSource,你也成为了它的数据源贡献者,然后它构建数学模型,对用户的行为进行分析,揪出欺诈用户,当然,最重要的是按次计费。但不可否认CyberSource在在线反欺诈领域还是赫赫有名的。

OK,看看CyberSource Decision Manager的大至工作流程:

<图2.CyberSource Decision Manager逻辑>

CyberSource Decision Manager提供一个庞大的后台,在这里面你可以配置非常多非常复杂的规则。为了清晰描述Decision Manager的工作流程,例举一个最简单自定义规则:当用户来自俄罗斯,自动拒绝交易;当用户来自美国,自动允许交易;当用户来自日本,需人工审核来决定是否允许交易。如上图所示,Decision Manager的工作流程就很清晰了。

当收到CyberSource Decision Manager结果时,代表了Authorization(银行授权)已通过,授权通过后用户信用卡里的金额会被临时冻结,此时用户如果查询会发现卡内余额减少, 因此当授权通过后应尽快进行后续动作,要么对这笔金额进行收款,即发起Capture;要么把这笔金额归还给用户,即发起Reversal。当然,如果你什么都不做,一段时间后银行会自动Reversal把冻结的款项归还给用户,只是这个时间段如果用户查询余额会觉得困惑,因为在商家网站付款未成功,而卡内余额却减少了。

需要注意的是CyberSource Decision Manager结果通知可能因为网络或其它原因中断,无法送达商家服务器,而CyberSource不会像Paypal一样会有重试机制,因此后面我们同样需要一个单独程序来定期询问CyberSource,有哪些支付在DM中已有结果而未送达商家的。

吴剑 http://www.cnblogs.com/wu-jian

对中断的处理

在图1的第6步和第7步,由CyberSource将结果发送至商家服务器,中间可能因为各种原因(如网络故障、接收程序异常)导致消息未送达。此时如果不及时处理会带来糟糕的用户体验,如果拖延时间太长,即使最后付款处理成功,也极容易导致用户的Chargeback,而Chargeback过高,收单行就会拒绝与商家的合作,所以不论何总支付方式,总会考虑处理意外中断,合作不易,与银行长期稳定的合作更不易,且行且珍惜。

<图3.授权中断处理>

Secure Acceptance可能存在结果未响应的情况(根据个人经验,实际每天都会有一定数量的交易出现该情况)。如上图所示,我们通过一个单独程序把每笔未收到结果的交易拿去CyberSource查询比对,然后按响应结果进行后续逻辑处理。需要注意的是CyberSource提供的查询API以银行授权结果为前提,当一笔交易未进行银行授权时,返回的结果类似于NULL;另外当一笔交易在DM结果为Review,并且已人工处理完成时,在此处拿到的结果仍为Review状态,如要正确处理,就需要另一个针对Decision Manager的中断处理程序。

<图4.DM中断处理>

当Decision Manager进入人工审核,同样通过商户后台配置的一个回调URL回传审核结果(见图1中的步骤7)。此处如果商户不能接收到结果,就会导致该收的款未收,该退的款未退。我们做电商,知道用户从选择商品、下单、再到支付,是一个逐渐流失的过程,每个用户到了支付环节都是来之不易的,如果在最后一步因为技术原因导致用户付款失败,实在是一件极不划算的事情。

需要注意的是CyberSource在此处提供的查询API,是针对Decision Manager中人工审核的结果,交易如果被DM中的规则自动拒绝或自动通过,是在Secure Acceptance中断程序中来处理的。如果很不幸,一笔交易在步骤6和步骤7处同时发生了中断,因为两处API分工不同,就必须保证Secure Acceptance中断处理程序先执行,DM中断处理程序后执行。

吴剑 http://www.cnblogs.com/wu-jian

后记

关于CyberSource的服务,他们的技术团队在美国,售前在香港,所以一些具体的技术问题沟通较消耗时间。接入上线后,技术沟通就只能与他们美国方面进行,很是不方便。他们中国地区的售前和风控团队还算有问必答,只是一些技术相关的细节问题,需要中转至美国,效率会偏低一点。

关于海外信用卡支付,国内也有不少公司在做,但曾经有过惨痛的教训,最终迫不得已选择了CyberSource。

关于支付的风险控制,相信每个商家都在做或计划在做,但因为没有大数据的支撑,比如一个用户第一次来你的网站支付,你无法知道他之前在别家网站是否有欺诈行为,而CyberSource有这方面数据,所以他提供收费服务。对商家来说能化繁为简,专业的事交给专业的人去做,也未偿不是件好事。

关于收单行,令人遗憾的是国内的各大银行,目前都很难在国际上得到认同,香港是一个不错的选择。

最后稍说明一下,因为涉及到交易与安全,本文并未涉及到具体技术细节,如有需要,欢迎与本人取得联系。

吴剑 http://www.cnblogs.com/wu-jian

如果您觉得本文对您有所帮助,可用微信扫描左侧二维码向作者捐赠。您的支持是原创的源动力!

作者:吴剑
出处:http://www.cnblogs.com/wu-jian/
本文版权归作者所有,欢迎转载,但必需注明出处,并且在转载页面明显位置给出原文连接,否则保留追究法律责任的权利。

海外支付:抵御信用卡欺诈的CyberSource的更多相关文章

  1. 海外支付:遍布全球的Paypal

    海外支付:遍布全球的Paypal 吴剑 2015-11-26 原创文章,转载必需注明出处:http://www.cnblogs.com/wu-jian 吴剑 http://www.cnblogs.co ...

  2. 【原创 Hadoop&Spark 动手实践 12】Spark MLLib 基础、应用与信用卡欺诈检测系统动手实践

    [原创 Hadoop&Spark 动手实践 12]Spark MLLib 基础.应用与信用卡欺诈检测系统动手实践

  3. ML.NET 示例:二元分类之信用卡欺诈检测

    写在前面 准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正. 如果有朋友对此感兴趣,可以加入我:https://github.com/fei ...

  4. kaggle信用卡欺诈看异常检测算法——无监督的方法包括: 基于统计的技术,如BACON *离群检测 多变量异常值检测 基于聚类的技术;监督方法: 神经网络 SVM 逻辑回归

    使用google翻译自:https://software.seek.intel.com/dealing-with-outliers 数据分析中的一项具有挑战性但非常重要的任务是处理异常值.我们通常将异 ...

  5. 从信用卡欺诈模型看不平衡数据分类(1)数据层面:使用过采样是主流,过采样通常使用smote,或者少数使用数据复制。过采样后模型选择RF、xgboost、神经网络能够取得非常不错的效果。(2)模型层面:使用模型集成,样本不做处理,将各个模型进行特征选择、参数调优后进行集成,通常也能够取得不错的结果。(3)其他方法:偶尔可以使用异常检测技术,IF为主

    总结:不平衡数据的分类,(1)数据层面:使用过采样是主流,过采样通常使用smote,或者少数使用数据复制.过采样后模型选择RF.xgboost.神经网络能够取得非常不错的效果.(2)模型层面:使用模型 ...

  6. 机器学习_线性回归和逻辑回归_案例实战:Python实现逻辑回归与梯度下降策略_项目实战:使用逻辑回归判断信用卡欺诈检测

    线性回归: 注:为偏置项,这一项的x的值假设为[1,1,1,1,1....] 注:为使似然函数越大,则需要最小二乘法函数越小越好 线性回归中为什么选用平方和作为误差函数?假设模型结果与测量值 误差满足 ...

  7. 100天搞定机器学习|Day56 随机森林工作原理及调参实战(信用卡欺诈预测)

    本文是对100天搞定机器学习|Day33-34 随机森林的补充 前文对随机森林的概念.工作原理.使用方法做了简单介绍,并提供了分类和回归的实例. 本期我们重点讲一下: 1.集成学习.Bagging和随 ...

  8. 信用卡欺诈数据的分析-excel篇

    本篇文章为大家提供了数据集分析的思路和步骤,同时也分享了自己的经验. 一.背景 反欺诈是一项识别服务,是对交易诈骗.网络诈骗.电话诈骗.盗卡盗号等行为的一项风险识别.其核心是通过大数据的收集.分析和处 ...

  9. 使用SAE(VAE)检测信用卡欺诈——感觉误报率还是比较高啊 70%+误报 蛋疼

    from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScale ...

随机推荐

  1. 十个 MongoDB 使用要点

    转自: 十个 MongoDB 使用要点    从 mongodb 阶段性技术总结 中抽取并整理了对大家有帮助的十个要点:   1.mongodb 表名和字段名统一用小写字母 mongodb 是默认区分 ...

  2. 使用Cyclone IV控制DDR2

    根据你的DDR2手册配置好megacore,megacore会生成一个example top: 在quartus中运行megacore生成的xxx_pin_assignments.tcl,指定DDR2 ...

  3. Python 字典和列表的对比应用

    Q:将下列格式的txt文件,打印出该选手的3个最快跑步时间 james2.txt =>“James Lee,2002-3-14,2-34,3:21,2.34,2.45,3.01,2:01,2:0 ...

  4. HTML5 中已经可以用 Ajax 上传文件了,而且代码非常简单,借助 FormData 类即可发送文件数据。

    <?phpif (isset($_POST['upload'])) { var_dump($_FILES); move_uploaded_file($_FILES['upfile']['tmp_ ...

  5. hi35183e增加exfat文件系统的支持

    64G-128G的tf卡文件系统格式为exfat,而hi3518e默认只支持fat32格式的tf卡.为了挂载64G以上的tf卡,只能将sd卡先格式化成FAT32.鉴于exfat性能比FAT32强,因此 ...

  6. 103. Binary Tree Zigzag Level Order Traversal

    Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...

  7. Unable to locate Android SDK used by project

    Unable to locate Android SDK used by project: DJIgojava.lang.RuntimeException: Unable to locate Andr ...

  8. Segment fault及LINUX core dump详解

    源自:http://andyniu.iteye.com/blog/1965571 core dump的概念: A core dump is the recorded state of the work ...

  9. Git-Flow

    Overview Git-Flow is a high-level command set wrapping low-level Git commands to support the "s ...

  10. Spark工程开发常用函数与方法(Scala语言)

    import org.apache.spark.{SparkContext, SparkConf}import org.apache.spark.sql.{SaveMode, DataFrame}im ...