php银联支付密钥,php银联网页支付实现方法

php银联网页支付实现方法

/**

* 取签名证书ID(SN)

* @return string

*/

public function getSignCertId()

{

return $this->getCertIdPfx($this->config['signCertPath']);

}

/**

* 签名数据

* 签名规则:

* 除signature域之外的所有项目都必须参加签名

* 根据key值按照字典排序,然后用&拼接key=value形式待签名字符串;

* 然后对待签名字符串使用sha1算法做摘要;

* 用银联颁发的私钥对摘要做RSA签名操作

* 签名结果用base64编码后放在signature域

*

* @throws \InvalidArgumentException

* @return multitype|string

*/

private function sign() {

$signData = $this->filterBeforSign();

ksort($signData);

$signQueryString = $this->arrayToString($signData);

if($this->params['signMethod'] == 01) {

//签名之前先用sha1处理

//echo $signQueryString;exit;

$datasha1 = sha1($signQueryString);

$signed = $this->rsaSign($datasha1);

} else {

throw new \InvalidArgumentException('Nonsupport Sign Method');

}

return $signed;

}

/**

* 数组转换成字符串

* @param array $arr

* @return string

*/

private function arrayToString($arr)

{

$str = '';

foreach($arr as $key => $value) {

$str .= $key.'='.$value.'&';

}

return substr($str, 0, strlen($str) - 1);

}

/**

* 过滤待签名数据

* signature域不参加签名

*

* @return array

*/

private function filterBeforSign()

{

$tmp = $this->params;

unset($tmp['signature']);

return $tmp;

}

/**

* RSA签名数据,并base64编码

* @param string $data 待签名数据

* @return mixed

*/

private function rsaSign($data)

{

$privatekey = $this->getSignPrivateKey();

$result = openssl_sign($data, $signature, $privatekey);

if($result) {

return base64_encode($signature);

}

return false;

}

/**

* 取.pfx格式证书ID(SN)

* @return string

*/

private function getCertIdPfx($path)

{

$pkcs12certdata = file_get_contents($path);

openssl_pkcs12_read($pkcs12certdata, $certs, $this->config['signCertPwd']);

$x509data = $certs['cert'];

openssl_x509_read($x509data);

$certdata = openssl_x509_parse($x509data);

return $certdata['serialNumber'];

}

/**

* 取.cer格式证书ID(SN)

* @return string

*/

private function getCertIdCer($path)

{

$x509data = file_get_contents($path);

openssl_x509_read($x509data);

$certdata = openssl_x509_parse($x509data);

return $certdata['serialNumber'];

}

/**

* 取签名证书私钥

* @return resource

*/

private function getSignPrivateKey()

{

$pkcs12 = file_get_contents($this->config['signCertPath']);

openssl_pkcs12_read($pkcs12, $certs, $this->config['signCertPwd']);

return $certs['pkey'];

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值