澳门新莆京赌场网站app[转]网银在线支付接口和动用

作者:刘湛 (转载自IBMDW)

        仔细看上面两项约定,无论是
MD5 加密要么 悍马H2SA 加密,都有贰个基础职业,正是将2进制数据分割,换算成
1陆 进制字符,还亟需张开逆运算。将结果按 四 位为三个单位实行剪切,共取得3二 段, 将每段看成二个1陆 进制数,如 0011 为 0X三 , 1十一 为 0Xd 。 将这一个数映射到
ASCII 码表,产生相应的字符,如
0X2 为“ 二 ”, 0Xd 为“ d ”。
将这么些字符连成3个字符串,长度为 3二 。
笔者先达成那几个意义,代码如下:

JSP(Java Server Pages):

v_pstring

  J2EE应用程序能够是依据web格局的,也得以是依附守旧方法的.

码表,产生对应的字符,如0X二为“二”,0Xd为“d”。

  近期,Java
二平台有一个本子,它们是适用于小型设备和智能卡的Java 二平台Micro版(Java 贰Platform Micro 艾德ition,J2ME)、适用于桌面系统的Java 二阳台规范版(Java 2Platform 斯坦dard 艾德ition,J2SE)、适用于创造服务器应用程序和劳务的Java
二阳台湾集团业版(Java 贰 Platform Enterprise 艾德ition,J二EE)。

付出情形

  JSP页面由HTML代码和放开个中的Java代码所组成。服务器在页面被客户端所请求现在对那么些Java代码进行拍卖,然后将扭转的HTML页面再次回到给客户端的浏览器。

进制数,如0011为0X3,1101为0Xd。

  J二EE是1种选用Java
2平台来简化公司缓慢解决方案的成本、布置和管制有关的复杂性难点的体系布局。J二EE手艺的根基便是主题Java平台或Java
二平台的规范版,J2EE不仅加强了标准版中的大多亮点,比方”编写贰遍、四处运维”的风味、方便存取数据库的JDBC
API、CORBA技巧以及能够在Internet应用中保证数量的广安形式等等,同时还提供了对
EJB(Enterprise JavaBeans)、Java Servlets API、JSP(Java Server
Pages)以及XML技艺的圆满扶助。其最后目的就是成为3个可见使公司开采者大幅缩水投放集镇时间的体系布局。
J2EE种类布局提供中间层集成框架用来满意无需太多开支而又供给高可用性、高可信性以及可扩展性的使用的须要。通过提供联合的支出平台,J二EE下落了支出多层应用的花费和复杂性,同时提供对现成应用程序集成强有力支撑,完全帮助Enterprise
JavaBeans,有出彩的引导协助打包和布置应用,加多目录帮忙,加强了安全部制,提升了品质。

并按上述形式开始展览转变后收获的结果:

  高效的开辟:
J二EE允许商场把有个别通用的、很麻烦的服务端任务交给中间件供应商去做到。那样开拓职员能够聚集精力在怎么创造商业逻辑上,相应地缩水了支出时间。高端中间件供应商提供以下这个扑朔迷离的中间件服务:

格式表示,并且将其遵照每四位(bit)转变为1个16进制数的办法意味着,发生1六进制的字符串。家居银行动用正规MD5with奥德赛SA算法对给商贾的响应举办签订契约,发生拾二十四个人(bit)的签订契约结果,并且将其遵照每4个人(bit)调换为二个1陆进制数的主意表示,形成1六进制的字符串,长度为25陆。

参考资料:

         这几天
项目需求连接招行的付出和询问作用,在支付和询问的时候将系统链接到平安银行钦点的页面上,由于那一个页面是基于互连网的,开放的,所以供给对数码加密和数字签字。
小编来促成那一个数据加密解密模块,功用已经成功了,唉,可是让自家晕死的是,建设银行其实1并提供了
jar 包,已经完成了数额加密解密,校验数字签字的功能,只可是同事没放在心上到,只发接口文档给本人,没发
jar 包给本身,害小编白着急了几天,但是职业也没算浪费,自身达成的依旧相比较放心些呢。那几个页面包车型客车跳转没什么手艺,首要在于数量加密和数字签字,在链接到中信银行页面在此以前,先将参数加密,在接受华夏银行跳转过来的链接参数后,抽取参数里的签名,将签署和原来参数进行校验,以确认近期跳转过来的真便是民生银行。页面跳转没怎么好说的,作者所感兴趣的在于加密那几个地点,以及对中信银行文档的精通。

  JNDI 寻址(JNDI
Lookup)服务向公司内的1种类名字和目录服务提供了2个联合的接口,那样应用程序组件能够访问名字和目录服务。

网银的接口简单,不过开通网银接口要求极大的资费。
相关资源汇编下载:

  JDBC
API为访问差异的数据库提供了1种统1的路线,象ODBC同样,JDBC对开垦者屏蔽了有的细节难点,其它,JDCB对数据库的造访也享有平台非亲非故性。

 

  JNDI
API被用于试行名字和目录服务。它提供了扳平的模子来存取和操作公司级的财富如DNS和LDAP,当和姑件系统,或应用服务器中的对象。

进制数,如0011为0X3,1101为0Xd。

澳门新莆京赌场网站app 1

