JavaEE+互联网分布式开发 开班进行中

小班授课、专家坐镇、真实项目
现在报名,与名师面对面

立即咨询

项目实战:闲话支付与转账


         对于未知,一般来说我们有两种心理:恐惧,或者崇拜。

         恐惧如小时候,我去河里游泳,对于望不见底,黑漆漆、凉飕飕的河水,心中充满了各种可怕的想法。

         崇拜如长大后,对于瑞士银行的软件系统,觉得一定是最顶尖掰的程序猿开发的,直到我发现了我同事的秘密(关于这个梗,咱们改天当面聊)。

         所以如果你跟当年的我一样,也处于初学者或者刚进入开发不久,那么你对于银行、转账、支付、第三方等等概念一定也处在崇拜或者恐惧阶段。而其实只要打破这种未知,你就会发现:原来不过如此。

         我的从业生涯中,现在还记得的,大概接触过如下几种支付通道:银联、工商银行、农业银行、通联、支付宝、微信、paypal、apple支付等。到现在,还老有人时不时找我做支付接口,比如就在昨天,有人还Q我做农行支付~~。说真的,我都不知道大家从哪里搞到我QQ号的。

         你没做过,就会觉得可怕,各种高端神奇、调试不出来。你如果做过,就会发现,这特么的不就是调用个Http服务吗:

         并且,如果你做过了,你就会发现,各家银行和第三方支付的技术支持、开发能力也是各种良莠不分、残次不齐。尤其是一些小行,那个技术能力简直令人发指。我们在做一家小行的企业支付的时候,甚至达到了要教对方的开发怎么去做接口的程度……。还有,不要觉得觉得拿他们的offer很难,我们有一个学员以外包的形式进驻到某第三方支付公司进行开发,未到多久,对方就想将其挖为正式员工。


1. 破除恐惧

         要破除恐惧,我们先拿将支付做到极致的支付宝来入手。

         如果你想增加恐惧,请隔壁去试微信支付,那个调试可不是一般的复杂哦。

         好了,如果你的公司要将平台接入支付宝,那么首先,就得以公司的形式去支付宝的网站申请资质。不要管我问哪里是申请的地方,这么多年来,支付宝不仅支付接口本身,连开发者网站都不知道改版了多少次。那么到底申请资质这件事情在一个公司里面是谁来做?一般来说,是技术和财务一起配合来做。为什么呐,因为你去让财务申请,财务会说,我完全看不懂啊,但是你作为技术直接去申请,由于验证公司资料、公帐等一系列操作,你没有财务的支持,也是不行的。除非你像当初的我一样,一人身兼董事长、总经理、财务总监、技术总监、市场总监、保洁总监于一职,公司随身用皮包装着走。

         申请下来后,对方会给你一堆配置参数或电子证书等。NB如支付宝,一定是让你登录网站后台自己查看或者下载证书。不NB如某些小行,居然会让你加入一个QQ群,或者给你一个QQ号,由相关的人员点对点给你发过来……

         有了基本的参数,一般来说,对方还会提供DEMO,那么接下来,我们就把DEMO中的参数替换为刚才获得的参数,如果有证书的,则把证书部署到你自己的服务器上,DEMO就能运行起来了。

         再说一遍,能力有大小,对方写DEMO以及撰写API文档的能力也不见得比你更好,所以你一次能调试成功的机会就得看你运气了。


2. 支付宝即时到账

         来看看最简单的支付宝的DEMO。这是支付宝网站下载回来的demo。可以看到,有不同的语言的版本:

         我们将它引入到eclipse中,长这个样子:

         这个demo中,主要有上图所示的几个文件,下文会挑主要的讲。


3. 修改参数

         在参数的修改中,主要是上图红框内的五个地方,

         Partner:公司的身份,支付宝分配给你的,相当于银行账号;

         两个Key:一个是公钥一个是私钥,有些支付通道是以电子证书的形式给我们的,可以是文件。也可以是一个U盘,但是里面存的就是公钥和私钥。有同学可能注意到,我单独给私钥打码了,而没有给公钥打码。这个以后我们说到加解密的时候再说哦,总之,保护好你的私钥就是了,这个私密性等同于你的银行账号密码。

         两个url:一个叫做return-url,是什么意思呢?就是支付完成后(一会看实操),支付宝得把支付结果返回给咱们,他怎么返回给我们呢?我们也得给支付宝一个网址,这样它就能给这个网址发消息了不是。

         但是,这个notify_url是个什么鬼?我们想象一下这个场景:

         为了阻止上面情况发生,我们就得提供另外一个URL,这个URL用来在支付宝发送消息给return-url失败的时候,会在接下来的时间内,不间断的定时发送补充消息到这个地址,把这个坏掉的逻辑补回来。


