您的当前位置:首页网银在线支付接口和应用

网银在线支付接口和应用

2020-01-24 来源:爱问旅游网
网银在线支付接口和应用

关键字: 网银在线支付接口和应用

最近关注项目中在线支付,所以看一下文档,在线支付应用开发: 基本所有的在线支付均采用以下方式:

客户点击结帐时将关于訂單的信息和货币信息,相应的信息URL,经过md5或其他方式发送(可能Socket和Http或Https)支付平台(块钱,paypal或支付宝等),支付平臺处理完毕时根据相应URL,返回相关的信息(付款信息,訂單信息,验证信息).

在实际操作Money的问题人们一向关注他的安全性等问题,同时本人习惯在通过http方式访问非外网时采用Commons-httpclient的post发送实现,简单方便,所以采用此种实现:具体看以下API和原代码:

网银在线支付API接口: 商户>>>>>>网银在线支付:

商户编号 订单编号 订单总金额 币种

支付动作完成后返回到该url,支付结果以POST方式发送

value=\"1630DC083D70A1E8AF60F49C143A7B95\"> 订单MD5校验码

备注字段1 备注字段2

收货人姓名 收货人地址 收货人电话

收货人邮编 商品信息 订货人姓名 订货人邮件

MD5校验串生成方法:当消费者在商户端生成最终订单的时候,将订单中的v_amount v_moneytype v_oid v_mid v_url key六个参数的value值拼成一个无间隔的字符串(顺序不要改变)。参数key是商户的MD5密钥(该密匙可在登陆商户管理界面后自行更改。) 网银在线支付>>>商户

支付完成后页面转到商户,从网银在线支付返回的消息格式为:

该消息格式详细解释如下:v_url是该笔订单提交时参数v_url 的值,即网银返回到商户的接口地址。

变量名称 订单编号 支付状态 变量命名 v_oid v_pstatus 返回值说明 商户发送的v_oid定单编号。 20(表示支付成功) 30(表示支付失败) 支付结果信息 v_pstring 支付完成 支付完成 支付方式 v_pmode 支付银行,例如工商银行 该参数的MD5字符串的顺序为:v_oid,v_pstatus,v_amount,v_moneytype,key MD5字符串示例: 用MD5函数加密上述字符串后得到的 订单MD5校验码 v_md5str 值如果和v_md5str值相等即表明返回的信息没有被纂改 订单总金额 币种 备注字段1 备注字段2 表3

package static import static import static import import import *

* 网银接口服务的代理 *

* @author longgangbai * */

public class ChinaPayProxy { /**

* 在下訂單時采用的的Md5加密的信息: MD5校验串生成方法:当消费者在商户端生成最终订单的时候, 将订单中的v_amount

* v_moneytype v_oid v_mid v_url key六个参数的value值拼成一个无间隔的字符串(顺序不要改变)。

* 参数key是商户的MD5密钥(该密匙可在登陆商户管理界面后自行更改。)

v_amount v_moneytype remark1 remark2 订单实际支付金额 订单实际支付币种 *

* @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(); (v_amount); (v_moneytype); (v_oid); (v_mid); (v_url); (key);

byte[] bytes = ());

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 = ().getProperties();

String md5key = (CHINABANK_PAY_MD5_KEY);

String v_md5info = getMd5Sign(v_amount, v_moneytype, v_oid, v_mid, v_url, md5key);

Map paramMaps = new HashMap(); (\"v_mid\ (\"v_oid\ (\"v_amount\ (\"v_moneytype\

(\"v_url\ (\"v_md5info\ (\"remark1\ (\"remark2\

(\"v_rcvname\ (\"v_rcvaddr\ (\"v_rcvtel\ (\"v_rcpost\

(\"v_orderstatus\ (\"v_ordername\ (\"v_orderemail\

return (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 = ().getProperties();

String md5key = (CHINABANK_PAY_MD5_KEY);

String checkmd5 = getCheckMd5(v_oid, v_pstatus, v_amount, v_moneytype, md5key); if (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(); (v_oid); (v_pstatus);

(v_amount); (v_moneytype); (key);

byte[] bytes = ());

String md5info = new String(bytes).toUpperCase(); return md5info; } }

因篇幅问题不能全部显示,请点此查看更多更全内容