<input
type=hidden name=v_rcvpost value=”一千3陆”>                     
收货人邮政编码

Java Servlet:

 

  业务层组件

v_pstatus

  稳定的可用性:
3个劳动器端平台必须能全天候运营以满足集团客户、合作伙伴的需求。因为INTE本田UR-VNET是全世界化的、无处不在的,即便在夜间按陈设停机也或者导致严重损失。若是意外停机,这会有悲凉后果。J二EE布署到保险的操作情况中,他们支持短期的可用性。一些J二EE铺排在WINDOWS意况中,客户也可选拔健康品质更加好的操作系统如Sun
Solaris、IBM
OS/390。最健全的操作系统可达到9玖.99玖%的可用性或每年只需4秒钟停机时间。那是实时性很强商业系统理想的选料。

MD5 (“abc”) =
900150983cd24fb0d6963f7d28e17f72

  J贰EE应用组件能够设置配备到以下三种容器中去:

 

RMI(Remote Method Invoke):

浙商业银行行对接(一)

JTA(Java Transaction Architecture):

<input
type=”hidden” name=”remark二” value=””>备注字段2

  J二EE应用程序是由组件构成的.J二EE组件是全体独自成效的软件单元,它们经过有关的类和文件组装成J二EE应用程序,并与别的零件交互。J二EE表达书中定义了以下的J2EE组件:

码表,产生相应的字符,如0X二为“贰”,0Xd为“d”。

  J二EE远程连接(Remote Client
Connectivity)模型管理客户端和enterprise bean间的低层交互.
当二个enterprise bean创制后,
多个客户端可以调用它的主意就象它和客户端位于同一虚拟机上同样。

<input
type=hidden name=v_moneytype value=”0″>                   
     **币种**

JTA(JavaBeans Activation Framework):

兴业银行附录
二 :数字具名算法表达

  XML是1种可以用来定义其它标识语言的言语。它被用来在分化的商务进程中国共产党享数据。XML的开荒进取和Java是相互独立的,不过,它和Java具备的均等目的正是平台独立性。通过将Java和XML的结合,您能够获取一个周密的保有平台独立性的减轻方案。

 

  JavaMail利用JAF来拍卖MIME编码的邮件附属类小部件。MIME的字节流能够被改造到Java对象,或许转移自Java对象。大繁多应用都得以不须求直接行使JAF。

 

  布满式共享数据对象CACHE服务 —
让开垦职员编制高质量的系统,不小升高总体布局的伸缩性。

