=================提交表单jsp,http://www.cnblogs.com/qgc88================================

<%@page contentType="text/html;charset=gb2312" language="java"%>
<!-- import="java.net.URLEncoder" http://www.cnblogs.com/qgc88 -->
<%@page session="true"
    import="com.gnete.paymentgateway.PayUtils,java.text.SimpleDateFormat,java.util.Date"
    %>
 
<html>

<table border=1 bordercolor="ccccff" bgcolor="ccddee" align="center">
    <%
        //定义变量
        String MerId, OrderNo, OrderAmount, CurrCode, BankCode,OrderType, nOrderType, CallBackUrl, ResultMode, Reserved01, Reserved02, SourceText, PKey, SignedMsg, EntryMode;
        boolean ret;
        PKey = "12hi60ohxxxxxxxxxxxxguz";//公司申请的key,http://www.cnblogs.com/qgc88
        SignedMsg = "";

MerId="xxx"; //公司申请的商户ID参数,3位数,http://www.cnblogs.com/qgc88
        System.out.println("商户ID: " + MerId + "<br>");
        Date myDate = new Date();
        OrderNo = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()); //商户订单号,http://www.cnblogs.com/qgc88
        
        System.out.println("商户订单号不超过20位: " + OrderNo + "<br>");
        OrderAmount = "100.01"; //订单金额,格式:元.角分
        System.out.println("订单金额: " + OrderAmount.toString() + "<br>");
        CurrCode = "CNY"; //货币代码,值为:CNY
        System.out.println("货币代码: " + CurrCode + "<br>");
        CallBackUrl = "http://localhost:8080/demo1/successPay.action"; //支付结果接收URL
        
        EntryMode = request.getParameter("EntryMode") == null ? "": request.getParameter("EntryMode"); //支付方式

BankCode = request.getParameter("nBankCode") == null ? "" : request.getParameter("nBankCode");

System.out.println("支付结果接收URL: " + CallBackUrl + "<br>");
        ResultMode = "0"; //支付结果返回方式(0-成功和失败支付结果均返回;1-仅返回成功支付结果)
        Reserved01 = "just"; //保留域1
        Reserved02 = "atest"; //保留域2

OrderType = "B2C";

//组合成订单原始数据
        
        SourceText = MerId + OrderNo + OrderAmount + CurrCode + OrderType + CallBackUrl+ ResultMode + BankCode + EntryMode + Reserved01+ Reserved02;
        System.out.println("<br>SourceText=" +SourceText);
        
        PayUtils payUtils = new PayUtils();

SignedMsg = payUtils.md5(SourceText + payUtils.md5(PKey));

out.println("<br>" + "加密后的信息: " + SignedMsg + "<br>");
        
        ret = payUtils.checkSign(SourceText,SignedMsg,PKey);
        if(ret){
            out.println("<br>"+"验证签名成功!");
        }else{
            out.println("<br>"+"验证签名失败! ");
        }
        //out.println("<br>"+"验证签名: "+"883ef8a28d9602f8705cafb4d01ca754".equals(SignedMsg)  +"<br>");
    %>
  <!--注意,这个url只能是测试帐号调用,如果是正式的帐号请使用:https://www.gnete.com/bin/scripts/OpenVendor/gnete/V36/GetOvOrder.asp -->     
    <form method="post" name="SendOrderForm" action="http://test.gnete.com:8888/Bin/Scripts/OpenVendor/Gnete/V36/GetOvOrder.asp">
 
        <input type='hidden' name='MerId' value='<%=MerId%>'>
        <input type='hidden' name='OrderNo' value='<%=OrderNo%>'>
        <input type='hidden' name='OrderAmount' value='<%=OrderAmount%>'>
        <input type='hidden' name='CurrCode' value='<%=CurrCode%>'>
        <input type='hidden' name='CallBackUrl' value='<%=CallBackUrl%>'>
        <input type='hidden' name='ResultMode' value='<%=ResultMode%>'>
        <input type='hidden' name='OrderType' value='<%=OrderType%>'>
        <input type='hidden' name='BankCode' value='<%=BankCode%>'>
        <input type='hidden' name='EntryMode' value='<%=EntryMode%>'> 0
        <input type='hidden' name='Reserved01' value='<%=Reserved01%>'>
        <input type='hidden' name='Reserved02' value='<%=Reserved02%>'>
        <input type='hidden' name='SignMsg' value='<%=SignedMsg%>'>

<div align="center"><input type="submit" name="Submit" value="提交">
    </div>

</form>
    
    
    <tr>
    </tr>
</table>

</html>

===============PayConf.java工具类,http://www.cnblogs.com/qgc88================================

/**,http://www.cnblogs.com/qgc88
 * 名称:支付配置类
 * 功能:配置类
 * 类属性:公共类
 * 版本:1.0
 * 日期:2012-10-23
 * 作者:银联网络互联网团队
 * 版权:银联网络
 * 说明:以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。该代码仅供参考。
 * */

