sign; $sign = base64_decode($sign); $public_key = $this->getPublic($self); $pub_key_id = openssl_get_publickey($public_key); $signStr = $this->getSignString($this->params); if ($pub_key_id) { $result = (bool)openssl_verify($signStr, $sign, $pub_key_id); openssl_free_key($pub_key_id); } else { return '公钥格式有误!'; } 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 = array_filter($this->params); ksort($params); $signStr = http_build_query($params); return $signStr; } //获取私钥 public function getPrivate() { $private = config('unionpay.check.self.private'); if (!file_exists($private)) { throw new \Exception('缺少私钥文件'); } return file_get_contents($private); } //获取公钥 public function getPublic($self = false) { $public = config('unionpay.check.unionpay.public'); if ($self) { $public = config('unionpay.check.self.public'); } return file_get_contents($public); } }