/**
 *  * 网银接口服务的代办  *
 * @author longgangbai  *  */ public class ChinaPayProxy {  /**  
* 在下訂單時接纳的的Md5加密的音信:
MD五校验串生成方法:当消费者在商行端生成最后订单的时候,
将订单中的v_amount
  * v_moneytype v_oid v_mid v_url key三个参数的value值拼成2个无距离的字符串(顺序并非转移)。   *
参数key是生意人的MD伍密钥(该密匙可在登入商家管理分界面后自动转移。)   *  
* @param v_amount   * @param v_moneytype   * @param v_oid   *
@param v_mid   * @param v_url   * @param key   * @return   */
 private static String getMd5Sign(String v_amount, String v_moneytype,
   String v_oid, String v_mid, String v_url, String key) {
  StringBuffer sb = new StringBuffer();   sb.append(v_amount);
  sb.append(v_moneytype);   sb.append(v_oid);   sb.append(v_mid);
  sb.append(v_url);   sb.append(key);   byte[] bytes =
DigestUtils.md5(sb.toString());   String md5info = new
String(bytes).toUpperCase();   return md5info;  }

  JavaMail是用于存取邮件服务器的API,它提供了1套邮件服务器的抽象类。不仅支持SMTP服务器,也辅助IMAP服务器。

正文转自:http://blog.csdn.net/niemeiquan/article/details/7937280

JTS(Java Transaction Service):

 

  客户层组件

支出实现

JNDI(Java Name and Directory
Interface):

<input
type=submit value=”网银在线支付“>

  五. J2EE的核心API与组件

 

  叁. J2EE 的4层模型

<input
type=hidden name=v_rcvaddr value=”日本东京海淀”>              
收货人地址

  运转在客户端机器上的客户层组件
  运维在J二EE服务器上的Web层组件
  运行在J二EE服务器上的事体逻辑层组件
  运维在EIS服务器上的公司消息系列(Enterprise information system)层软件

Java代码 

  Applet
容器是运作在客户端机器上的web浏览器和 Java 插件的结合.

package
cn.com.vnvtrip.china.pay.proxy;

  那种基于组件,具备平台无关性的J二EE
结构使得J二EE
程序的编辑撰写十分简练,因为事情逻辑被封装成可复用的机件,并且J二EE
服务器以容器的方式为持有的组件类型提供后台服务.
因为您绝不自个儿成本那种服务,
所以你能够集中精力化解手头的作业难点。

  基本全体的在线支付均选取以下办法:

  应用客户端程序和applets是客户层组件.
  Java Servlet和JavaServer Pages(JSP)是web层组件.
  Enterprise JavaBeans(EJB)是业务层组件.

算法对向互连网银行系统提交的交易内容实行MAC校验,爆发12十八人(bit)的MAC结果。输入为字符串,输出为1陆进制字符表示的字符串。

  MS是用来和面向消息的中间件相互通讯的应用程序接口(API)。它既援助点对点的域,有支撑公布/订阅(publish/subscribe)类型的域,并且提供对下列项目标协助:经确认的音讯传递,事务型音讯的传递,①致性音讯和装有持久性的订阅者帮忙。JMS还提供了另壹种格局来对您的采取与旧的后台系统相集成。

 

  J2EE安全(Security)模型能够让你安顿 web
组件或enterprise bean ,那样唯有被授权的用户才干访问系统能源.
每1客户属于三个特意的角色,而各种剧中人物只同意激活特定的方法。你应在enterprise
bean的安置描述中扬言角色和可被激活的法子。由于那种注脚性的办法,你不用编写狠抓安全性的条条框框。

订单实际开支金额

  J2EE为搭建具备可伸缩性、灵活性、易维护性的商务系统提供了不错的机制:

import
java.util.HashMap; import java.util.Map; import
java.util.Properties;

  持续性服务 —
让开采人士不用对数码访问逻辑进行编码就能编写应用程序,能生成更轻易,与数据库非亲非故的应用程序,那种应用程序更易于开荒与维护。

<input
type=hidden name=v_rcvname value=”张3″>  
                 收货人姓名

  公司信息系统层管理公司音信种类软件包蕴公司基础建设体系举个例子公司财富陈设(ERP), 大型机事务管理, 数据库系统,和任何的残留音讯系统. 举例,J2EE
应用组件恐怕为了数据库连接必要拜访公司音讯体系

文章分类:Java编程

  本文从多个地方对J2EE举行了相比全面包车型地铁介绍。从J贰EE的概念谈到,到它的优势,到J2EE规范的肆层模型,和它的架构,最后是J二EE十两种主题才干的3个简要介绍。本文分门别类的对J2EE中的服务,组件,档期的顺序,容器,API都做了相比较详细的牵线,相信看完此文,读者会对J二EE有三个更清楚的认知。

订单号码

  JTA定义了1种标准的API,应用体系经过能够访问各类事情监察和控制。

 

  正如下图所示的客户层那样,web层只怕含有某个JavaBean 对象来管理用户输入,并把输入发送给运转在业务层上的enterprise
bean 来展开管理。

算法。商家验证具名的公钥在商贩在网银河系统开户,获取数字证书后,登陆到网银河系统中,通过下载公钥交易获得。(下载后需伏贴保管并及时更新商行公钥,避防公私钥不相配变成验签不通过)。(近年来家居银行项目组采取静态密钥对,上线前生成一对,发给协作商行。)

《Develop n-tier application using J2EE》-
Steven Gould
《The Business Benefits of EJB and J2EE Technologies over COM+ and
Windows DNA》
《The J2EE Tutorial》chapter overview – Monica Pawlan
本文所用图片由《The J二EE Tutorial》中的英文图片修改而成.

 

  J贰EE 事务管理(Transaction
Management)模型让您钦定组成二个事务中有着办法间的关系,那样多个事情中的全数办法被当成3个单一的单元.
当客户端激活3个enterprise
bean中的方法,容器出席1管制作业。因有容器处理业务,在enterprise
bean中不用对业务的界线进行编码。供给调控分布式事务的代码会格外复杂。你只需在安顿描述文件中证明enterprise
bean的事务属性,而不用编写并调节和测试复杂的代码。容器将读此文件并为你处理此enterprise
bean的事体。

  1. package cn.ipanel.payment.business.bank.ccb.encryption;
      
  2.   
  3.  /**  
  4.  * 字节运算工具,其功用和背景请见中信银行接口文书档案的”附录壹:MAC算法表明”
     
  5.  *  
  6.  * @author wangxiaoxue
     
  7.  *  
  8.  */  
  9. public class ByteUtil {
      
  10.      // 用来将字节转变到 1六 进制表示的字符
      
  11.     private static char hexDigits[] = { ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’,
      
  12.   
  13.            ‘8’, ‘9’, ‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’ };
      
  14.   
  15.      /**
     
  16.      * 找到字符在数组中的地点 
  17.      *  
  18.      * @param c
     
  19.      * @return
     
  20.      */  
  21.     private static int getIndex(char c) {
      
  22.        int p = -1;   
  23.        for (int i = 0; i < hexDigits.length; i++) {
      
  24.            if (hexDigits[i] == c) {
      
  25.               p = i;
      
  26.               break;
      
  27.            }
      
  28.        }   
  29.        return p;
      
  30.     }   
  31.   
  32.      /**
     
  33.      * 将字节转化成字符串,转变算法如下:<br>
     
  34.      * 一:各个字节长度为七个人,分割为三个二位,高二位和低4个人<br>
     
  35.      * 二:将各类4位换算成16进制,并且对应ascii码,如0x0一对应1,0x0d对应d,具体对应提到请见数组hexDigits[]<br>
     
  36.      * 三:将获得的字符拼成字符串 
  37.      *  
  38.      * @param bytes
     
  39.      * @return
     
  40.      */  
  41.     public static String byteToChar(byte[] bytes) {
      
  42.        // 各种字节用 1陆 进制表示的话,使用五个字符,所以字符数主任度是字节数字长度的二倍
      
  43.        char str[] = new char[bytes.length * 2];    
  44.        // 表示转变结果中对应的字符位置  
  45.        int  = 0;   
  46.         // 每贰个字节转变到 1陆 进制字符
      
  47.        for (int i = 0; i < bytes.length; i++) {
      
  48.            byte byte0 = bytes[i]; // 取第 i 个字节   
  49.            // 取字节中高 四 位(右边4个人)的数字调换,>>>为逻辑右移,右移后,高四个人变成低四个人,要求对低几个人之外的值进行消零运算
      
  50.            str[k++] = hexDigits[byte0 >>> 4 & 0xf];   
  51.             // 取字节中低 四 位(左边几人)的数字转变,并且和0xf举行”逻辑与”运算,以祛除高位的值,获得纯净的低3个人值
      
  52.            str[k++] = hexDigits[byte0 & 0xf];   
  53.        }   
  54.        return new String(str);
      
  55.     }   
  56.     
  57.     /**  
  58.      * 将字节转变来2进制数组,是byteToChar方法的逆运算,转变算法如下:<br>
     
  59.      * 一:将字符按梯次每四个分为1组,分别寻找种种字符在映射表hexDigits[]中的索引值,请见getIndex(char c)方法<br>
     
  60.      * 二:每八个字符1组开始展览演算,将首先个字符的索引值逻辑左移几人,并和”0xf”进行”逻辑或”运算,目标是将低贰人都设置为一,因为逻辑左移后,低四个人都形成0了<br>
     
  61.      * 三:将第壹个字符的索引值和 
  62. “0xf0″进行”逻辑或”运算,目标的是将高位设置为一<br>
     
  63.      * 四:将多个运算完的索引值举行”逻辑与”运算,获得了七个字符所代表的贰个字节值<br>
     
  64.      * ⑤:依次运算,最终获得字节数组,重临 
  65.      *  
  66.      * @param str
     
  67.      * @return
     
  68.      */  
  69.     public static byte[] charToByte(String str) {
      
  70.        char[] chars = str.toCharArray();
      
  71.        byte[] bytes = new byte[chars.length / 2];   
  72.        int k = 0;   
  73.        for (int i = 0; i < chars.length; i = i + 2) {   
  74.            // 获得索引值   
  75.            byte high = (byte) getIndex(chars[i]);
      
  76.            byte low = (byte) getIndex(chars[i + 1]);   
  77.            // 第三个字符索引逻辑左移四位,并拓展或运算,将低几个人设置为1  
  78.            high = (byte) ((high << 4) | 0xf);   
  79.             // 第3个字符索引举办或运算,将高四人设置为1  
  80.            low = (byte) (low | 0xf0);   
  81.             // 五个字节进行与运算
      
  82.            bytes[k++] = (byte) (high & low);
      
  83.        }   
  84.        return bytes;
      
  85.     }   
  86.   
  87.      public static void main(String[] args) { 
      
  88.        String str = “abgcd1234”;
      
  89.        System.out.println(“原始字符串:” + str);
      
  90.        String result = ByteUtil.byteToChar(str.getBytes());
      
  91.        System.out.println(“运算结果:” + result);
      
  92.        byte[] resultbytes = ByteUtil.charToByte(result);
      
  93.        System.out.println(“逆运算结果:” + new String(resultbytes)); 
      
  94.     }   
  95. }   

XML(Extensible Markup Language):

 

澳门新莆京赌场网站app 2

import
cn.com.vnvtrip.china.pay.commons.Env; import
cn.com.vnvtrip.china.pay.commons.HTTPClient;

  保留现有的IT资金财产:
由于市廛必须适应新的商业必要,利用已有个别集团音信连串方面包车型地铁投资,而不是重新制定全盘方案就变得很重大。这样,二个以稳中求进的(而不是激进的,全盘否定的)方式确立在已有类别之上的劳务器端平台机制是厂商所必要的。J贰EE架构能够丰富利用用户原本的投资,如有的厂家选择的BEA
Tuxedo、IBM CICS, IBM Encina,、Inprise VisiBroker 以及Netscape
Application
Server。那之所以变成恐怕是因为J二EE具备遍布的产业界支持和部分第贰的’公司总结’领域供应商的加入。每三个供应商都对现存的客户提供了永不丢弃已有投资,进入可移植的J贰EE领域的晋级换代路径。由于基于J二EE平台的出品大概力所能及在任何操作系统和硬件配置上运转,现成的操作系统和硬件也能被保留使用。

经纪人发送的v_oid定单编号。

澳门新莆京赌场网站app 3

 

EJB(Enterprise JavaBean):

来自http://topmanopensource.javaeye.com/blog/497872

  容器类型

Html代码 澳门新莆京赌场网站app 4 澳门新莆京赌场网站app 5澳门新莆京赌场网站app 6

  J贰EE应用程序组件

20050320-1001-0000012342012.340key

  一. J2EE的概念

 

  J二EE手艺从而获得某体广泛注重的由来之1正是EJB。它们提供了2个框架来支付和进行布满式商务逻辑,因而很断定地简化了装有可伸缩性和高度复杂的厂家级应用的开辟。EJB典型定义了EJB组件在曾几何时怎样与它们的器皿实行交互功用。容器担负提供公用的劳务,比如目录服务、事务管理、安全性、能源缓冲池以及容错性。但那边值得注意的是,EJB并不是落到实处J二EE的唯①路子。正是出于J二EE的开放性,使得部分厂家能够以1种和EJB平行的艺术来落成平等的目标。

     

  容器和劳务

付出办法

  厂商音讯系统层

备注字段2

  正如其名字所代表的那么,WranglerMI协商调用远程对象上格局。它应用了种类化格局在客户端和劳务器端传递数据。QX5陆MI是1种被EJB使用的更底层的商酌。

位的贸易结果按四位为二个单位举行分割,共收获3二段

  援助异构遭逢:
J贰EE能够开拓铺排在异构情状中的可移植程序。基于J2EE的应用程序不借助任何特定操作系统、中间件、硬件。因而陈设合理的基于J2EE的顺序只需付出3遍就可配置到各个平台。那在第一名的异构公司测算情形中是卓越最主要的。J2EE规范也允许客户订购与J2EE包容的第2方的现有的零件,把他们配备到异构遭遇中,节省了由自身制订整个方案所需的开销。

 

  在Java
IDL的支持下,开采人士能够将Java和CORBA集成在同步。他们能够创制Java对象并使之可在CORBA
ORB中实行,
恐怕他们还能创建Java类并视作和此外ORB一齐实行的CORBA对象的客户。后一种艺术提供了别的一种路子,通过它Java能够被用于将你的新的施用和旧的类别相集成。

 

Java IDL/CORBA:

 

  状态管理服务 —
让开垦职员写越来越少的代码,不用关注什么保管景况,那样能够更加快地成功程序开荒。

订单实际支出币种

JMS(Java Message Service):

 

  Servlet是壹种小型的Java程序,它扩展了Web服务器的机能。作为壹种服务器端的使用,当被呼吁时开首施行,这和CGI
Perl脚本很一般。Servlet提供的成效繁多与JSP类似,但是达成的艺术差别。JSP常常是诸多HTML代码中放置少些的Java代码,而servlets全部由Java写成并且生成HTML。

位的交易结果按3人为3个单位举办私分,共获取256段

  数据库连接池(Database Connection
Pooling)模型是3个有价值的财富。获取数据库连接是一项耗时的劳作,而且连接数万分简单。容器通过管住连接池来减轻那一个主题材料。enterprise
bean可从池中高速获得连接。在bean释放连接之可为其余bean使用。

v_amount

  EJB 容器管理全数J二EE
应用程序中公司级bean 的实行. enterprise bean 和它们的器皿运转在J二EE
服务器上.
Web 容器管理全数J贰EE 应用程序中JSP页面和Servlet组件的试行. Web
组件和它们的器皿运行在J二EE 服务器上。

 

  web 层组件J二EE web层组件能够是JSP
页面或Servlets.根据J2EE标准,静态的HTML页面和Applets不到底web层组件。

Html代码 

JDBC(Java Database Connectivity):

<form
method=post action=”https://pay.chinaebank.cn/select\_bank"&gt;

  可伸缩性:
集团必须求挑选1种服务器端平台,那种平台应能提供极佳的可伸缩性去满意这个在她们系统上开始展览商业运作的比比皆是新客户。基于J二EE平台的应用程序可被安顿到种种操作系统上。比方可被陈设到高等UNIX与大型机系统,那种系统单机可支撑6四至二伍贰拾个计算机。(那是NT服务器所不可企及的)J二EE领域的供应商提供了特别广阔的负载平衡战略。能解除系统中的瓶颈,允多数台服务器集成都部队署。那种安插可达数千个计算机,达成可中度伸缩的系统,满意现在商业贸易利用的内需。

<form method=get action="v_url" target=_self>

 <input type="hidden" name="v_oid" value="">         

  <input type="hidden" name="v_pstatus" value="">

<input type="hidden" name="v_pstring" value="">

<input type="hidden" name="v_pmode" value="">

<input type="hidden" name="v_md5str" value="">

<input type="hidden" name="v_amount" value="">

<input type="hidden" name="v_moneytype" value="">

<input type="hidden" name="remark1 " value="">

<input type="hidden" name="remark2" value="">

</form>

JavaMail:

用MD五函数加密上述字符串后取得的值借使和v_md5str值极度即申明再次来到的消息尚未被纂改

  
应用程序客户端容器管理全体J二EE应用程序中应用程序客户端组件的实行.
应用程序客户端和它们的容器运转在J2EE 服务器上。

remark2

  J二EE使用多层的布满式应用模型,应用逻辑按作用区划为组件,各样应用组件根据他们所在的层布满在差别的机械上。事实上,sun设计J二EE的初衷正是为了消除两层形式(client/server)的坏处,在守旧情势中,客户端担当了过多的剧中人物而显得臃肿,在那种情势中,第一回配置的时候可比便于,但难于进级或改革,可伸展性也不优异,而且平日基于某种专有的商量――经常是某种数据库协议。它使得重用业务逻辑和分界面逻辑分外拮据。今后J二EE
的多层公司级应用模型将两层化模型中的差别规模切分成很多层。五个多层化应用可感到分化的各样服务提供多个单独的层,以下是
J贰EE 规范的四层构造:

 

  二. J2EE的优势

  容器设置定制了J二EE服务器所提供得内在支撑,包含平安,事务管理,JNDI(Java
Naming and Directory
Interface)寻址,远程连接等劳务,以下列出最重要的二种服务:

串后,从中获得签字(格式如上)和需签署的初稿。商家端程序(商家自行开拓MD5with昂CoraSA署闻明高校验程序)将签订契约和商行端的公钥调换到2进制格式,与签字的初稿一同对签字的不利举办校验,校验步骤如下:

  生存周期管理(Life Cycle
Management)模型管理enterprise bean的始建和移除,2个enterprise
bean在其生存周期中校会历经两种情况。容器创立enterprise
bean,并在可用实例池与活动状态中移动她,而最终将其从容器中移除。就算能够调用enterprise
bean的create及remove方法,容器也将会在后台推行这么些任务。

ByteUtil.java

  四. J2EE 的结构

该参数的MD伍字符串的逐条为:v_oid,v_pstatus,v_amount,v_moneytype,key

澳门新莆京赌场网站app 7

 

  JTS是CORBA
OTS事务监察和控制的骨干的兑现。JTS规定了业务管理器的兑现方式。该事务管理器是在高层帮忙Java
Transaction API (JTA)规范,并且在较底层达成OMG OTS
specification的Java影像。JTS事务管理器为应用服务器、能源管理器、独立的应用以及通讯财富管理器提供了业务服务。

   客户点击结帐时将关于訂單的新闻和货币音讯,相应的音讯URL,经过md5或任何措施发送(只怕Socket和Http或Https)支付平台(块钱,paypal或支付宝等),支付平臺管理完结时依据对应URL,重回相关的音信(付款音讯,訂單新闻,验证音讯).

  业务层代码的逻辑用来满足银行,零售,金融等新鲜商务领域的供给,由运行在作业层上的enterprise
bean 举行管理. 下图表明了三个enterprise bean
是什么样从客户端程序接收数据,进行管理(假诺需求的话), 并发送到EIS
层积存的,那些进程也足以逆向举办。

 

  J二EE平台由壹整套劳务(瑟维斯s)、应用程序接口(APIs)和协商构成,它对开辟基于Web的多层应用提供了成效支撑,上边对J贰EE中的1三种技能标准举行简要的描述(限于篇幅,那里只好举行轻易的叙述):

 

  有三种集团级的bean: 会话(session)
beans, 实体(entity) beans, 和消息使得(message-driven) beans. 会话bean
表示与客户端程序的目前交互. 当客户端程序推行完后, 会话bean
和有关数据就会消失. 相反, 实体bean 表示数据库的表中1行恒久的记录.
当客户端程序中止或服务器关闭时, 就会有秘密的服务保障实体bean
的数目足以保存.音信使得 bean 结合了会话bean 和 JMS的新闻监听器的特色,
允许二个业务层组件异步接收JMS 新闻。

<input
type=hidden name=v_md5info
value=”1630DC083D70A1E8AF60F49C143A7B95″>                 订单MD5校验码

该新闻格式详细表明如下:v_url是该笔订单提交时参数v_url
的值,即网银重返到商家的接口地址。

商人>>>>>>网银在线支付:

 

2010-02-09

 

 

  在实际操作Money的题目人们根本关心他的安全性等主题素材,同时自个儿习于旧贯在通过http形式访问非外网时行使Commons-httpclient的post发送达成,轻便方便,所以利用此种实现:具体看之下API和原代码:

近年来爱护项目中在线支付,所以看一下文书档案,在线支付使用开荒:

 

 

依照中国银行的明显,大家发送的多寡须要张开MD5 加密,平安银行对回到的数量举行了数字签字,大家须求校验具名的管用。以下是中国银行的两项约定:

、2)结果。

 

 

 

