php16进制密钥签名对接支付,php与java签名验证对接

做完银联接口后,发现很多朋友问到关于对接的问题,我在这里总结一下.

java的keytool生成的rsa公钥密私钥是16进制字符串,php用openssl生成的公钥私钥是基于base64格式的字符串或者二进制格式,这两种不同的公约密钥并不能直接转化,网上有很多的办法转化这些,我曾经一一的测试过,是不正确的,例如有人把java的16进制密钥转化为2进制,然后再转为base64编码,将这一串字符放在php下生成的pem密钥文件的----BEGIN RSA PRIVATE KEY-----和-----END RSA PRIVATE KEY-----,其结果是根本无法读取,java和php生成的密钥公钥文件的字节数就不同一个40字节,一个是42字节,如果有兴趣可以研究一下.

还有的是用php实现类似rsa算法,用这个类代替openssl,不管效率如何,首先其安全性就让人不是很放心,何况以后如果增加ssl传输要求,又该如何是好,其实正确的办法是java方将密钥公钥转化为pkcs#8的格式,在这个格式下,双方是都可以正确识别的,但是牵扯到和银行做对接,能不能这么做,就有很大不确定性.

在我考虑了各种可能后,我选择另一种方法来解决,就是所有数据处理继续使用php接口,而签名和验证则调用银联提供的java模块,我把整个思路给银联技术说了说,他们也很支持这个思路,他们的java技术就根据我的要求做了一个完整的模块交给我供我调用.

这么做的好处是显而易见的,以后银联方面升级自己的系统,只需要把修改过的模块分发下来,就能保证各个接入平台的一致性.在后来的过程中我发现很多银行其实也是采用了类似的思路来做对接.不过有些提供的模块功能复杂些,参数多些而已.

php调用java接口也有很多办法,用webservice方法,或者php本身的扩展中就有一个专门用于调用java类的,但是实现过程中有很多不如意,后来我找到了另外的一个javatophp的调用模块来调用java类,结果显示很稳定而且容易部署.

部署javatophp时候,我装了tomcat,将8080端口专门用于接收银联的请求,与80端口分开,可以最大程度的保证数据安全性.apache下的tomcat可以使用php-fastcgi的模式调用php解释php文件,所以我把请求过来的数据直接调用cgi模式处理数据,在验证签名和签名的时候,用tomcat下的javatophp来调用java的签名类,传入和返回的数据是字符串形式,这样整个流程就走通了.

在做调用的时候,很多人会被复杂的调用说明搞晕,其实很简单,javatophp的war包可以直接放在tomcat的webapps下运行,包里本身就带了php5.3的cgi模块,在这里运行php文件没有任何问题,遗憾的是,整个包的php扩展增加好像有些问题,所以如果你想使用pdo mysql这些模块,你需要手动的切换war里默认的cgi程序目录,切换扩展目录,php.ini文件在cgi模式下定义和mod模式下也有一些小的区别,修改后放在c:/windows下,tomcat就可以正确找到这个php.ini文件了,需要增加的模块就能正确增加.百度上有很多相关文章,我就不重复了.

PHPer常常不知道怎么调用java的类文件,java类名和文件名可不是像php那样一一对应的,把银联给你id包放在lib目录下,然后他需要告诉你这个包的包名类名,然后你才能调用,注意一定要把javatophp的ini文件引入到php文件中,否则是无法成功运行的.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值