public class PayConf {
    
    //编码方式
    public final static String charset="GBK";
    //加密方式
    public final static String signType="MD5";
    
}

===============PayUtils.java工具类,http://www.cnblogs.com/qgc88================================

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLConnection;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.LinkedList;
import java.util.ListIterator;
import org.apache.commons.httpclient.methods.PostMethod;

/**,http://www.cnblogs.com/qgc88
 * 名称:支付工具类
 * 功能:工具类,可以生成付款表单等
 * 类属性:公共类
 * 版本:1.0
 * 日期:2012-10-23
 * 作者:银联网络互联网团队
 * 版权:银联网络
 * 说明:以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。该代码仅供参考。
 * */
public class PayUtils {
    /**
     * 验证签名
     * @param sourceText
     * @param signature
     * @param strPKey
     * @return
     */
    public  boolean checkSign(String SourceMsg, String signature, String strPKey) {
        String strKey;
        
        if(SourceMsg == null) return false;
        if(signature == null) return false;  
        if(strPKey == null) return false;
        System.out.println("SourceMsg="+SourceMsg);
        strKey = md5(strPKey);
        strKey = SourceMsg +strKey;
        System.out.println("strKey="+strKey);
        strKey = md5(strKey);
        System.out.println("strKey="+strKey);
        System.out.println("signature="+signature);
        if(signature.equals(strKey)){
            return true;
        }else{
            return false;
        }
        
    }

/**
     * get the md5 hash of a string
     *
     * @param str
     * @return
     */
    public String md5(String str) {

if (str == null) {
            return null;
        }

MessageDigest messageDigest = null;

try {
            messageDigest = MessageDigest.getInstance(PayConf.signType);
            messageDigest.reset();
            messageDigest.update(str.getBytes(PayConf.charset));
        } catch (NoSuchAlgorithmException e) {
            
            return str;
        } catch (UnsupportedEncodingException e) {
            return str;
        }

byte[] byteArray = messageDigest.digest();

StringBuffer md5StrBuff = new StringBuffer();

for (int i = 0; i < byteArray.length; i++) {
            if (Integer.toHexString(0xFF & byteArray[i]).length() == 1)
                md5StrBuff.append("0").append(Integer.toHexString(0xFF & byteArray[i]));
            else
                md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));
        }

return md5StrBuff.toString();
    }

// Clean up resources
    public void destroy() {
    }

/**
     * 查询方法
     * @param strURL
     * @param req
     * @return
     */
    public String doPostQueryCmd(String strURL, String req) {
        String result = null;
        BufferedInputStream in = null;
        BufferedOutputStream out = null;
        try {
            URL url = new URL(strURL);
            URLConnection con = url.openConnection();
            con.setUseCaches(false);
            con.setDoInput(true);
            con.setDoOutput(true);
            out = new BufferedOutputStream(con.getOutputStream());
            System.out.println("Request:=="+req);
            byte outBuf[] = req.getBytes(PayConf.charset);
            out.write(outBuf);
            out.close();
            in = new BufferedInputStream(con.getInputStream());
            result = ReadByteStream(in);
        } catch (Exception ex) {
            System.out.print(ex);
            return "";
        } finally {
            if (out != null) {
                try {
                    out.close();
                } catch (IOException e) {
                }
            }
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                }
            }
        }
        if (result == null)
            return "";
        else
            return result;
    }

private static String ReadByteStream(BufferedInputStream in) throws IOException {
        LinkedList<Mybuf> bufList = new LinkedList<Mybuf>();
        int size = 0;
        byte buf[];
        do {
            buf = new byte[128];
            int num = in.read(buf);
            if (num == -1)
                break;
            size += num;
            bufList.add(new Mybuf(buf, num));
        } while (true);
        buf = new byte[size];
        int pos = 0;
        for (ListIterator<Mybuf> p = bufList.listIterator(); p.hasNext();) {
            Mybuf b = p.next();
            for (int i = 0; i < b.size;) {
                buf[pos] = b.buf[i];
                i++;
                pos++;
            }

}

return new String(buf,PayConf.charset);
    }

}

class UTF8PostMethod extends PostMethod{   
    public UTF8PostMethod(String url){   
        super(url);   
    }   
    @Override  
    public String getRequestCharSet() {   
        return "UTF-8";   
    }   
}

class GBKPostMethod extends PostMethod{   
    public GBKPostMethod(String url){   
        super(url);   
    }   
    @Override  
    public String getRequestCharSet() {   
        return "GBK";   
    }   
}

class Mybuf
{

public byte buf[];
    public int size;

public Mybuf(byte b[], int s)
    {
        buf = b;
        size = s;
    }
}