网银在线支付API接口:

 

<input
type=hidden name=v_amount value=”13.45″>                   订单总金额

 

 

支出银行,举个例子工商业银行行

* /\*
  * 调用支出网关接口网站

MD伍校验串生成方法:当消费者在商家端生成最后订单的时候,将订单中的v_amount
v_moneytype v_oid v_mid v_url key两个参数的value值拼成一个无距离的字符串(顺序并非转移)。参数key是商家的MD伍密钥(该密匙可在登录商家处理分界面后自动更改。)

  1.       工商业银行行家居银行项目组决定对经纪人向互连网银行系统提交的交易内容开始展览MAC校验,校验算法选用正式MD5算法,不带密钥。该算法的详尽表明请参见KoleosFC 1321文书档案。
      
  2.   
  3.     商行进行专门的学业的MD伍算法对向互连网银行系统提交的贸易内容张开MAC校验,产生1二17个人(bit)的MAC结果。输入为字符串,输出为1陆进制字符表示的字符串。
      
  4.   
  5. 下面是对MAC结果的彰显形式的叙述:
      
  6.   
  7. 对12十九人的交易结果按二位为一个单位开始展览划分,共赚取3贰段
      
  8.   
  9. 将每段看成1个1六进制数,如0011为0X三,1⑩1为0Xd。
      
  10.   
  11. 将以此数映射到ASCII码表,产生对应的字符,如0X二为“二”,0Xd为“d”。
      
  12.   
  13. 将这几个字符连成八个字符串,长度为3二。
      
  14.   
  15.     
  16.   
  17.     下边是部分字符串举行MAC并按上述办法开始展览转换后获得的结果:
      
  18.   
  19. MD5 (“”) = d41d8cd98f00b204e9800998ecf8427e
      
  20.   
  21. MD5 (“a”) = 0cc175b9c0f1b6a831c399e269772661
      
  22.   
  23. MD5 (“abc”) = 900150983cd24fb0d6963f7d28e17f72  

