海外支付:抵御信用卡欺诈的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. Android禁止横屏竖屏切换

    在Android中要让一个程序的界面始终保持一个方向,不随手机方向转动而变化的办法: 只要在AndroidManifest.xml里面配置一下就可以了. 在AndroidManifest.xml的ac ...

  2. 开始学习IOS

    最好的学习方式就是动手. 对于有编程经验的程序员来说,学习另外一门技术最好的方式就是coding,虽然基础知识和IDE都不熟悉,但是在写代码的过程中,不断的解决问题,不断查找资料,不断感悟代码,一切都 ...

  3. 【linux】locate介绍

    Locale和everything 类似,有本地的检索库,它会自动更新检索库,但新创建的文件,不能用locale 查到,需要手动更新检索库update db 才能搜索到,在/tmp 目录下的文件不能搜 ...

  4. SPOJ #752. Power it!

    By property of mod operations , we can simply use Divide and Conquer + Recursion to solve it. Refere ...

  5. oracle学习笔记(四)oracle内存优化

    emca -config dbcontrol db -repos recreate 解决'oracle Environment variable ORACLE_SID not defined. Ple ...

  6. Hadoop学习5--配置本地开发环境(Windows+Eclipse)

    一.导入hadoop插件到eclipse 插件名称:hadoop-eclipse-plugin-2.7.0.jar 我是从网上下载的,还可以自己编译. 放到eclipse安装目录下的plugins文件 ...

  7. POJ 1410 Intersection(计算几何)

    题目大意:题目意思很简单,就是说有一个矩阵是实心的,给出一条线段,问线段和矩阵是否相交解题思路:用到了线段与线段是否交叉,然后再判断线段是否在矩阵里面,这里要注意的是,他给出的矩阵的坐标明显不是左上和 ...

  8. codeforces 336D. Vasily the Bear and Beautiful Strings 组合数学 dp

    题意: 给出n,m,g,求好串的个数 0 <= n,m <= 10^5,n + m >= 1,0 <= g <= 1 好串的定义: 1.只由0,1组成,并且恰好有n个0, ...

  9. RabbitMQ介绍3 - 运行和管理RabbitMQ

    安装.官方介绍:http://www.rabbitmq.com/download.html.一般产品环境会部署到Linux环境,但做为简单尝试,可以部署到Windows上(这里是部署介绍:http:/ ...

  10. 编译器错误消息: CS0234: 命名空间“Purple”中不存在类型或命名空间名称“Model”(是否缺少程序集引用?)

    编译错误 “/storeimg”应用程序中的服务器错误. 编译错误 说明: 在编译向该请求提供服务所需资源的过程中出现错误.请检查下列特定错误详细信息并适当地修改源代码. 编译器错误消息: CS023 ...