java对接网银支付案例的更多相关文章

  1. java对接微信支付

    对接微信扫码支付(模式2),前端使用velocity技术 (1)调用微信支付接口(view层)  此部分业务逻辑部分可以省略 @RequestMapping("/wxpay.htm" ...

  2. Android对接微信支付体验

    在写正文之前我不得不吐槽一下:微信支付所提供的参考文档以及技术支持真心太烂了. 微信的坑: 1.在生成prepay_id向微信服务器传递参数时<body>不支持中文.需要对其进行转码,否则 ...

  3. java版微信支付/查询/撤销

    最近公司接入微信刷卡支付,网上根本没见到很直接的教程(可能眼拙),一直摸滚打爬,加班加点才走通,忍不了必须写一写 微信 刷卡支付/查询/撤销... 必须要有公众号然后去申请,申请自己去看文档,这里主要 ...

  4. Java对接拼多多开放平台API(加密上云等全流程)

    前言 本文为[小小赫下士 blog]原创,搬运请保留本段,或请在醒目位置设置原文地址和原作者. 作者:小小赫下士 原文地址:Java对接拼多多开放平台API(加密上云等全流程) 本文章为企业ERP(I ...

  5. 对接第三方支付接口-获取http中的返回参数

    这几天对接第三方支付接口,在回调通知里获取返回参数,有一家返回的json格式,请求参数可以从标准输入流中获取. //1.解析参数 , 读取请求内容 BufferedReader br; String ...

  6. Java虚拟机类加载机制——案例分析

    转载: Java虚拟机类加载机制--案例分析   在<Java虚拟机类加载机制>一文中详细阐述了类加载的过程,并举了几个例子进行了简要分析,在文章的最后留了一个悬念给各位,这里来揭开这个悬 ...

  7. Java学生管理系统项目案例

    这是一个不错的Java学生管理系统项目案例,希望能够帮到大家的学习吧. 分代码如下 package com.student.util; import java.sql.Connection; impo ...

  8. Java 后端微信支付demo

    Java 后端微信支付demo 一.导入微信SDK 二.在微信商户平台下载证书放在项目的resources目录下的cert文件夹下(cert文件夹需要自己建) 三.实现微信的WXPayConfig接口 ...

  9. PHP对接微信支付采坑

    第一次做PHP商城项目对接微信支付接口,踩了N次坑,这也不对,那也不对,搞了很久,查了一些资料,终于实现了支付功能,小小总结一下,万一下次遇到就不用到处找资料了. 微信扫码支付 前期准备: 1.微信公 ...

随机推荐

  1. CPP-基础:内部函数应该在当前源文件中说明和定义

    static函数与普通函数作用域不同,仅在本文件.只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义.对于可在当前源文件以外使用的函数,应该在一个头文件 ...

  2. Ubuntu 18.04 上使用 OpenJDK 安装并运行 Tomcat

    在Linux上安装与卸载JDK和JRE,两种常用方法: 一.通过 apt-get 命令在线进行安装与卸载(会自动配置好环境变量) 二.通过下载并解压 .tar.gz 包进行手动安装与手动卸载(需要手动 ...

  3. javaEE(11)_事务处理

    一.事务的概念 •事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功. •例如:A——B转帐,对应于如下两条sql语句 update from account set mon ...

  4. javascript设计模式(张容铭) 第14章 超值午餐-组合模式 学习笔记

    JS 组合模式更常用于创建表单上,比如注册页面可能有不同的表单提交模块.对于这些需求我们只需要有基本的个体,然后通过一定的组合即可实现,比如下面这个页面样式(如图14-2所示),我们来用组合模式实现. ...

  5. LeetCode 最大正方形

    在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积. 示例: 输入: 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 输出: 4解法:判 ...

  6. python中enumerate()函数的用法

    描述: enumerate() 函数用于将一个可遍历的数据对象(如列表.元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中.其英文意为:枚举,列举. 函数说明: 语法 ...

  7. windows 下phpstudy 升级mysql版本5.7

    今天在导入sql文件的时候遇到了sql执行错误.最后找到原因是因为mysql版本过低,导致出错 原因:在执行sql的时候出现了两次CURRENT_TIMESTAMP ,最后得知在5.7版本之前都是不支 ...

  8. Linux基础学习-Docker学习笔记

    Docker安装 1 官方网站访问速度很慢,帮助文档 2 国内中文网站,帮助文档 [root@qdlinux ~]# yum remove docker \ docker-client \ docke ...

  9. 【xdebug】 windows xdebug 配置

    [xdebug] zend_extension = C:\phpStudy\php53n\ext\php_xdebug-2.6.1-7.0-vc14-nts-x86_64.dllxdebug.idek ...

  10. python 学习第二周总复习

    目录 数据类型内置方法 数字类型内置方法 整型 浮点型 字符串类型内置方法 列表类型内置方法 元祖类型内置方法 字典类型内置方法 集合类型内置方法 布尔类型 数据类型总结 拷贝 浅拷贝 深拷贝 053 ...