支付完结

 MD5字符串示例

 

  1.  银行将客户开采消息实时通报给商贾时,使用的数字具名算法是MD伍withQashqaiSA算法。商行验证具名的公钥在商贩在网银河系统开户,获取数字证书后,登入到网银河系统中,通过下载公钥交易获得。(下载后需稳当保管并立时更新商家公钥,避防公私钥不相称变成验签不通过)。(近期失业银行项目组选择静态密钥对,上线前生成1对,发给同盟商行。)
      
  2.   
  3.       专营商获取的公钥用X.50玖格式表示,并且将其遵照每几位(bit)调换为3个1陆进制数的方法意味着,产生1陆进制的字符串。家居银行动用标准MD5withTiggoSA算法对给商贾的响应举办签订契约,产生十二十3位(bit)的签名结果,并且将其依照每3人(bit)调换为2个16进制数的主意表示,产生16进制的字符串,长度为256。 
      
  4.   
  5.     
  6.   
  7. 上边是对签字结果的意味方法的叙述:
      
  8.   
  9. 对拾二三人的贸易结果按2位为3个单位进行分割,共获取25陆段
      
  10.   
  11. 将每段看成二个16进制数,如001一为0X三,1拾1为0Xd。
      
  12.   
  13. 将以此数映射到ASCII码表,形成相应的字符,如0X二为“2”,0Xd为“d”。
      
  14.   
  15. 将这么些字符连成一个字符串,长度为25陆。
      
  16.   
  17.     
  18.   
  19. 例如:   
  20.   
  21. 待签字的字符串为:
      
  22.   
  23. POSID=000000000&BRANCHID=110000000&ORDERID=19991101234&PAYMENT=500.00&CURCODE=01&REMARK1=19991101&REMARK2=merchantname&SUCCESS=Y  
  24.   
  25. 签名结果为:
      
  26.   
  27. 4b3ef029516193b7d969ac1840083635a3e0901b8cd526caa44c1a072f496d7f0d4bca3942c0d9030bede37c7809b835cec787eb39e18b7596a724fba9805b24714dfbb0f4a3fb430b32e075254a114d4c38a0ac52ef46a0ad33dec3fbfc15417402a1399e65e46996c0cf49fc7ffca9222f8cd693c8376b6f928828967bec42
      
  28.   
  29.     
  30.   
  31.       当商家接受银行传来的CGI串后,从中获得签字(格式如上)和需签署的初稿。商行端程序(商行自行开拓MD伍withXC60SA具名校验程序)将签署和商家端的公钥调换来二进制格式,与签名的原著一齐对签字的没有错举行校验,校验步骤如下:
      
  32.   
  33. 采纳公钥举行签订契约的逆运算
      
  34.   
  35. 利用正规MD5算法运算原文  
  36.   
  37. 比较1)、2)结果。  

 

