用Struts2实现在线银行付款

用Struts2实现在线银行付款

                                                                    用Struts2实现在线银行付款 源代码:(没有Struts2空项目下的包)/Files/musiclover/PayOnline.rar
1.方式:通过中间企业再连接到在线银行(特征:风险大,适合小型的付款,但是维护容易)
        这里用的是 易宝 作为中间企业 

A.搭建Struts的环境
下载Struts的架包-->添加空项目下的lib中的包到WEB PROJECT 中的lib中
配置 struts.xml 和 xml filter的配置
B.创建Utils工具类
 DigestUtil.java 这个类是用 商户(企业)的 密钥(易宝分配的)和一些付款的信息加起来产生 验证字段
package  cn.xixi.utils;

import  java.io.UnsupportedEncodingException;
import  java.security.MessageDigest;
import  java.security.NoSuchAlgorithmException;
import  java.util.Arrays;

public   class  DigestUtil {

    
private   static  String encodingCharset  =   " UTF-8 " ;
    
    
/**
     * 
@param  aValue
     * 
@param  aKey
     * 
@return
     
*/
    
public   static  String hmacSign(String aValue, String aKey) {
        
byte  k_ipad[]  =   new   byte [ 64 ];
        
byte  k_opad[]  =   new   byte [ 64 ];
        
byte  keyb[];
        
byte  value[];
        
try  {
            keyb 
=  aKey.getBytes(encodingCharset);
            value 
=  aValue.getBytes(encodingCharset);
        } 
catch  (UnsupportedEncodingException e) {
            keyb 
=  aKey.getBytes();
            value 
=  aValue.getBytes();
        }

        Arrays.fill(k_ipad, keyb.length, 
64 , ( byte 54 );
        Arrays.fill(k_opad, keyb.length, 
64 , ( byte 92 );
        
for  ( int  i  =   0 ; i  <  keyb.length; i ++ ) {
            k_ipad[i] 
=  ( byte ) (keyb[i]  ^   0x36 );
            k_opad[i] 
=  ( byte ) (keyb[i]  ^   0x5c );
        }

        MessageDigest md 
=   null ;
        
try  {
            md 
=  MessageDigest.getInstance( " MD5 " );
        } 
catch  (NoSuchAlgorithmException e) {

            
return   null ;
        }
        md.update(k_ipad);
        md.update(value);
        
byte  dg[]  =  md.digest();
        md.reset();
        md.update(k_opad);
        md.update(dg, 
0 16 );
        dg 
=  md.digest();
        
return  toHex(dg);
    }

    
public   static  String toHex( byte  input[]) {
        
if  (input  ==   null )
            
return   null ;
        StringBuffer output 
=   new  StringBuffer(input.length  *   2 );
        
for  ( int  i  =   0 ; i  <  input.length; i ++ ) {
            
int  current  =  input[i]  &   0xff ;
            
if  (current  <   16 )
                output.append(
" 0 " );
            output.append(Integer.toString(current, 
16 ));
        }

        
return  output.toString();
    }

    
/**
     * 
     * 
@param  args
     * 
@param  key
     * 
@return
     
*/
    
public   static  String getHmac(String[] args, String key) {
        
if  (args  ==   null   ||  args.length  ==   0 ) {
            
return  ( null );
        }
        StringBuffer str 
=   new  StringBuffer();
        
for  ( int  i  =   0 ; i  <  args.length; i ++ ) {
            str.append(args[i]);
        }
        
return  (hmacSign(str.toString(), key));
    }

    
/**
     * 
@param  aValue
     * 
@return
     
*/
    
public   static  String digest(String aValue) {
        aValue 
=  aValue.trim();
        
byte  value[];
        
try  {
            value 
=  aValue.getBytes(encodingCharset);
        } 
catch  (UnsupportedEncodingException e) {
            value 
=  aValue.getBytes();
        }
        MessageDigest md 
=   null ;
        
try  {
            md 
=  MessageDigest.getInstance( " SHA " );
        } 
catch  (NoSuchAlgorithmException e) {
            e.printStackTrace();
            
return   null ;
        }
        
return  toHex(md.digest(value));

    }
}

 2.使用上面的类 加上易宝要求的字段 产生 验证字段 hmac
package  cn.xixi.utils;

public   class  payOnlineUtil  {
    
/** *//**
     * 生成hmac方法
     * 
     * 
@param p0_Cmd
     *            业务类型
     * 
@param p1_MerId
     *            商户编号
     * 
@param p2_Order
     *            商户订单ID号
     * 
@param p3_Amt
     *            支付金额
     * 
@param p4_Cur
     *            交易币种
     * 
@param p5_Pid
     *            商品名称
     * 
@param p6_Pcat
     *            商品种类
     * 
@param p7_Pdesc
     *            商品描述
     * 
@param p8_Url
     *            商户接受支付成功后的地址
     * 
@param p9_SAF
     *            送货地址
     * 
@param pa_MP
     *            商户扩展信息
     * 
@param pd_FrpId
     *            银行编码
     * 
@param pr_NeedResponse
     *            应答机制
     * 
@param keyValue
     *            商户密钥
     * 
@return
     
*/

    
public static String createHmac(String p0_Cmd, String p1_MerId,
            String p2_Order, String p3_Amt, String p4_Cur, String p5_Pid,
            String p6_Pcat, String p7_Pdesc, String p8_Url,
            String p9_SAF, String pa_MP, String pd_FrpId,
            String pr_NeedResponse, String keyValue) 
{
        StringBuffer sValue 
= new StringBuffer();
        sValue.append(p0_Cmd);
        sValue.append(p1_MerId);
        sValue.append(p2_Order);
        sValue.append(p3_Amt);
        sValue.append(p4_Cur);
        sValue.append(p5_Pid);
        sValue.append(p6_Pcat);
        sValue.append(p7_Pdesc);
        sValue.append(p8_Url);
        sValue.append(p9_SAF);
        sValue.append(pa_MP);
        sValue.append(pd_FrpId);
        sValue.append(pr_NeedResponse);
        String resultValue 
= DigestUtil.hmacSign(sValue.toString(), keyValue);
        
return resultValue;
    }


    
/** *//**
     * 返回校验hmac方法
     * 
     * 
@param hmac
     *            支付网关发来的加密验证码
     * 
@param p1_MerId
     *            商户编号
     * 
@param r0_Cmd
     *            业务类型
     * 
@param r1_Code
     *            支付结果
     * 
@param r2_TrxId
     *            易宝支付交易流水号
     * 
@param r3_Amt
     *            支付金额
     * 
@param r4_Cur
     *            交易币种
     * 
@param r5_Pid
     *            商品名称
     * 
@param r6_Order
     *            商户订单号
     * 
@param r7_Uid
     *            易宝支付会员ID
     * 
@param r8_MP
     *            商户扩展信息
     * 
@param r9_BType
     *            交易结果返回类型
     * 
@param keyValue
     *            密钥
     * 
@return
     
*/

    
public static boolean verifyCallback(String hmac, String p1_MerId,
            String r0_Cmd, String r1_Code, String r2_TrxId, String r3_Amt,
            String r4_Cur, String r5_Pid, String r6_Order, String r7_Uid,
            String r8_MP, String r9_BType, String keyValue) 
{
        StringBuffer sValue 
= new StringBuffer();
        
// 商户编号
        sValue.append(p1_MerId);
        
// 业务类型
        sValue.append(r0_Cmd);
        
// 支付结果
        sValue.append(r1_Code);
        
// 易宝支付交易流水号
        sValue.append(r2_TrxId);
        
// 支付金额
        sValue.append(r3_Amt);
        
// 交易币种
        sValue.append(r4_Cur);
        
// 商品名称
        sValue.append(r5_Pid);
        
// 商户订单号
        sValue.append(r6_Order);
        
// 易宝支付会员ID
        sValue.append(r7_Uid);
        
// 商户扩展信息
        sValue.append(r8_MP);
        
// 交易结果返回类型
        sValue.append(r9_BType);
        String sNewString 
= DigestUtil.hmacSign(sValue.toString(), keyValue);

        
if (hmac.equals(sNewString)) {
            
return true;
        }

        
return false;
    }

}

3.开始写 发送请求之前的验证类 RayRequest.java   用到Spring的工具,包自己添加
package  cn.xixi.actions;

import  java.util.Properties;
import  java.util.regex.Pattern;

import  org.springframework.core.io.support.PropertiesLoaderUtils;

import  cn.xixi.utils.payOnlineUtil;

import  com.opensymphony.xwork2.ActionSupport;

public   class  PayRequest  extends  ActionSupport  {
    
/** *//**
     * 生成hmac.Action
     * 
     * 
@param p0_Cmd
     *            业务类型
     * 
@param p1_MerId
     *            商户编号
     * 
@param p2_Order
     *            订单ID号
     * 
@param p3_Amt
     *            支付金额
     * 
@param p4_Cur
     *            交易币种
     * 
@param p5_Pid
     *            商品ID
     * 
@param p6_Pcat
     *            商品种类
     * 
@param p7_Pdesc
     *            商品描述
     * 
@param p8_Url
     *            商户接受支付成功后的地址
     * 
@param p9_SAF
     *            送货地址 "0"不需要 "1"为需要
     * 
@param pa_MP
     *            商户扩展信息
     * 
@param pd_FrpId
     *            银行编码
     * 
@param pr_NeedResponse
     *            应答机制
     * 
@param keyValue
     *            商户密钥
     * 
@return
     
*/

    
// 从用户选择 或是 数据库获得的
    private String orderid;// 订单ID p2_Order
    private String amount; // 金额 p3_Amt
    private String pd_FrpId; // 银行号 pd_FrpId

    
// 商户申请后得到的信息放在merchantInfo.properties
    private String p1_MerId; // 商户ID p1_MerId
    private String keyValue; // 商户密钥 keyValue
    private String p8_Url; // 接受支付成功后返回的地址 p8_Url

    
// 一般默认值
    private String p0_Cmd = "Buy";// 业务类型默认为"buy"
    private String p4_Cur = "CNY";// 默认单位是人民币
    private String p5_Pid = "";// 商品ID 留空
    private String p6_Pcat = "";// 商品种类 留空
    private String p7_Pdesc = "";// 商品描述 留空
    private String p9_SAF = "0"// 不需要地址
    private String pa_Mp = ""// 不需要商户扩展信息
    private String pr_NeedResponse = "0"// 不需要应答
    private String hmacValue;

    
public String getOrderid() {
        
return orderid;
    }


    
public void setOrderid(String orderid) {
        
this.orderid = orderid;
    }


    
public String getAmount() {
        
return amount;
    }


    
public void setAmount(String amount) {
        
this.amount = amount;
    }


    
public String getPd_FrpId() {
        
return pd_FrpId;
    }


    
public void setPd_FrpId(String pd_FrpId) {
        
this.pd_FrpId = pd_FrpId;
    }


    
public String getHmacValue() {
        
return hmacValue;
    }


    
public void setHmacValue(String hmacValue) {
        
this.hmacValue = hmacValue;
    }


    
public String getP1_MerId() {
        
return p1_MerId;
    }


    
public String getP8_Url() {
        
return p8_Url;
    }


    
public String getP0_Cmd() {
        
return p0_Cmd;
    }


    
public String getP4_Cur() {
        
return p4_Cur;
    }


    
public String getP5_Pid() {
        
return p5_Pid;
    }


    
public String getP6_Pcat() {
        
return p6_Pcat;
    }


    
public String getP7_Pdesc() {
        
return p7_Pdesc;
    }


    
public String getP9_SAF() {
        
return p9_SAF;
    }


    
public String getPa_Mp() {
        
return pa_Mp;
    }


    
public String getPr_NeedResponse() {
        
return pr_NeedResponse;
    }


    
// 重写 execute()和validate()方法
    public String execute() throws Exception {
        
        Properties props
=PropertiesLoaderUtils.loadAllProperties("merchantInfo.properties");
        p1_MerId
=props.getProperty("p1_MerId");
        keyValue
=props.getProperty("keyValue");
        p8_Url
=props.getProperty("merchantCallbackURL");
        
// 产生hmac码
        hmacValue=payOnlineUtil.createHmac(p0_Cmd, p1_MerId, orderid, amount, p4_Cur, p5_Pid, p6_Pcat, p7_Pdesc, p8_Url, p9_SAF, pa_Mp, pd_FrpId, pr_NeedResponse, keyValue);
        
return SUCCESS;
    }


    
public void validate() {
        
// 如果orderid amout不为空并且不在数字中
      if(null==orderid||null==amount||"".equals(orderid.trim())||"".equals(amount.trim())||null==pd_FrpId||"".equals(pd_FrpId.trim())){
        
this.addFieldError("orderid","3项都不能为空!");  
      }

    }


}

struts2.xml
<? xml version = " 1.0 "  encoding = " UTF-8 "   ?>
<! DOCTYPE struts PUBLIC
    
" -//Apache Software Foundation//DTD Struts Configuration 2.0//EN "
    
" http://struts.apache.org/dtds/struts-2.0.dtd " >

< struts >


    
< package  name = " default "    extends = " struts-default " >
        
< action name = " payValidate "   class = " cn.xixi.actions.PayRequest " >
         
< result name = " input " >/ index.jsp </ result >
         
< result name = " success " >/ connect.jsp </ result >
        
</ action >
        
        
< action name = " payResult "   class = " cn.xixi.actions.PayResult " >
          
< result name = " success "   >/ response.jsp </ result >  
        
</ action >
    
</ package >
</ struts >
index.jsp的代码:需要输入订单号 金额 网上银行
<% @ page language = " java "   import = " java.util.* "  pageEncoding = " GBK " %>
<! DOCTYPE HTML PUBLIC  " -//W3C//DTD HTML 4.01 Transitional//EN " >
<% @taglib prefix = " s "  uri = " /struts-tags " %>
< html >
  
< head >
  
    
< title > 巴巴运动网_支付第一步,选择支付银行 </ title >
    
< meta http - equiv = " pragma "  content = " no-cache " >
    
< meta http - equiv = " cache-control "  content = " no-cache " >
    
< meta http - equiv = " expires "  content = " 0 " >     

  
</ head >
  
  
< body >
  
< H2 >< s:fielderror ></ s:fielderror ></ H2 >
< table width = " 960 "  border = " 0 "  align = " center " >
  
< tr >
    
< td width = " 536 "  valign = " top " >
    
< form action = " payValidate "  method = " post "  name = " paymentform " >
    
    
< table width = " 100% "  border = " 0 " >
      
< tr >
        
< td height = " 30 "  colspan = " 4 " >< table width = " 100% "  height = " 50 "  border = " 0 "  cellpadding = " 0 "  cellspacing = " 1 "  bgcolor = " #A2E0FF " >
          
< tr >
            
< td align = " center "  bgcolor = " #F7FEFF " >< h3 > u订单号: < INPUT TYPE = " text "  NAME = " orderid " >  应付金额:¥ < INPUT TYPE = " text "  NAME = " amount "  size = " 6 " > </ h3 ></ td >
          
</ tr >
        
</ table ></ td >
        
</ tr >
      
< tr >
        
< td colspan = " 4 " >& nbsp; </ td >
        
</ tr >
      
< tr >
        
< td height = " 30 "  colspan = " 4 "  bgcolor = " #F4F8FF " >< span  class = " STYLE3 " > 请您选择在线支付银行 </ span >   </ td >
        
</ tr >
      
< tr >
        
< td width = " 26% "  height = " 25 " >< INPUT TYPE = " radio "  NAME = " pd_FrpId "  value = " CMBCHINA-NET " > 招商银行  </ td >
        
< td width = " 25% "  height = " 25 " >< INPUT TYPE = " radio "  NAME = " pd_FrpId "  value = " ICBC-NET " > 工商银行 </ td >
        
< td width = " 25% "  height = " 25 " >< INPUT TYPE = " radio "  NAME = " pd_FrpId "  value = " ABC-NET " > 农业银行 </ td >
        
< td width = " 24% "  height = " 25 " >< INPUT TYPE = " radio "  NAME = " pd_FrpId "  value = " CCB-NET " > 建设银行  </ td >
      
</ tr >
      
< tr >
        
< td height = " 25 " >< INPUT TYPE = " radio "  NAME = " pd_FrpId "  value = " CMBC-NET " > 中国民生银行总行 </ td >
        
< td height = " 25 " >< INPUT TYPE = " radio "  NAME = " pd_FrpId "  value = " CEB-NET "   > 光大银行  </ td >
        
< td height = " 25 " >< INPUT TYPE = " radio "  NAME = " pd_FrpId "  value = " BOCO-NET " > 交通银行 </ td >
        
< td height = " 25 " >< INPUT TYPE = " radio "  NAME = " pd_FrpId "  value = " SDB-NET " > 深圳发展银行 </ td >
      
</ tr >
      
< tr >
        
< td height = " 25 " >< INPUT TYPE = " radio "  NAME = " pd_FrpId "  value = " BCCB-NET " > 北京银行 </ td >
        
< td height = " 25 " >< INPUT TYPE = " radio "  NAME = " pd_FrpId "  value = " CIB-NET " > 兴业银行  </ td >
        
< td height = " 25 " >< INPUT TYPE = " radio "  NAME = " pd_FrpId "  value = " SPDB-NET " > 上海浦东发展银行  </ td >
        
< td  >< INPUT TYPE = " radio "  NAME = " pd_FrpId "  value = " ECITIC-NET " > 中信银行 </ td >
      
</ tr >
      
< tr >
        
< td colspan = " 4 " >& nbsp; </ td >
        
</ tr >
      
< tr >
        
< td colspan = " 4 "  align = " center " >< input type = " submit "  value = "  确认支付  "   /></ td >
        
</ tr >
    
</ table >
    
</ form >      </ td >
    
< td colspan = " 2 "  valign = " top " >< div  class = " divts " >< table width = " 400 "  border = " 0 "  align = " center "  cellpadding = " 5 "  cellspacing = " 0 " >
      
< tr >
        
< td bgcolor = " #F4F8FF " >< span  class = " STYLE5 " >  温馨提示 </ span ></ td >
      
</ tr >
      
< tr >
        
< td >< ul >< li >  建行客户需到柜面签约网上银行才能支付 </ li >
        
< li > 请关闭弹出窗口拦截功能 </ li >
        
< li > 务必使用IE5.0以上浏览器 </ li >
        
< li > 支付出错时勿按IE“后退”键 </ li >
        
</ ul ></ td >
      
</ tr >
    
</ table >
    
</ div >
    
    
< div id = " blankmessage " ></ div >      </ td >
  
</ tr >
  
< tr >
    
< td >& nbsp; </ td >
    
< td width = " 290 " >& nbsp; </ td >
    
< td width = " 120 " >& nbsp; </ td >
  
</ tr >
</ table >
< H2 >< s:fielderror ></ s:fielderror ></ H2 >
  
</ body >
</ html >

转发到connect.jsp
<% @ page language = " java "   import = " java.util.* "  pageEncoding = " GBK " %>

<! DOCTYPE HTML PUBLIC  " -//W3C//DTD HTML 4.01 Transitional//EN " >
< html >
  
< head >
        
< title > 连接易宝 </ title >
    
    
< meta http - equiv = " pragma "  content = " no-cache " >
    
< meta http - equiv = " cache-control "  content = " no-cache " >
    
  
</ head >
  
< body onload = " javascript:document.forms[0].submit() " >
    测试号的连接:http:
// tech.yeepay.com:8080/robot/debug.action
    真实网址的连接:https: // www.yeepay.com/app-merchant-proxy/node
     < form name = " yeepay "  action = " https://www.yeepay.com/app-merchant-proxy/node "  method = ' post ' >     
        
< input type = ' hidden '  name = ' p0_Cmd '    value = " ${p0_Cmd} " >   <!--  请求命令,在线支付固定为Buy  -->
        
< input type = ' hidden '  name = ' p1_MerId '  value = " ${p1_MerId} " >   <!--  商家ID  -->
        
< input type = " hidden "  name = " p2_Order "  value = " ${orderid} " >   <!--  商家的交易定单号  -->
        
< input type = ' hidden '  name = ' p3_Amt '    value = " ${amount} " >   <!--  订单金额  -->
        
< input type = ' hidden '  name = ' p4_Cur '    value = " ${p4_Cur} " >   <!--  货币单位  -->
        
< input type = ' hidden '  name = ' p5_Pid '    value = " ${p5_Pid} " >   <!--  商品ID  -->
        
< input type = ' hidden '  name = ' p6_Pcat '   value = " ${p6_Pcat} " >   <!--  商品种类  -->
        
< input type = ' hidden '  name = ' p7_Pdesc '  value = " ${p7_Pdesc} " >   <!--  商品描述  -->
        
< input type = ' hidden '  name = ' p8_Url '    value = " ${p8_Url} " >   <!--  交易结果通知地址  -->
        
< input type = ' hidden '  name = ' p9_SAF '    value = " ${P9_SAF} " >   <!--  需要填写送货信息  0 :不需要  1 :需要  -->
        
< input type = ' hidden '  name = ' pa_MP '     value = " ${pa_MP} " >   <!--  商家扩展信息  -->
        
< input type = ' hidden '  name = ' pd_FrpId '  value = " ${pd_FrpId} " >   <!--  银行ID  -->
        
<!--  应答机制 为“ 1 ”: 需要应答机制;为“ 0 ”: 不需要应答机制  -->
        
< input type = " hidden "  name = " pr_NeedResponse "   value = " 0 " >
        
< input type = ' hidden '  name = ' hmac '  value = " ${hmacValue} " ><!--  MD5 - hmac验证码  -->
        
< input type = " submit "  value = " 发送 " />
    
</ form >
  
</ body >
</ html >


企业私密信息  merchantInfo.properties
p1_MerId = 10000365642
keyValue
= u278fHbT7JSNtox25S89342UJ3112GwDASn89YZ674445V6a183s6Aa4s3l3
merchantCallbackURL
= http\: // localhost\:8080/test/payResult
处理易宝返回的信息 PayResult.java
package  cn.xixi.actions;

import  java.util.Properties;

import  org.springframework.core.io.support.PropertiesLoaderUtils;

import  cn.xixi.utils.payOnlineUtil;

import  com.opensymphony.xwork2.ActionSupport;

public   class  PayResult  extends  ActionSupport  {
    
/** *//**
     * 返回校验hmac方法
     * 
     * 
@param hmac
     *            支付网关发来的加密验证码
     * 
@param p1_MerId
     *            商户编号
     * 
@param r0_Cmd
     *            业务类型
     * 
@param r1_Code
     *            支付结果
     * 
@param r2_TrxId 
     *            易宝支付交易流水号
     * 
@param r3_Amt
     *            支付金额
     * 
@param r4_Cur
     *            交易币种
     * 
@param r5_Pid
     *            商品名称
     * 
@param r6_Order
     *            商户订单号
     * 
@param r7_Uid
     *            易宝支付会员ID
     * 
@param r8_MP
     *            商户扩展信息
     * 
@param r9_BType
     *            交易结果返回类型
     * 
@param keyValue
     *            密钥
     * 
@param message
     *           返回给用户的消息           
     * 
@return
     
*/

    
private String p1_MerId;  //商号
    
    
private String r0_Cmd;    //业务类型
    private String r1_Code;   //支付结果 
    private String r2_TrxId;  //易宝支付交易订单号
    private String r3_Amt;  //支付金额
    private String r4_Cur;  //交易币种
    private String r5_Pid;  //商品名称
    private String r6_Order; //商户订单号
    private String r7_Uid;  //易宝支付会员ID
    private String r8_MP; //商户扩展信息
    private String r9_BType; //交易结果返回类型  "1"为通过用户游览器 "2"为服务器点对点
 
    
private String rb_BankId;  //交易的银行ID
    private String ro_BankOrderId; //银行产生的订单ID
    private String rp_PayDate; //付款ID
    private String rq_CardNo; // 属性不是很重要
    private String ru_Trxtime; // 属性不是很重要
    private String hmac;
    
    
private String keyValue; //商户自己的密钥

    
private String message;//返回到游览器提示消息
    
    
public String getMessage() {
        
return message;
    }


    
public void setMessage(String message) {
        
this.message = message;
    }


    
public String getR0_Cmd() {
        
return r0_Cmd;
    }


    
public void setR0_Cmd(String cmd) {
        r0_Cmd 
= cmd;
    }


    
public String getR1_Code() {
        
return r1_Code;
    }


    
public void setR1_Code(String code) {
        r1_Code 
= code;
    }


    
public String getR2_TrxId() {
        
return r2_TrxId;
    }


    
public void setR2_TrxId(String trxId) {
        r2_TrxId 
= trxId;
    }


    
public String getR3_Amt() {
        
return r3_Amt;
    }


    
public void setR3_Amt(String amt) {
        r3_Amt 
= amt;
    }


    
public String getR4_Cur() {
        
return r4_Cur;
    }


    
public void setR4_Cur(String cur) {
        r4_Cur 
= cur;
    }


    
public String getR5_Pid() {
        
return r5_Pid;
    }


    
public void setR5_Pid(String pid) {
        r5_Pid 
= pid;
    }


    
public String getR6_Order() {
        
return r6_Order;
    }


    
public void setR6_Order(String order) {
        r6_Order 
= order;
    }


    
public String getR7_Uid() {
        
return r7_Uid;
    }


    
public void setR7_Uid(String uid) {
        r7_Uid 
= uid;
    }


    
public String getR8_MP() {
        
return r8_MP;
    }


    
public void setR8_MP(String r8_mp) {
        r8_MP 
= r8_mp;
    }


    
public String getR9_BType() {
        
return r9_BType;
    }


    
public void setR9_BType(String type) {
        r9_BType 
= type;
    }


    
public void setRb_BankId(String rb_BankId) {
        
this.rb_BankId = rb_BankId;
    }


    
public void setRo_BankOrderId(String ro_BankOrderId) {
        
this.ro_BankOrderId = ro_BankOrderId;
    }


    
public void setRp_PayDate(String rp_PayDate) {
        
this.rp_PayDate = rp_PayDate;
    }


    
public void setRq_CardNo(String rq_CardNo) {
        
this.rq_CardNo = rq_CardNo;
    }


    
public void setRu_Trxtime(String ru_Trxtime) {
        
this.ru_Trxtime = ru_Trxtime;
    }


    
public void setHmac(String hmac) {
        
this.hmac = hmac;
    }


    
public String execute() throws Exception {
     
//获取商号和keyValue(密钥)    
        Properties props=PropertiesLoaderUtils.loadAllProperties("merchantInfo.properties");
        p1_MerId
=props.getProperty("p1_MerId");
        keyValue
=props.getProperty("keyValue");
        
boolean isLegal=payOnlineUtil.verifyCallback(hmac,p1_MerId, r0_Cmd, r1_Code, r2_TrxId, r3_Amt, r4_Cur, r5_Pid, r6_Order, r7_Uid, r8_MP, r9_BType,keyValue); 
        
//如果验证为合法的话
        if(isLegal){
           
//查看是否用户付钱成功 r1_Code为1表示成功
            if("1".equals(r1_Code)){
                message
="订单号:"+r6_Order+"订单支付成功!";
                
//对数据库修改
                message+="金额:"+r3_Amt+" M";
                
if("1".equals(r9_BType)){
                    message
+="游览器重定向";
                }
else if("2".equals(r9_BType)){
                    message
+="支付网关后台程序通知";
                    
                }

                message
+="易宝订单中自身生成的订单号:"+r2_TrxId;
 
            }

            
       }
else{
           message
="数据来源不合法";
       }
      
     
return SUCCESS;
    }

    
    
}


 结果显示:result.jsp
<% @ page language = " java "   import = " java.util.* "  pageEncoding = " GBK " %>

<! DOCTYPE HTML PUBLIC  " -//W3C//DTD HTML 4.01 Transitional//EN " >
< html >
  
< head >
        
< title > 连接结果 </ title >
    
    
< meta http - equiv = " pragma "  content = " no-cache " >
    
< meta http - equiv = " cache-control "  content = " no-cache " >
    
  
</ head >
  
< body >
  $
{message}
  
</ body >
</ html >


你可能感兴趣的:(用Struts2实现在线银行付款)