网银在线支付接口和应用.docx
《网银在线支付接口和应用.docx》由会员分享,可在线阅读,更多相关《网银在线支付接口和应用.docx(10页珍藏版)》请在冰豆网上搜索。
网银在线支付接口和应用
网银在线支付接口和应用
关键字:
网银在线支付接口和应用
最近关注项目中在线支付,所以看一下文档,在线支付应用开发:
基本所有的在线支付均采用以下方式:
客户点击结帐时将关于訂單的信息和货币信息,相应的信息URL,经过md5或其他方式发送(可能Socket和Http或Https)支付平台(块钱,paypal或支付宝等),支付平臺处理完毕时根据相应URL,返回相关的信息(付款信息,訂單信息,验证信息).
在实际操作Money的问题人们一向关注他的安全性等问题,同时本人习惯在通过http方式访问非外网时采用Commons-httpclient的post发送实现,简单方便,所以采用此种实现:
具体看以下API和原代码:
网银在线支付API接口:
商户>>>>>>网银在线支付:
商户编号
订单编号
订单总金额
币种
支付动作完成后返回到该url,支付结果以POST方式发送
订单MD5校验码
备注字段1
备注字段2
收货人姓名
收货人地址
收货人电话
收货人邮编
商品信息
订货人姓名
订货人邮件
MD5校验串生成方法:
当消费者在商户端生成最终订单的时候,将订单中的v_amountv_moneytypev_oidv_midv_urlkey六个参数的value值拼成一个无间隔的字符串(顺序不要改变)。
参数key是商户的MD5密钥(该密匙可在登陆商户管理界面后自行更改。
)
网银在线支付>>>商户
支付完成后页面转到商户,从网银在线支付返回的消息格式为:
该消息格式详细解释如下:
v_url是该笔订单提交时参数v_url的值,即网银返回到商户的接口地址。
变量名称
变量命名
返回值说明
订单编号
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字符串示例:
用MD5函数加密上述字符串后得到的值如果和v_md5str值相等即表明返回的信息没有被纂改
订单总金额
v_amount
订单实际支付金额
币种
v_moneytype
订单实际支付币种
备注字段1
remark1
备注字段2
remark2
表3
packagestatic
importstatic
importstatic
import
import
import
*
*网银接口服务的代理
*
*@authorlonggangbai
*
*/
publicclassChinaPayProxy{
/**
*在下訂單時采用的的Md5加密的信息:
MD5校验串生成方法:
当消费者在商户端生成最终订单的时候,将订单中的v_amount
*v_moneytypev_oidv_midv_urlkey六个参数的value值拼成一个无间隔的字符串(顺序不要改变)。
*参数key是商户的MD5密钥(该密匙可在登陆商户管理界面后自行更改。
)
*
*@paramv_amount
*@paramv_moneytype
*@paramv_oid
*@paramv_mid
*@paramv_url
*@paramkey
*@return
*/
privatestaticStringgetMd5Sign(Stringv_amount,Stringv_moneytype,
Stringv_oid,Stringv_mid,Stringv_url,Stringkey){
StringBuffersb=newStringBuffer();
(v_amount);
(v_moneytype);
(v_oid);
(v_mid);
(v_url);
(key);
byte[]bytes=());
Stringmd5info=newString(bytes).toUpperCase();
returnmd5info;
}
/**
*调用支付网关接口网址银行结帐的接口代理(本人习惯采用Commons-httpclient实现)
*用途:
用来接受商户发给网银在线服务支付的订单信息
*
*@paramv_mid
* 商户编号(非空)
*@paramv_oid
* 订单编号(非空)(格式:
订单生成日期(yyyymmdd)-商户编号-商户流水号)字段不可超过64位
*@paramv_amount
* 订单总金额(非空)
*@paramv_moneytype
* 货币类型(非空)0:
RMB1美元
*@paramv_url
* (非空)支付的动作完成时返回的该url,支付结果以post方式发送
*@paramv_md5info
* 订单md5校验码
*@paramremark1
* 备注字段1(可选字段)
*@paramremark2
* 备注字段2(可选字段)
*@paramv_vmd
* yyyymmdd备注字段2(不可为空字段)
*@paramv_rcvname
* 收货人姓名(自定义非网银必须字段)
*@paramv_rcvaddr
* 收货人地址(自定义非网银必须字段)
*@paramv_rcvtel
* 收货人电话(自定义非网银必须字段)
*@paramv_rcpost
* 收货人邮编(自定义非网银必须字段)
*@paramv_orderstatus
* 商品信息(自定义非网银必须字段)
*@paramv_ordername
* 订货人姓名(自定义非网银必须字段)
*@paramv_orderemail
* 订货人邮件(自定义非网银必须字段)
*@return
*/
publicstaticbooleanchinaBankPayCheck(Stringv_mid,Stringv_oid,
Stringv_amount,Stringv_moneytype,Stringv_url,Stringremark1,
Stringremark2,Stringv_rcvname,Stringv_rcvaddr,
Stringv_rcvtel,Stringv_rcpost,Stringv_orderstatus,
Stringv_ordername,Stringv_orderemail){
Propertiesp=().getProperties();
Stringmd5key=(CHINABANK_PAY_MD5_KEY);
Stringv_md5info=getMd5Sign(v_amount,v_moneytype,v_oid,v_mid,
v_url,md5key);
MapparamMaps=newHashMap();
("v_mid",v_mid);
("v_oid",v_oid);
("v_amount",v_amount);
("v_moneytype",v_moneytype);
("v_url",(CHINABANK_NOTIFY_URL_HTTP));
("v_md5info",v_md5info);
("remark1",remark1);
("remark2",remark2);
("v_rcvname",v_rcvname);
("v_rcvaddr",v_rcvaddr);
("v_rcvtel",v_rcvtel);
("v_rcpost",v_rcpost);
("v_orderstatus",v_orderstatus);
("v_ordername",v_ordername);
("v_orderemail",v_orderemail);
return(CHINABANK_PAY_HTTPS,paramMaps,null);
}
/**
*result为支付完毕接受的结果的map校验检测在网银支付数据是否被拦截的
*
*@paramv_oid
* 获取结果中的訂單编号
*@paramv_pstatus
* 获取訂單的支付状态
*@paramv_pstring
* 支付的结果
*@paramv_amount
* 实际支付的金额
*@paramv_moneytype
* 实际支付的币种
*@paramv_md5str
* 获取訂單校验的MD5验证
*@return
*/
publicstaticbooleancheckPayOff(Stringv_oid,Stringv_pstatus,
Stringv_pstring,Stringv_amount,Stringv_moneytype,
Stringv_md5str){
Propertiesp=().getProperties();
Stringmd5key=(CHINABANK_PAY_MD5_KEY);
Stringcheckmd5=getCheckMd5(v_oid,v_pstatus,v_amount,v_moneytype,
md5key);
if(v_md5str)){
returntrue;
}
returnfalse;
}
/**
*得到网银訂單付款后Md5加密检查
*
*@paramv_oid
*@paramv_pstatus
*@paramv_amount
*@paramv_moneytype
*@paramkey
*@return
*/
privatestaticStringgetCheckMd5(Stringv_oid,Stringv_pstatus,
Stringv_amount,Stringv_moneytype,Stringkey){
StringBuffersb=newStringBuffer();
(v_oid);
(v_pstatus);
(v_amount);
(v_moneytype);
(key);
byte[]bytes=());
Stringmd5info=newString(bytes).toUpperCase();
returnmd5info;
}
}