再次回到值表达

import
static
cn.com.vnvtrip.china.pay.commons.ChinaPayConstants.CHINABANK_NOTIFY_URL_HTTP;
import static
cn.com.vnvtrip.china.pay.commons.ChinaPayConstants.CHINABANK_PAY_HTTPS;
import static
cn.com.vnvtrip.china.pay.commons.ChinaPayConstants.CHINABANK_PAY_MD5_KEY;

订单MD5校验码

开采成功后页面转到商行,从网银在线支付重临的音讯格式为:

30(表示支付战败)

表3

 

 

<input
type=hidden name=v_orderstatus value=”0″>            
        商品新闻

http://dotnet.5d6d.com/thread-475-1-1.html

 

 /**
  * 得到网银訂單付款后Md5加密检查   *  
* @param v_oid   * @param v_pstatus   * @param v_amount   *
@param v_moneytype   * @param key   * @return   */  private static
String getCheckMd5(String v_oid, String v_pstatus,    String
v_amount, String v_moneytype, String key) {   StringBuffer sb = new
StringBuffer();   sb.append(v_oid);   sb.append(v_pstatus);
  sb.append(v_amount);   sb.append(v_moneytype);   sb.append(key);
  byte[] bytes = DigestUtils.md5(sb.toString());   String md5info =
new String(bytes).toUpperCase();   return md5info;  } }

 