4. 操作演示

         来,不管三七二十一,先来波操作,首先,运行index.jsp,如下图:

         这个页面没什么稀奇的,无非就是订单号和商品和金额。

         然后点击发送,关键的一刻产生了,我们就得把上面的显然可见的信息,和隐藏在表单后的参数信息一起包装到httprequest中发送到支付宝的网站去。看一下,大致有什么:

         发送出去后,就是下面的界面。熟悉不,剁手吧。

         在这个界面中,支付宝就会让你打开手机APP,让你扫一扫支付,或者让你登录支付宝网站支付。如果是银行,一般就会让你打开网银,进行支付。这些操作,都是在他们的平台中进行的。在这一步,跟咱们的网站无关(你可以看下图的浏览器地址)。

         支付完毕,提醒如下:

         紧接着,再次跳转提醒

         紧接着,支付宝再次跳转回我们的网站,看到没,return_url.jsp,就是我们配置的返回地址。到此,完成支付。谢谢大家,请先转100W过来。


5. 企业级支付中其它问题

         即便解决了上文中同步操作的异常问题,还是有可能有其它一些意外情况的发生,比如你的数据库崩溃了,导致你保存的收付款情况和支付宝(或银行)那边的首付款情况不一致。故,一般来说,除了类似上面的接口,支付平台还会提供一些对账接口供你调用,进行一个阶段内的批量对账。

         那这些对账接口怎么调用?当然是跟上面一样了。其返回的response中的数据,可能就是一个阶段内的所有账单信息,然后,我们作为程序员,就要去写程序跟自己保存的数据进行一致性的校验。

 

6. 认识一下银行的支付通道

         看过了支付宝的支付通道,我们再来看一个农行的支付通道。注意,其原理是完完全全一致的。

         在这里,我们仅仅放置一段发送代码感受一下吧,同时,这段代码是用PHP写的,从现在起,不要说,你只会Java编程了:-

         还有,农行的支付通道是使用文件证书来存储公钥和私钥的,如下


7. 支付通道在互联网借贷平台中的应用

         拥有了以上的知识,是不是就意味着支付与转账在所有的互联网应用中你就能放心应付了呢?非也,在电子商务中,以上知识可能差不多了,但是在互联网借贷平台(俗称P2P)中,还不够。

         我们都知道,P2P平台最大的一个风险就是平台跑路。这些年的新闻可谓是层出不穷。我修正一下,5年前的P2P平台,你利用我上文描述中的知识就能做一个P2P了,但是现在,不能了。

         这个不能,不是指技术上不能够,而是政策上不能够。

         在上文的即时转账中,用户转给公司的钱,公司瞬间就可以提走。如果这种模式存在于P2P平台中,那么风险就很大,因为公司随时可以转走投资者的钱而跑路。

         用几句话来描述P2P公司的业务模式:

         注意,上面的过程中哪些环节能出现风险呢?让我们再把上面的描述复述一遍,同时加上备注,你只看备注就可以了:

         为了解决这样的问题,金融监管机构就出现了。金融监管机构要求所有的P2P平台:

         1:不能有自己的资金池;

         2:在银行开立的用于收付款的账号是专门的虚拟账号,不能直接打到自己的公司账号,这些钱,只能发起申请直接打给投资者和借款人;

         3:所有的借款人和投资者在平台上的账号对应在银行那里也得有虚拟账号,所有平台上的投资和借钱行为发生在这些受监控的虚拟账号内,实         际要提现必须由本人发起申请。

         以上,讲完了。

         通过上文的了解,现在的你,是要去做一个电商网站呢,还是一个P2P平台?回归一句话,记住:万事万物兼HTTP服务……

 

==================================================================

以下是广告时间:最课程(http://zuikc.com)正在招收Java就业班学员,如果你想了解或参与的这样的项目,请联系我们哦。