`
xiangxingchina
  • 浏览: 507247 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

网银在线支付接口和应用

阅读更多

最近关注项目中在线支付,所以看一下文档,在线支付应用开发:

  基本所有的在线支付均采用以下方式:

   客户点击结帐时将关于訂單的信息和货币信息,相应的信息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 的值,即网银返回到商户的接口地址。

分享到:
评论

相关推荐

    网银在线程序

    网银在线 能部署运行 网上银行接口程序 本压缩包包含商户开通网银在线支付服务所需的文档资料,请仔细保存。按照以下步骤即可开通网上支付服务。

    支付宝网上支付接口开发文档及其代码实例

    《支付宝网上支付接口(即时到账接口开发文档及其代码实例)》 警告:本资源仅用于开发学习交流使用。版权支付宝所有。 提供最全的支付宝即时到账接口开发文档及其代码实例,里面包含了ASP,PHP(GBK和UTF-8两个版本),...

    网银在线支付B2C系统商户PHP版接口文档.zip

    软件开发设计:PHP、应用...云计算与大数据:数据集、包括云计算平台、大数据分析、人工智能、机器学习等,云计算是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需提供给计算机和其他设备。

    NPS网上支付接口

    在现代的电子商务中,网上购物已成为时尚,而NPS(Network Payment System)与全国各地18家银行(包括VISA,MASTER,JCB等)签定了网上支付合作协议,满足消费者在您的商城上购物时方便的选择银行进行支付,给消费者...

    网上银行在线支付

    整合struts2框架,实现网上银行在线支付的功能。系统通过调用第三方支付网关接口,在该支付网关的测试环境下,演示系统功能。只要将测试环境变换成生产环境就可以直接应用在真实的支付情景。

    移动快捷支付应用集成

    移动快捷支付应用集成接入包支付接口人人有手机,人人携带手机,花钱买东西,不再需要取钱付现,不再需要回家上网银,想买什么,扫描一下,或者搜索一下,然后下单,不找零,直接送到你家,这将是手机支付给我们带来...

    多支付接口 php 可用在电子商城上

    该接口实现了对国内绝大多数支付网关的兼容,能够快速地应用在电子商务程序中。 目前代码已经支持网银在线、财付通中介支付、财付通即时支付以及支付宝,更多的支持可自行根据附件包中的API文档开发。 请保留原作者...

    农信银统一网关支付系统标准接口(商户端)-V1.3.3

    网关支付系统将全国农村合作金融机构的网上银行、手机银行、快捷支付等渠道整合在一起,实现了电子渠道的统一网关支付,可向各类电子商务场景和第三方支付机构提供全国农信系统整体的网关支付解决方案,有效减少农信...

    红金羚团购系统 v2.1

    在线支付方面,完美结合各类支付接口,系统默认推荐支付宝支付、财付通支付、网银在线支付等主流支付接口,只需填写商户编号等资料的傻瓜式嵌入,完美解决在线支付问题。货运方面,拥有各种运送模式管理及货运费用、...

    网软志成分类信息网站系统支持手机版、手机客户端、竞价推广、在线支付

    1、在线支付:整合在线支付接口如支付宝,财付通,网银支付接口。 2、整合论坛:整合discuz X论坛,整合phpwind论坛(业界独家整合,双向同步)。 3、查看联系方式收费:可设置查看信息的联系方式收费,以及扣除的...

    三顾购物系统化妆品版 v1.0.rar

    在线支付方面,完美结合各类支付接口,系统默认推荐支付宝支付、财付通支付、网银在线支付等主流支付接口,只需填写商户编号等资料的傻瓜式嵌入,完美解决在线支付问题。 货运方面,拥有各种运送模式管理及货运费用...

    chinapnr:汇付天下支付SDK

    卡快捷支付接口// 取现接口202// 转账接口203// 网银支付接口204// 退款接口205// 代扣支付接口207// 订单解冻接口212// APP支付(支付宝、微信、银联各种支付)218// 快捷支付APP版接口查询类接口// 交易状态查询...

    佳易商城系统 v3.5.zip

    在线支付方面,完美结合各类支付接口,系统默认推荐支付宝支付、财付通支付、网银在线支付等主流支付接口,只需填写商户编号等资料的傻瓜式嵌入,完美解决在线支付问题。 货运方面,拥有各种运送模式管理及货运费用...

    红金羚团购系统 v2.1.zip

    在线支付方面,完美结合各类支付接口,系统默认推荐支付宝支付、财付通支付、网银在线支付等主流支付接口,只需填写商户编号等资料的傻瓜式嵌入,完美解决在线支付问题。 货运方面,拥有各种运送模式管理及货运费用...

    3gushop_v3.0三顾商城系统3.0 商业版免费下载(非常好的商城系统,还会生成html静态页面)

    在线支付方面,完美结合各类支付接口,系统默认推荐支付宝支付、财付通支付、网银在线支付等主流支付接口,只需填写商户编号等资料的傻瓜式嵌入,完美解决在线支付问题。 货运方面,拥有各种运送模式管理及货运费用...

    三顾购物系统服装版 v3.0.rar

    在线支付方面,完美结合各类支付接口,系统默认推荐支付宝支付、财付通支付、网银在线支付等主流支付接口,只需填写商户编号等资料的傻瓜式嵌入,完美解决在线支付问题。货运方面,拥有各种运送模式管理及货运费用、...

    三顾购物系统服装全站伪静态版 v3.0.rar

    在线支付方面,完美结合各类支付接口,系统默认推荐支付宝支付、财付通支付、网银在线支付等主流支付接口,只需填写商户编号等资料的傻瓜式嵌入,完美解决在线支付问题。 货运方面,拥有各种运送模式管理及货运费用...

    佳易商城系统微信APP版 v4.0.rar

    在线支付方面,完美结合各类支付接口,系统默认推荐支付宝支付、财付通支付、网银在线支付等主流支付接口,只需填写商户编号等资料的傻瓜式嵌入,完美解决在线支付问题。 货运方面,拥有各种运送模式管理及货运费用...

    佳易商城系统多用户APP版 v4.0.rar

    在线支付方面,完美结合各类支付接口,系统默认推荐支付宝支付、财付通支付、网银在线支付等主流支付接口,只需填写商户编号等资料的傻瓜式嵌入,完美解决在线支付问题。 货运方面,拥有各种运送模式管理及货运费用...

Global site tag (gtag.js) - Google Analytics