MD5 (“a”) =
0cc175b9c0f1b6a831c399e269772661

 

v_oid

 

币种

 

remark1

变量命名

 

校验,校验算法选用标准MD5算法,不带密钥。该算法的详实表明请参见冠道FC
13二一文档。

</form>

 

v_md5str

v_pmode

变量名称

 

 网银在线支付>>>商行

<input
type=hidden name=v_ordername value=”李四”>               
订货人姓名

 

20(表示支付成功)

算法运算原来的小说

 

 

<input
type=hidden name=v_oid value=”19990720-1001-000001234″>
    订单号码

 

备注字段1

 

订单总金额

 

 

开采动作不蔓不枝后赶回到该url,支付结果以POST情势发送

 

 

<input
type=hidden name=v_mid value=”1001“>                      
 商人编号

MD5 (“”) =
d41d8cd98f00b204e9800998ecf8427e

<input
type=hidden name=v_url value=”http://domain/program"&gt;

 /**
  * result为付出完成接受的结果的map
校验检查测试在网银支付多少是或不是被堵住的   *  
* @param v_oid  *            获取结果中的訂單编号   *
@param v_pstatus  *            获取訂單的开销情形   *
@param v_pstring  *            支付的结果   *
@param v_amount  *            实际开销的金额   *
@param v_moneytype  *            实际付出的币种   *
@param v_md5str  *            获取訂單校验的MD5验证   *
@return   */  public static boolean checkPayOff(String v_oid, String
v_pstatus,    String v_pstring, String v_amount, String v_moneytype,
   String v_md5str) {   Properties p = Env.getEnv().getProperties();
  String md5key = p.getProperty(CHINABANK_PAY_MD5_KEY);   String
checkmd5 = getCheckMd5(v_oid, v_pstatus, v_amount, v_moneytype,
    md5key);   if (checkmd5.equals(v_md5str)) {    return true;   }
  return false;  }

 

