银联支付测试开发的完善与难点解析及加密方式介绍

2024-05-31
来源:网络整理

银联支付的测试开发非常完善,可以下载各种语言的测试包进行开发测试,不过难点在于证书签名和验签两个步骤。

其实银联加密和支付宝微信的区别就在于他们采用的是非对称加密,也就是说为了保证在网络上传输的安全,双方同意生成一个公钥和一个私钥,私钥自己保管,公钥公开给对方(你要发送信息的人都知道)。当你需要传输秘密信息的时候,就用自己的私钥加密后发送给对方。对方收到信息之后,为了判断信息是否是伪造的(是否真的是你发给他的),就会拿出你的公钥来验证,如果相同,那么就可以确定确实是你发的。这样可以保证信息的安全性。

以下是代码:

银联配置文件:.js

//配置银联支付所需的数据 -这些都是银联测试商户信息,你可以去那里申请一个测试商户:'', //商户:':5000//api/.do', //网关跳转到银联平台支付页面地址:':5000//api/.do', //单次查询请求地址:+'/', //签名证书路径:'',:'', //签名证书密码:+'//.pfx', //用于签名的私钥证书:+'//.cer', //用于签名验证的银联公钥证书

以.pfx结尾的文件都是用密码加密的私钥。

以.cer结尾的文件都是公钥。

银联支付模块.js

var = (''),util = ('util'),_ = (''), = (''),x509 = ('x509'),sha1 = ('sha1'), = (''), = ('。/'); //加载银联配置//银联网关支付var = {//创建预订单/**参数:{: , fee: FEE}*商户订单号费用订单金额,单位美分*/: ';+ 。 +'//', //银联网关支付前台通知地址: ';+ 。 +'//', //银联网关支付后端通知地址: (, ) {var ;var = 。

;if(。==0) {var = ';+ 。 +'//';} else if(。==1) {var = ';+ 。 +'//';} else {var = this。 ;}var = {'' : '5。0。0', //版本号'' : 'utf-8', //编码方式'' : '01', //交易类型'' : '01', //交易子类'' : '', //业务类型'' : this。, //前台通知地址'' : '01', //签名方式'' : '08', //渠道类型,07-PC,08-手机'' : '0', //访问类型'' : '156', //交易币种,国内商户固定156//TODO需要填写以下信息'' : 。

, //商户代码,请自行更改测试商户号,这里默认参数为演示页传递的参数'' : . , //商户订单号,8-32位数字和字母,不能包含“-”或“_”,这里默认参数为演示页传递的参数,您可以自行自定义规则'' : , //订单发送时间,格式为北京时间,这里默认参数为演示页传递的参数'' : . fee, //交易金额,单位美分'' : , //后台通知地址'' : '' //选填,在 };var ;var ;var cert;((err , ){if (err) { = '证书签名失败';} else { = .; = .key;. = ;if (.

银联网关支付是什么意思_银联网关支付_网关银联支付怎么开通

) { . }//----签名开始----//参数转化为签名 = ();//摘要var = sha1();//签名var = . ('RSA-SHA1');. ();var = . sign(, '');//放到域中。 = ;//添加表单,请求银联的地址。 = . ;//. log();if () {();} else {(null,);}}});},//签名sign:(, ) {var ;var = ;((err , ){if (err) { = '证书签名失败';} else { = .

; = . key;if (.) { . }//----签名开始----//参数转化为签名 = ();//摘要var = sha1();//签名var = . ('RSA-SHA1');. ();var = . sign(, '');//放入域中。 = ;//. log();if () {();} else {(null,);}}});},//验证签名: (,) {var = .

; . ;var = ;(,,(err , ){if (err || ! || !) {.log('签名验证失败');('签名验证失败');} else { var = .key;if (.) { .}//----签名验证开始----var = ();var = sha1();//.log('待验证签名:' + );var = .('RSA-SHA1');//.

log('验证签名key:\n' + );//。 log('验证签名:' + );。 (new (, 'utf-8'));var = 。 (, , '');if () {(null,);} else {。 log('验证签名不相等');('验证签名不相等');}}});}};//签名串算法--对参数进行排序,并转化为键值对格式字符串 (){var = []for (var i in ) {。 push('' + i + '=' + [i])}var = _。 (, (str) { str;}); 。

join('&');};//通过证书密码获取证书的rsa-和(){if (.) {(null, .);} else {var = . ;var = . ;var = . ;var p12 = . . (, );//.log(p12.);//p12. and p12. = . x509. (p12.);//因为我不知道如何将十六进制的证书id:.转换成十进制的证书id,因为这是一个非常大的整数={};.

= . ;. key = p12. rsa;. ca = ;//存款。 = ;(null,); //{key: , : , ca: }}};//获取验证证书的 rsa- (, , ){if (.) {(null, .);} else {var = . ;var = . x509. ();//. log();var fs = ('fs');var = fs.

();。log();var = 。('');var = {};。key = ;。cert = ;。= ;if () {(null,);} else {msg = '签名验证失败';(msg);}}};//转换时间格式函数(){//时间格式 var = '';date = new Date();var o = {'M+' : date。() + 1, //'d+' : date。(), //天'h+' : date。(), //小时'm+' : date。

(), //'s+' : 日期。 (), //'q+' : 数学。 ((date.() + 3) / 3), //'S' : 日期。 () //};如果 (/(y+)/.test()) = . (.$1, (date.() + '').(4 - .$1.));for (var k in o)如果 (new ('(' + k + ')').test()) = . (.$1, .$1. == 1 ? o[k] : ('00' + o[k]).(('' + o[k]).)); ;};. = ;

其实最重要的就是签名和验证部分,以及证书.pfx和.cer的处理,方法只是为了方便使用返回的请求表单内容。

测试完成后,生产环境的配置还是有差别的,当银联商户申请成功后,银联会发一封邮件,上面有商户号,你的私钥证书.pfx需要自己根据他的邮件提示下载,附件中的“证书下载、安装”文件有详细的说明教程。另外配置中的请求地址:5000需要改为。在生产环境中,除非从商户提交审核的域名发起请求,否则会报错。尊敬的用户,你的交易可能存在风险。

以上就是小编给大家介绍的集成银联网关支付DEMO,希望对大家有所帮助,如果还有疑问可以给我留言,小编会及时回复大家的,非常感谢大家对网站的支持!

分享