- 浏览: 1474257 次
- 性别:
- 来自: 大连
-
文章分类
- 全部博客 (460)
- java (148)
- javascript (34)
- Flex文章 (4)
- css+div (2)
- ajax (6)
- extjs (11)
- 人生感悟 (9)
- struts2.0 (6)
- IT之路,生活 (15)
- hibernate (6)
- struts1 (1)
- spring (5)
- j2ee错误 (3)
- Dwr (5)
- Linux (33)
- C++ (3)
- SWT Win32 (2)
- EJB (1)
- JPA (4)
- C语言和LinuxC (7)
- SQL (13)
- 项目经理 (6)
- db2 (2)
- java数据结构 (2)
- 网页播放器flv (1)
- 数据库 (24)
- 用户体验设计学习 (2)
- 网络电话 (5)
- 军事理论 (4)
- android (3)
- oracle (18)
- oracle ebs form (11)
- oracle ebs oaf (4)
- erp (20)
- DBA (9)
- java中URL 的编码和解码函数 (1)
- 铁血丹心 (1)
- excel 单元格格式不能立即生效 (1)
- Java调用bat文件 (1)
- 如何把本地outlook中的邮件上传到网络邮箱中 (1)
- java 报表 打印 (1)
- 创建dblink (1)
- 图标前台框架 (1)
- vnc (1)
- FORM (1)
- MYSQL (1)
最新评论
-
July01:
推荐用StratoIO打印控件,支持网页、URL、图片、PD、 ...
web打印不显示页眉页脚 -
July01:
推荐用StratoIO打印控件,浏览器和系统的兼容性都很好,而 ...
Javascript网页打印大全 -
hardyer:
大哥写的很实在,受教了,提前祝你元旦快乐!
黎活明给程序员的忠告 -
cxysilahi:
请问WIN7 64位,调用报错Exception in thr ...
JNative的初步使用 -
action1949:
好东西,解决问题
JFreeChart乱码解决方法
最近关注项目中在线支付,所以看一下文档,在线支付应用开发:
基本所有的在线支付均采用以下方式:
客户点击结帐时将关于訂單的信息和货币信息,相应的信息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-0000012342012.340key 用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 的值,即网银返回到商户的接口地址。
- ChinabankPay.rar (1.1 MB)
- 下载次数: 31
发表评论
-
Oracle Developer10G 安装
2020-09-09 18:03 349oracle 客户端也要删除,以前的oracle产品 ... -
打开Eclipse时出现"The Eclipse executable launcher was unable to locate its companion
2018-06-05 15:06 9664打开Eclipse时出现"The Eclipse ... -
J2EE通过tomcat部署的两种方式
2017-09-12 09:01 669转载:http://blog.csdn.net/psp000 ... -
Linux安装Tomcat7
2016-03-30 15:01 877http://blog.sina.com.cn/s/blog ... -
java支持跨平台获取cpuid、主板id、硬盘id、mac地址 (兼容windows、Linux)(转)
2015-11-17 22:10 1570http://blog.csdn.net/flyingclo ... -
栋哥涕啐茆
2015-10-27 10:49 764栋哥涕啐茆 -
Eclipse快捷键 10个最有用的快捷键
2015-10-27 10:18 798Eclipse中10个最有用的快捷键组合 一个Eclip ... -
java上传头像图像剪切
2015-04-02 20:19 1173java上传头像图像剪切 JQUERY 图片上传裁切 -
创建dblink
2014-12-11 20:01 683CREATE public database link ... -
Bitnami Redmine 安装笔记
2014-12-10 11:28 1603http://atian25.iteye.com/blog/ ... -
利用workflow发送类似数据报表内容的通知页面
2014-11-21 15:03 820利用workflow发送类似数据报表内容的通知页面 ... -
excel科学技术法问题
2014-11-12 13:50 8021.使用导入外部数据的方法2.并且在第三步的时候选择文本,需要 ... -
java.lang.IllegalAccessError
2014-09-29 11:05 1145java.lang.IllegalAccessError: ... -
java如何获取文件编码格式
2014-04-11 11:28 102331:简单判断是UTF-8或不是UTF-8,因为一般除了UTF ... -
JAVA中使用FTPClient上传下载
2013-12-08 13:35 1920方法一:这种方法网上有许多 可以用下面的方式,但是支持批量 ... -
在Java中获取环境变量
2013-11-11 11:18 1434package cy.cn.test; import ... -
ORACLE性能调整笔记
2013-11-05 18:39 0一 关于statspack中等待事件的一些解释 ... -
EBS DBA指南笔记1
2013-11-05 18:35 1906时光飞逝,不从事EBS DBA转眼已有两年多。很还念那段学习 ... -
用html代码在word中插入分页符和页面设置
2013-11-05 17:11 5300<span lang=EN-US style=&quo ... -
OpenJWeb新增二维码图片生成功能
2013-11-05 09:02 1283在开发进销存软件的时 ...
相关推荐
网银在线 能部署运行 网上银行接口程序 本压缩包包含商户开通网银在线支付服务所需的文档资料,请仔细保存。按照以下步骤即可开通网上支付服务。
《支付宝网上支付接口(即时到账接口开发文档及其代码实例)》 警告:本资源仅用于开发学习交流使用。版权支付宝所有。 提供最全的支付宝即时到账接口开发文档及其代码实例,里面包含了ASP,PHP(GBK和UTF-8两个版本),...
软件开发设计:PHP、应用...云计算与大数据:数据集、包括云计算平台、大数据分析、人工智能、机器学习等,云计算是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需提供给计算机和其他设备。
在现代的电子商务中,网上购物已成为时尚,而NPS(Network Payment System)与全国各地18家银行(包括VISA,MASTER,JCB等)签定了网上支付合作协议,满足消费者在您的商城上购物时方便的选择银行进行支付,给消费者...
整合struts2框架,实现网上银行在线支付的功能。系统通过调用第三方支付网关接口,在该支付网关的测试环境下,演示系统功能。只要将测试环境变换成生产环境就可以直接应用在真实的支付情景。
移动快捷支付应用集成接入包支付接口人人有手机,人人携带手机,花钱买东西,不再需要取钱付现,不再需要回家上网银,想买什么,扫描一下,或者搜索一下,然后下单,不找零,直接送到你家,这将是手机支付给我们带来...
该接口实现了对国内绝大多数支付网关的兼容,能够快速地应用在电子商务程序中。 目前代码已经支持网银在线、财付通中介支付、财付通即时支付以及支付宝,更多的支持可自行根据附件包中的API文档开发。 请保留原作者...
网关支付系统将全国农村合作金融机构的网上银行、手机银行、快捷支付等渠道整合在一起,实现了电子渠道的统一网关支付,可向各类电子商务场景和第三方支付机构提供全国农信系统整体的网关支付解决方案,有效减少农信...
在线支付方面,完美结合各类支付接口,系统默认推荐支付宝支付、财付通支付、网银在线支付等主流支付接口,只需填写商户编号等资料的傻瓜式嵌入,完美解决在线支付问题。货运方面,拥有各种运送模式管理及货运费用、...
卡快捷支付接口// 取现接口202// 转账接口203// 网银支付接口204// 退款接口205// 代扣支付接口207// 订单解冻接口212// APP支付(支付宝、微信、银联各种支付)218// 快捷支付APP版接口查询类接口// 交易状态查询...
1、在线支付:整合在线支付接口如支付宝,财付通,网银支付接口。 2、整合论坛:整合discuz X论坛,整合phpwind论坛(业界独家整合,双向同步)。 3、查看联系方式收费:可设置查看信息的联系方式收费,以及扣除的...
在线支付方面,完美结合各类支付接口,系统默认推荐支付宝支付、财付通支付、网银在线支付等主流支付接口,只需填写商户编号等资料的傻瓜式嵌入,完美解决在线支付问题。 货运方面,拥有各种运送模式管理及货运费用...
在线支付方面,完美结合各类支付接口,系统默认推荐支付宝支付、财付通支付、网银在线支付等主流支付接口,只需填写商户编号等资料的傻瓜式嵌入,完美解决在线支付问题。 货运方面,拥有各种运送模式管理及货运费用...
在线支付方面,完美结合各类支付接口,系统默认推荐支付宝支付、财付通支付、网银在线支付等主流支付接口,只需填写商户编号等资料的傻瓜式嵌入,完美解决在线支付问题。 货运方面,拥有各种运送模式管理及货运费用...
在线支付方面,完美结合各类支付接口,系统默认推荐支付宝支付、财付通支付、网银在线支付等主流支付接口,只需填写商户编号等资料的傻瓜式嵌入,完美解决在线支付问题。 货运方面,拥有各种运送模式管理及货运费用...
在线支付方面,完美结合各类支付接口,系统默认推荐支付宝支付、财付通支付、网银在线支付等主流支付接口,只需填写商户编号等资料的傻瓜式嵌入,完美解决在线支付问题。货运方面,拥有各种运送模式管理及货运费用、...
在线支付方面,完美结合各类支付接口,系统默认推荐支付宝支付、财付通支付、网银在线支付等主流支付接口,只需填写商户编号等资料的傻瓜式嵌入,完美解决在线支付问题。 货运方面,拥有各种运送模式管理及货运费用...
在线支付方面,完美结合各类支付接口,系统默认推荐支付宝支付、财付通支付、网银在线支付等主流支付接口,只需填写商户编号等资料的傻瓜式嵌入,完美解决在线支付问题。 货运方面,拥有各种运送模式管理及货运费用...
在线支付方面,完美结合各类支付接口,系统默认推荐支付宝支付、财付通支付、网银在线支付等主流支付接口,只需填写商户编号等资料的傻瓜式嵌入,完美解决在线支付问题。 货运方面,拥有各种运送模式管理及货运费用...