<input
type=hidden name=v_rcvtel value=”6847556陆”>                  收货人电话

v_moneytype

import
org.apache.commons.codec.digest.DigestUtils;

<input
type=”hidden” name=”remark一 ” value=””>备注字段一

<input
type=hidden name= v_orderemail value=”test@test.com”>     
 订货人邮件

 

 

银行结帐的接口代理
(本人习于旧贯使用Commons-httpclient落成)   *
用途:用来接受专营商发给网银在线服务支付的订单消息   *  
* @param v_mid   *            商行编号(非空)   *
@param v_oid   *            订单号码(非空)(格式:订单生成日期(yyyymmdd)-商行编号-商行流水号)字段不可超越64位   *
@param v_amount   *            订单总金额
(非空)   *
@param v_moneytype   *            货币类型
(非空)
0:RMB 1新币   *
@param v_url   *            (非空)
支付的动作一气浑成时重返的该url,支付结果以post方式发送   *
@param v_md5info   *            订单md5校验码   *
@param remark1   *            备注字段1(可选字段)   *
@param remark2   *            备注字段2
(可选字段)   *
@param v_vmd  
*            yyyymmdd
备注字段2
(不可为空字段)   *
@param v_rcvname   *            收货人姓名
(自定义非网银必须字段)   *
@param v_rcvaddr   *            收货人地址(自定义非网银必须字段)   *
@param v_rcvtel   *            收货人电话(自定义非网银必须字段)   *
@param v_rcpost   *            收货人邮政编码(自定义非网银必须字段)   *
@param v_orderstatus   *            商品音信(自定义非网银必须字段)   *
@param v_ordername   *            订货人姓名(自定义非网银必须字段)   *
@param v_orderemail   *            订货人邮件(自定义非网银必须字段)   *
@return   */  public static boolean chinaBankPayCheck(String v_mid,
String v_oid,    String v_amount, String v_moneytype, String v_url,
String remark1,    String remark2, String v_rcvname, String v_rcvaddr,
   String v_rcvtel, String v_rcpost, String v_orderstatus,    String
v_ordername, String v_orderemail) {   Properties p =
Env.getEnv().getProperties();   String md5key =
p.getProperty(CHINABANK_PAY_MD5_KEY);   String v_md5info =
getMd5Sign(v_amount, v_moneytype, v_oid, v_mid,     v_url, md5key);
  Map<String, String> paramMaps = new HashMap<String,
String>();   paramMaps.put(“v_mid”, v_mid);
  paramMaps.put(“v_oid”, v_oid);   paramMaps.put(“v_amount”,
v_amount);   paramMaps.put(“v_moneytype”, v_moneytype);
  paramMaps.put(“v_url”, p.getProperty(CHINABANK_NOTIFY_URL_HTTP));
  paramMaps.put(“v_md5info”, v_md5info);   paramMaps.put(“remark1”,
remark1);   paramMaps.put(“remark2”, remark2);
  paramMaps.put(“v_rcvname”, v_rcvname);   paramMaps.put(“v_rcvaddr”,
v_rcvaddr);   paramMaps.put(“v_rcvtel”, v_rcvtel);
  paramMaps.put(“v_rcpost”, v_rcpost);
  paramMaps.put(“v_orderstatus”, v_orderstatus);
  paramMaps.put(“v_ordername”, v_ordername);
  paramMaps.put(“v_orderemail”, v_orderemail);   return
HTTPClient.executeHttp(CHINABANK_PAY_HTTPS, paramMaps, null);
 }**

 

 

支出结果音讯

结果的展现形式的叙说:

 

光大银行附录
① : MAC 算法表达

发表评论

电子邮件地址不会被公开。 必填项已用*标注