目前,在开发电子商务类型的网站时,必须要整合网上支付的功能。用户可以直接通过网上银行付款。也是第一次接触网上支付接口的开发,不过提供网上支付功能的供应方都会提供一份接口开发的文档说明,开发的业务也不太复杂,最主要的是数据组装和加密的问题了,至于支付结果或是其他结果接收都差不多。
本人目前的项目接触的网上支付有支付宝,中国农行,中国建行和中国工行。
先说说开发的文档吧
文档最满意的是支付宝的文档。主要有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节点就行了。
总结
在配置相应的信息的时候,一定要仔细配置,最好把配置好的文件发给和你对接的银行人员检查。有些配置不清楚的一定要搞清,一般返回的错误信息还是准确的,但有些时候明明是配置文件中的某项配置错误了,返回的提示却牛头不对马嘴,很是蛋疼。比如在配置建行的一个分行编号的时候,询问了银行人员配置的是省级分行编号还是市级分行编号,起先回复说市级,然后测试就是不对,检查了好久的数据组装,后来直接把配置文件发给银行人员后,改成省级就测试通过了。因此一定要先确保配置文件或一些配置信息先填写正确。
总体感觉支付宝的开发是最贴心的,包括开发后的测试都很贴心(其他的有些直接不提供测试用的环境或测试数据)。因此整合支付宝的在线支付是最快的。农行的服务态度是最好的,谈了业务后,农行直接来人帮你配置基础数据,然后下载文档和证书等都一起服务。只不过刚开始用的是测试环境,很多操作不能用,提示也不太对,有些地方和文档的也有些出入,需要联系农行开通业务后才行。不过,中途经常会电话来指导。服务很周到。工行的对接人员服务也蛮好的,基本上网上咨询问题的时候,都会回复,虽然有些回答不太对,由于某些原因,工行的业务没下来,因此真实环境的测试还没有,可能有些地方说的不对,见谅。建行的就差点了,可能是对接的人员是个业务员,很多问题都不太懂,回答的也不及时。
最后说一点,不要指望和你对接的相关人员帮你解决技术问题,可能有些连怎么配置相应文件都不会。所以看文档最重要,觉得有些出入的再问,我在做工行接口时文档中有个参数不是必填项的,老是报错,结果对方发了份比较新的文档给我,里面却改成了必填。折腾啊。
分享到:
相关推荐
程序设计经验杂谈涉及到的不仅仅是语法和逻辑,更关乎到代码的可读性、可维护性以及性能优化。这里,我们将深入探讨程序设计的各个方面,包括但不限于设计模式、算法应用、调试技巧、版本控制、代码规范以及项目管理...
ERP实施杂谈ERP实施杂谈
### 嵌入式开发杂谈—薛立功经典之作:关键知识点解析 #### 一、引言 在嵌入式开发领域,《嵌入式开发杂谈》是薛立功先生的经典著作之一,该作品旨在解答新手在入门阶段遇到的各种问题。通过作者的经验分享,帮助...
本文档《为己杂谈学习精要.doc》主要探讨了个人修养、企业文化、管理理念以及如何在职业生涯中找到良好发展平台的主题。作者引用了老子的哲学思想,并结合《论语》中的教诲,阐述了一种既考虑个人利益又兼顾他人和...
### JAVA杂谈:深入探索Java的核心机制与实践 #### 动态加载机制解析 Java的动态加载机制是其面向对象编程(OOP)理念的核心体现之一,它使得Java能够在运行时根据需要加载类,而非在程序启动之初加载所有类。这种...
### 高并发架构设计 #### 一、高并发架构的核心挑战及应对策略 高并发架构设计的核心在于如何处理大量的并发请求,确保系统的稳定性和高效性。面对数据量大、访问突增、流量大等问题,通常需要采取一系列的技术...
地产行业杂谈系列之十六:社区增值服务模式初探
android 设计文档
这篇"Android开发杂谈"涵盖了从系统组成、启动过程到关键组件的解析,旨在为初学者提供一个全面的理解框架。 Android系统是由多个层次构成的,包括Application、Framework、Native Libraries、Userspace Drivers...
无线射频电路开发是无线通信领域中的核心技术,涵盖了从信号产生到功率放大的一系列过程。本文作者基于近20年的实践经验,分享了关于无线射频电路开发,特别是对讲机射频电路设计的经验和理解。 首先,作者提到了...
本文将基于“Android开发杂谈”的主题,结合提供的资源——一个名为"Android_.pdf"的文件,来深入探讨一些重要的知识点。 1. **源码阅读**: 在Android开发中,理解源码是提升技能的关键。Android开源项目(AOSP)...
STM32 最早提供固件库开发,在当时也是一个很大的创新。导致大量攻城狮熟悉了固件库开发,后面STM32又慢慢推出HAL开发模式. 参考博文:https://blog.csdn.net/li171049/article/details/127412894
尼康优化校准机内设置杂谈深入探讨了RAW与JPEG两种图像格式之间的根本区别,这对于摄影爱好者和专业摄影师来说至关重要。RAW格式保留了传感器捕获的原始数据,提供了广泛的后期调整空间,包括色彩、曝光、对比度和...
计算机杂谈总结免费下载
报告名为“地产杂谈系列之五:细数主流商管企业,经营发展各有千秋”,说明报告旨在详细探讨当前中国地产行业中商业物业管理(商管)企业的经营发展状况,并对其主要企业进行比较分析。从报告内容来看,这份文档是一...