目前,在开发电子商务类型的网站时,必须要整合网上支付的功能。用户可以直接通过网上银行付款。也是第一次接触网上支付接口的开发,不过提供网上支付功能的供应方都会提供一份接口开发的文档说明,开发的业务也不太复杂,最主要的是数据组装和加密的问题了,至于支付结果或是其他结果接收都差不多。
本人目前的项目接触的网上支付有支付宝,中国农行,中国建行和中国工行。
文档最满意的是支付宝的文档。主要有2份:即时到账交易接口(create_direct_pay_by_user).pdf和支付宝即时到账接口集成教程.pdf。集成教程比较详细的介绍了集成的步骤。基本上可以认为是从零开始介绍的,介绍的很全面。即时到账交易接口自然是接口的使用教程。这是根据商户选定的支付套餐而定的,如果选择的是其他的套餐对应的是相应的接口文档说明。
农行的文档也比较详细,按照步骤进到商户文档中下载的B2C支付_JAVA_2.0.8.zip。解压后在doc目录可以看到5份文档。
主要是接口编程指南文档。里面详细介绍的集成步骤和接口使用,文档的后部分还有例子和响应码对应表等。
建行和工行的文档就差多了。感觉写的有些乱。建行下载的开发包有2个。
电子商务上最好把网上支付结果查询接口也整合进去。但对于单纯的支付来说,只关心支付接口,解压后2份文档
只需要研究接口规范文档就行了。
工行的很干脆,至少手上拿到的只有中国工商银行网上银行新B2C在线支付接口说明V1.0.0.11(20100910).doc。基本上和建行的文档写的类似。
声明:本人拿到手的文档不具代表性,因为可能人家没太重视,随便给了份能用的。
支付宝提供了2套字符编码的项目例子,基本集成也蛮方便的。具体看文档……。对于配置来说,提供了AlipayConfig.java来进行配置。
农行的集成需要加入TrustPayClient-V2.0.8.jar,还有个TrustMerchant.properties文件需要放到项目的classpath下,只要在classes目录里存在该配置文件就行。同时还需要证书库和证书等。
这些都需要配置在TrustMerchant.properties里。里面有个农行根证书文件密码是changeit,这里不需要更改,因为密码就是changeit。其他配置正确后即可。其实可以多参考下demo里的例子jsp。写的都蛮详细的。注意有些和字段比较怪。这边属性叫OrderAmout,那边返回xml形式的却要tResult.getValue("Amount")。还有如果通知方式选择的是服务器通知的话,记得返回的页面一定要按照要求。在页面里加入标签<URL>,最好复制例子的页面进行修改。开发好后,也可以插入农行给的管理员商户的K宝,登录进农行的商户后台,去里面的商户测试里填写通知url进行测试,看是否按农行的要求编写的页面。基本上农行的支付,查询和退款都有自己的api调用,开发起来蛮方便的。
建行的集成提供了2个jar包netpay.jar,在项目中加入netpay.jar即可。这个jar基本上是对数据的加密和验签等处理,没有其他丰富的api方法封装等。建行的网上支付只需要组装正确的url,然后get或post提交。然后需要自己写个md5方法对组装成的数据进行相应的md5加密。
工行的咋一看蛮复杂的,不过仔细研究下提供的开发实例源码。发现是将需要的数据组装成xml的形式,然后表单post提交到正确的url地址就行了。在ICBC_FILES\config\下提供了b2c_v_1_0_0_1.cfg配置文件,如果想自己写配置文件也行,然后解析初始化即可,总觉得例子中提供的组装xml数据有些累赘,因此自己重写组装也可以。
在开发支付宝支付接口的时候,没考虑支付结果的问题,因为支付宝想得比较周到,提供了2中通知方式,一种是在客户在网上支付后,同步把支付的结果返回给商户,另一种是服务器的异步发送支付结果给商户,如果第一种情况出现了异常,比如突然断网,断电等异常情况,无法把支付结果及时返回到商户的时候,会采用第二种不断的通知。具体通知条件属性可以看文档的介绍。后来接触了其他银行的网上支付结果返回,发现情况比较多,可能有订单支付可疑的问题(虽然出现的概率极低,非常低,银行人员的解释为基本没出现过。)
而且不是所有的银行都提供了服务器发送结果的功能。因此还需要一个支付结果查询的功能。这里顺便说下,对于支付结果接收的功能基本上类似。支付宝,农行都采用url接收的方式,工行需要写个接收类来处理,都是在商户这边编写代码。建行的比较恶心,需要登录到建行的商户后台去设置。
农行的查询调用api即可,比较简单。
工行的查询提供了APITrade.java来调用,组装数据的时候需要注意下数据的格式,比如时间。
建行的查询比较恶心,文档介绍的是2种,一种是直接在页面显示,一种是返回xml格式的数据。而且建行查询的时候要填上支付时间,这个太不合理了。好吧,肯定需要对支付结果进行接收然后判断处理,只能选择xml数据返回,因此需要自己写接收数据,然后xml解析出想要的结果来。使用了httpclient。这里非常值得强调的一点是,使用GetMethod的时候,注意设置:
getMethod.setRequestHeader("User-Agent","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727)"); getMethod.setRequestHeader("Content-Encoding","text/html"); getMethod.setRequestHeader("Content-Type","text/xml; charset=GB2312"); getMethod.setRequestHeader("Accept-Language", "zh-cn"); getMethod.setRequestHeader("Connection","close");
不设置的话接收不到任何结果,可能是建行返回的xml数据格式不规范原因。然后解析其RESULT节点就行了。
在配置相应的信息的时候,一定要仔细配置,最好把配置好的文件发给和你对接的银行人员检查。有些配置不清楚的一定要搞清,一般返回的错误信息还是准确的,但有些时候明明是配置文件中的某项配置错误了,返回的提示却牛头不对马嘴,很是蛋疼。比如在配置建行的一个分行编号的时候,询问了银行人员配置的是省级分行编号还是市级分行编号,起先回复说市级,然后测试就是不对,检查了好久的数据组装,后来直接把配置文件发给银行人员后,改成省级就测试通过了。因此一定要先确保配置文件或一些配置信息先填写正确。
总体感觉支付宝的开发是最贴心的,包括开发后的测试都很贴心(其他的有些直接不提供测试用的环境或测试数据)。因此整合支付宝的在线支付是最快的。农行的服务态度是最好的,谈了业务后,农行直接来人帮你配置基础数据,然后下载文档和证书等都一起服务。只不过刚开始用的是测试环境,很多操作不能用,提示也不太对,有些地方和文档的也有些出入,需要联系农行开通业务后才行。不过,中途经常会电话来指导。服务很周到。工行的对接人员服务也蛮好的,基本上网上咨询问题的时候,都会回复,虽然有些回答不太对,由于某些原因,工行的业务没下来,因此真实环境的测试还没有,可能有些地方说的不对,见谅。建行的就差点了,可能是对接的人员是个业务员,很多问题都不太懂,回答的也不及时。
最后说一点,不要指望和你对接的相关人员帮你解决技术问题,可能有些连怎么配置相应文件都不会。所以看文档最重要,觉得有些出入的再问,我在做工行接口时文档中有个参数不是必填项的,老是报错,结果对方发了份比较新的文档给我,里面却改成了必填。折腾啊。