=================提交表单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. 在 webpack 中使用 ECharts

    http://echarts.baidu.com/tutorial.html#%E5%9C%A8%20webpack%20%E4%B8%AD%E4%BD%BF%E7%94%A8%20ECharts W ...

  2. Linux网络管理及基础设置

    一.网络管理 1 临时配置网络(ip,网关,dns) 用ifconfig命令设定网卡的IP地址: ens33网卡的IP地址为192.168.16.154, ifconfig ens33 192.168 ...

  3. shell脚本,文件里面的英文大小写替换方法。

    [root@localhost wyb]# cat daxiaoxie qweBNMacb eeeDFSmkl svdIOPtyu [root@localhost wyb]# cat daxiaoxi ...

  4. Sass 构建之 7-1模式

    Sass 项目结构之7-1模式 7-1模式的结构:7个文件夹,1个文件. 基本上,你需要将所有的部件放进7个不同的文件夹和一个位于根目录的文件(通常用main.scss或者app.scss) 编译时会 ...

  5. JS数组专题2️⃣ ➖ 数组去重

    距离上次发文,已经有一段时间了,最近工作比较忙,这不眼看快双十一了,就相当于给大家一些福利吧! 一.什么是数组去重 简单说就是把数组中重复的项删除掉,你 GET 到了吗 ?下面我将简单介绍下几种基本的 ...

  6. Git学习之路

    目录 git安装 linux windows git命令 创建版本库 提交文件 仓库状态 版本回退 工作区和暂存区 工作区 暂存区 推送.下拉和克隆 推送 下拉 克隆 git应该可以说是程序员必备技能 ...

  7. docker build no such file or directory

    在我构建新的镜像的时候, 发生 了  no such file or directory 的错误.  这个错误找了半天, 没头绪, 后来灵光一现, 原来是我的文件夹名字写错了 我的目录结构是这样的 [ ...

  8. web前端常用的封装方法

    1.放大镜 //页面加载完毕后执行 window.onload = function () { var oDemo = document.getElementById('demo'); var oMa ...

  9. Python基础:字典(dict)与集合(set)

    查找场景下与列表的性能对比 字典与集合之所以高效的原因是:内部结构都是一张哈希表. 平均情况下插入.查找和删除的时间复杂度为 O(1). 假设有数量100,000的产品列表: import time ...

  10. Django ORM字段和字段参数

    Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 ...