|
@@ -60,13 +60,32 @@ class PaySign {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ public function decodeData($encryptKey, $signData, $encryptData)
|
|
|
|
|
+ {
|
|
|
|
|
+ // 商户RSA私钥
|
|
|
|
|
+ $private_rsa_key = file_get_contents($this->getPath() . $this->agencyId . '/' . $this->agencyId. '.pem');
|
|
|
|
|
+ // 平台RSA公钥
|
|
|
|
|
+ $public_rsa_key = file_get_contents($this->getPath() . $this->agencyId . '/' . 'GHT_ROOT.pem');
|
|
|
|
|
+ // encryptKey RSA解密
|
|
|
|
|
+ $rootAesKey = $this->rsaDecode($encryptKey, $private_rsa_key);
|
|
|
|
|
+ // encryptData AES解密
|
|
|
|
|
+ $payload = $this->aesDecode($encryptData, $rootAesKey);
|
|
|
|
|
+ // 用平台公钥对signData验签
|
|
|
|
|
+ if ($this->verifySign($payload, $signData, $public_rsa_key)) {
|
|
|
|
|
+ return json_decode($payload, true);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 验签失败
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
private function aesEncode($data, $aes_key): string
|
|
private function aesEncode($data, $aes_key): string
|
|
|
{
|
|
{
|
|
|
$encrypt_data = openssl_encrypt($this->pad($data), "aes-128-ecb", $aes_key, OPENSSL_RAW_DATA | OPENSSL_NO_PADDING);
|
|
$encrypt_data = openssl_encrypt($this->pad($data), "aes-128-ecb", $aes_key, OPENSSL_RAW_DATA | OPENSSL_NO_PADDING);
|
|
|
return base64_encode($encrypt_data);
|
|
return base64_encode($encrypt_data);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- public function aesDecode($data,$aes_key)
|
|
|
|
|
|
|
+ public function aesDecode($data, $aes_key)
|
|
|
{
|
|
{
|
|
|
$data = base64_decode($data);
|
|
$data = base64_decode($data);
|
|
|
return openssl_decrypt($data, "aes-128-ecb", $aes_key, OPENSSL_RAW_DATA);
|
|
return openssl_decrypt($data, "aes-128-ecb", $aes_key, OPENSSL_RAW_DATA);
|
|
@@ -108,7 +127,7 @@ class PaySign {
|
|
|
|
|
|
|
|
private function verifySign($data, $signData, $public_rsa_key): bool
|
|
private function verifySign($data, $signData, $public_rsa_key): bool
|
|
|
{
|
|
{
|
|
|
- $signData =base64_decode($signData);
|
|
|
|
|
|
|
+ $signData = base64_decode($signData);
|
|
|
$res = openssl_get_publickey($public_rsa_key);
|
|
$res = openssl_get_publickey($public_rsa_key);
|
|
|
$result = openssl_verify($data, $signData, $res);
|
|
$result = openssl_verify($data, $signData, $res);
|
|
|
openssl_free_key($res);
|
|
openssl_free_key($res);
|