阶段更新
This commit is contained in:
@@ -2,10 +2,13 @@
|
||||
|
||||
namespace XuanChen\UnionPay\Action;
|
||||
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class Init
|
||||
{
|
||||
public $params;
|
||||
public $sign;
|
||||
|
||||
/**
|
||||
* RSA验签
|
||||
@@ -14,15 +17,16 @@ class Init
|
||||
* @param $sign 要校对的的签名结果
|
||||
* return 验证结果
|
||||
*/
|
||||
public function rsaSign($params, $self = false)
|
||||
public function checkSign($self = false)
|
||||
{
|
||||
$sign = $params['sign'];
|
||||
unset($params['sign']);
|
||||
|
||||
$sign = $this->sign;
|
||||
$sign = base64_decode($sign);
|
||||
|
||||
$public_key = $this->getPublic($self);
|
||||
|
||||
$pub_key_id = openssl_get_publickey($public_key);
|
||||
|
||||
$signStr = $this->getSignString($params);
|
||||
$signStr = $this->getSignString($this->params);
|
||||
|
||||
if ($pub_key_id) {
|
||||
$result = (bool)openssl_verify($signStr, $sign, $pub_key_id);
|
||||
@@ -34,14 +38,36 @@ class Init
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Notes: 签名
|
||||
* @Author: 玄尘
|
||||
* @Date: 2020/9/29 9:56
|
||||
* @return string
|
||||
*/
|
||||
public function getSign()
|
||||
{
|
||||
$signStr = $this->getSignString();
|
||||
$private_key = $this->getPrivate();
|
||||
|
||||
$privKeyId = openssl_pkey_get_private($private_key);
|
||||
if (!$privKeyId) {
|
||||
return '私钥格式有误';
|
||||
}
|
||||
|
||||
openssl_sign($signStr, $signature, $privKeyId);
|
||||
openssl_free_key($privKeyId);
|
||||
|
||||
return base64_encode($signature);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取待签名字符串
|
||||
* @param array $params 参数数组
|
||||
* @return string
|
||||
*/
|
||||
public function getSignString($params)
|
||||
public function getSignString()
|
||||
{
|
||||
$params = array_filter($params);
|
||||
$params = array_filter($this->params);
|
||||
ksort($params);
|
||||
$signStr = http_build_query($params);
|
||||
return $signStr;
|
||||
@@ -51,6 +77,11 @@ class Init
|
||||
public function getPrivate()
|
||||
{
|
||||
$private = config('unionpay.check.self.private');
|
||||
|
||||
if (!file_exists($private)) {
|
||||
throw new \Exception('缺少私钥文件');
|
||||
}
|
||||
|
||||
return file_get_contents($private);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user