- 浏览: 523557 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (422)
- 重要 (12)
- BUG解决备忘录 (32)
- 环境搭建 (17)
- 开源组件 (4)
- 数据库 (16)
- 设计模式 (4)
- 测试 (3)
- javascript (5)
- Android (14)
- jdk相关 (9)
- struts2 (10)
- freemark (3)
- 自定义扩展及工具类 (5)
- jdk5新特性及java基础 (13)
- ssh及其他框架 (15)
- linux (32)
- tcp-ip http协议 (8)
- 服务器集群与负载均衡 (34)
- 项目管理相关 (11)
- 实用小技术 (10)
- 架构相关 (14)
- firefox组件 (11)
- spider (6)
- 产品设计 (11)
- PHP (1)
- ws (4)
- lucene (10)
- 其他 (2)
- BI (1)
- NoSQL (3)
- gzip (1)
- ext (4)
- db (6)
- socket (1)
- 源码阅读 (2)
- NIO (2)
- 图片处理 (1)
- java 环境 (2)
- 项目管理 (4)
- 从程序员到项目经理(一):没有捷径 (1)
- bug (1)
- JAVA BASE (8)
- 技术原理 (0)
- 新框架新技术 (1)
- 量化与python (1)
- 系统编程 (0)
- C语言 (0)
- 汇编 (0)
- 算法 (0)
最新评论
-
hyspace:
别逗了,最后一个算法根本不是最优的,sort(function ...
数组去重——一道前端校招试题 -
washingtin:
楼主能把策略和路由的类代码贴出来吗
Spring + iBatis 的多库横向切分简易解决思路 -
sdyjmc:
初略看了一下,没有闹明白啊,均衡负载使用Nginx,sessi ...
J2EE集群原理 I -
shandeai520:
谢谢大神!请教大神一个问题:假如我有三台服务器,连接池的上限是 ...
集群和数据库负载均衡的研究 -
hekuilove:
给lz推荐一下apache commonsStringUtil ...
request 获取 ip
最近关注项目中在线支付,所以看一下文档,在线支付应用开发:
基本所有的在线支付均采用以下方式:
客户点击结帐时将关于訂單的信息和货币信息,相应的信息URL,经过md5或其他方式发送(可能Socket和Http或Https)支付平台(块钱,paypal或支付宝等),支付平臺处理完毕时根据相应URL,返回相关的信息(付款信息,訂單信息,验证信息).
在实际操作Money的问题人们一向关注他的安全性等问题,同时本人习惯在通过http方式访问非外网时采用Commons-httpclient的post发送实现,简单方便,所以采用此种实现:具体看以下API和原代码:
网银在线支付API接口:
商户>>>>>>网银在线支付:
<form method=post action="https://pay.chinaebank.cn/select_bank">
<input type=hidden name=v_mid value="1001 "> 商户编号
<input type=hidden name=v_oid value="19990720-1001 -000001234"> 订单编号
<input type=hidden name=v_amount value="13.45"> 订单总金额
<input type=hidden name=v_moneytype value="0"> 币种
<input type=hidden name=v_url value="http://domain/program">
支付动作完成后返回到该 url ,支付结果以 POST 方式发送
<input type=hidden name=v_md5info value="1630DC083D70A1E8AF60F49C143A7B95"> 订单 MD5 校验码
<input type="hidden" name="remark1 " value=""> 备注字段 1
<input type="hidden" name="remark2" value=""> 备注字段 2
<input type=hidden name=v_rcvname value=" 张三 "> 收货人姓名
<input type=hidden name=v_rcvaddr value=" 北京海淀 "> 收货人地址
<input type=hidden name=v_rcvtel value="68475566"> 收货人电话
<input type=hidden name=v_rcvpost value="100036"> 收货人邮编
<input type=hidden name=v_orderstatus value="0"> 商品信息
<input type=hidden name=v_ordername value=" 李四 "> 订货人姓名
<input type=hidden name= v_orderemail value="test@test.com"> 订货人邮件
<input type=submit value=" 网银在线支付 ">
</form>
MD5 校验串生成方法: 当消费者在商户端生成最终订单的时候,将订单中的 v_amount v_moneytype v_oid v_mid v_url key 六个参数的 value 值拼成一个无间隔的字符串 ( 顺序不要改变 ) 。参数 key 是商户的 MD5 密钥(该密匙可在登陆商户管理界面后自行更改。)
网银在线支付>>>商户
变量名称 |
变量命名 |
返回值说明 |
|
订单编号 |
v_oid |
商户发送的 v_oid 定单编号。 |
|
支付状态 |
v_pstatus |
20 (表示支付成功) 30 (表示支付失败) |
|
支付结果信息 |
v_pstring |
支付完成 支付完成 |
|
支付方式 |
v_pmode |
支付银行,例如工商银行 |
|
订单 MD5 校验码 |
v_md5str |
该参数的 MD5 字符串的顺序为: v_oid , v_pstatus , v_amount , v_moneytype , key MD5 字符串示例 : 20050320-1001 -000001234 20 12.340 key 用 MD5 函数加密上述字符串后得到的值如果和 v_md5str 值相等即表明返回的信息没有被纂改 |
|
订单总金额 |
v_amount |
订单实际支付金额 |
|
币种 |
v_moneytype |
订单实际支付币种 |
|
备注字段 1 |
remark1 |
|
|
备注字段 2 |
remark2 |
|
表 3
package cn.com.vnvtrip.china.pay.proxy;
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;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import org.apache.commons.codec.digest.DigestUtils;
import cn.com.vnvtrip.china.pay.commons.Env;
import cn.com.vnvtrip.china.pay.commons.HTTPClient;
/**
*
* 网银接口服务的代理
*
* @author longgangbai
*
*/
public class ChinaPayProxy {
/**
* 在下訂單時采用的的Md5加密的信息: MD5校验串生成方法:当消费者在商户端生成最终订单的时候, 将订单中的v_amount
* v_moneytype v_oid v_mid v_url key六个参数的value值拼成一个无间隔的字符串(顺序不要改变)。
* 参数key是商户的MD5密钥(该密匙可在登陆商户管理界面后自行更改。)
*
* @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;
}
/**
* 调用支付网关接口网址 银行结帐的接口代理 (本人习惯采用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);
}
/**
* 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;
}
/**
* 得到网银訂單付款后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;
}
}
支付完成后页面转到商户,从网银在线支付返回的消息格式为:
<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>
该消息格式详细解释如下: v_url 是该笔订单提交时参数 v_url 的值,即网银返回到商户的接口地址。
发表评论
-
图片转换成文字
2011-04-04 23:28 1128在工作中,我常常在想 ... -
Jcrop(图片裁剪)中文文档手册
2011-02-24 23:53 1897多彩科技原创翻译,转载请注明出处:http://www.kmw ... -
java图片裁剪原理
2011-02-24 23:16 1337总体思想: 1.前台网页用js得到裁剪图片的id及x,y ... -
js+java 带进度条的文件上传,同步+异步
2011-02-24 23:12 3300同步上传: 多个文件上传时,按顺序依次上传,后面的必须等待前 ... -
licence控制的设计
2010-12-11 00:06 13071.版权声明 本文是关于如何通过序列号来加载加密 ... -
权限 授权之 - License
2010-12-10 23:57 2263中 国是个盗版软件横 ... -
使用Jakarta-ORO库的几个例子
2010-12-06 15:07 1132简介 Jakarta-ORO是最全面以及优 ... -
深入浅出CGlib-打造无入侵的类代理
2010-12-06 00:32 783CGlib是什么? CGlib是一个强大的,高性能,高质 ... -
基于memcached的SNA实现
2010-11-19 00:00 728系统要集群,使用SNA方案。一、 缓存的处理 缓存要使用 ...
相关推荐
在本压缩包中,提供了多种编程语言实现的网银在线支付接口代码,包括.NET、Java和ASP。这些接口主要用于连接银行系统,完成支付授权、交易确认、订单状态更新等一系列流程。 1. **.NET接口**:.NET是一种广泛使用的...
在电子商务和互联网金融领域,网银在线支付接口是连接商家系统与银行系统的关键环节,它使得消费者能够在商户网站上便捷地进行在线支付。本文档将详细介绍网银在线支付B2C(Business to Consumer)系统的商户接口,...
网银在线支付接口源码是实现在线交易的关键技术,它使得电子商务网站能够与各大银行的系统无缝对接,为用户提供安全、便捷的支付体验。本文将深入探讨这一主题,包括其工作原理、主要功能、实现过程以及相关的编程...
本主题将深入探讨“支付宝网银等支付接口”的相关知识,包括支付宝、财付通和网银这三种常见的支付方式,以及它们的接口文档和技术文档的解读。 首先,我们来关注支付宝接口。支付宝作为阿里巴巴集团的一员,其支付...
网银在线支付接口程序是电子商务领域中至关重要的组成部分,它允许用户通过银行账户直接进行线上交易,提高了支付的便捷性和安全性。在这个程序中,我们有三个主要的ASP(Active Server Pages)文件:md5.asp、Send....
在线支付是电子商务中不可或缺的一环,它使得消费者可以方便、快捷地进行交易,极大地促进了线上商业活动的发展。...而文件"chinabank"可能是与某家中国的银行支付接口相关的代码或文档,具体细节需进一步查看其内容。
Java作为一款跨平台的后端开发语言,具有丰富的库和框架支持在线支付接口的实现。例如,Spring框架可以用来构建整个支付系统的架构,包括处理HTTP请求、事务管理以及异常处理等。此外,Apache HttpClient或者OkHttp...
网银在线支付接口是电子商务和在线交易中不可或缺的一部分,它使得商家能够接受来自用户的网上银行转账,从而实现安全、快捷的支付过程。本资源包含了一系列关于网银在线支付的文档和不同编程语言的接口代码,如ASP...
本文将深入探讨工行网上银行支付接口的规范、API接口的使用,以及不同编程语言下的实现。 一、工行网上银行支付接口规范 中国工商银行作为国内领先的金融机构,其网上银行支付接口有着严谨的规范。《中国工商银行...
在线支付接口是电子商务系统中至关重要的组成部分,它允许用户通过网银进行安全便捷的交易。本资源提供了四种主流编程语言(ASP、JSP、PHP、.NET 4)的实现,帮助开发者理解和构建自己的网银在线支付功能。下面将...
对于网上银行接口和在线支付接口的集成,商户后台系统需要能够: 1. 显示支付状态:实时更新订单的支付状态,如待支付、支付成功、支付失败等。 2. 处理异常:自动或手动处理支付失败的情况,如重复支付、超时未支付...
网上银行在线支付接口是现代电子商务中不可或缺的一部分,它允许用户通过互联网直接从他们的银行账户进行购物、转账和其他金融交易,而无需离开网站或应用程序。这种支付方式为商家提供了便利,提高了交易效率,同时...
网银在线支付接口主要负责接收商家系统发起的支付请求,将用户的支付行为与银行系统进行对接,完成资金的转移。这个过程通常包括以下几个步骤: 1. 商户系统生成订单:根据交易信息创建订单,包括商品详情、金额、...
在电子商务和在线交易日益普及的今天,网银在线支付接口成为了不可或缺的一部分。"网银在线接口文档和源码"提供了一套完整的解决方案,帮助开发者快速集成网银支付功能到自己的商城系统中。以下是对这套资源的详细...
这个主题主要涉及银行支付接口的开发与集成,以及如何使用Java编程语言来实现这一功能。农业银行作为国内四大国有商业银行之一,其网银支付接口的使用广泛,对于电商平台、在线服务提供商等企业来说至关重要。 首先...
在中国的在线支付领域,"网银在线"是一个重要的支付接口,它为商家提供了一种便捷、安全的在线交易方式。本教程将通过分析提供的源码,深入探讨如何使用网银在线接口进行集成与开发。 首先,我们要理解在线支付的...
网银支付是指用户通过银行提供的网上银行服务完成支付的过程。开发者在集成网银接口时,需要了解并处理银行的各种安全机制,如SSL加密、数字证书、验证码等,以确保交易的安全性。此外,还要处理各种银行的差异,...
在数字化时代,银行网上支付接口成为了电子商务和互联网金融不可或缺的一部分。它允许用户通过在线方式安全地进行交易,无需物理现金或传统银行卡。易宝支付作为知名的第三方支付平台,提供了通用的支付接口,使得...