$val) { if (!in_array($key, $filter)) { $tempArr[strtolower($key)] = strtolower($val); } } ksort($tempArr); $keyVal = ''; foreach ($tempArr as $key2 => $val2) { $keyVal .= $key2 . $val2; } $keyVal = $keyVal . $payKey; $mysgin = strtolower(md5($keyVal)); return $mysgin; } /** * 只对key value 排序 不拼KEY 不 MD5 * @param array $requestData * @param array $filter * @return string */ private static function keySortMd5Filter(array $requestData,array $filter=[]):string { $tempArr = []; foreach ($requestData as $key => $val) { if (!in_array($key, $filter)) { $tempArr[$key] = $val; } } ksort($tempArr); $keyVal = ''; foreach ($tempArr as $k => $val) { $keyVal .= $k . "=" . $val . "&"; } return $keyVal; } /** * @param array $requestData * @param string $split * @param array $filter * @return string */ public static function valueKeySortSplitFilter(array $requestData,string $split='|',array $filter=[]):string { $tempArr = []; foreach ($requestData as $key => $val) { if (!in_array($key, $filter)) { $tempArr[$key] = $val; } } ksort($tempArr); $keyVal = ''; foreach ($tempArr as $k => $val) { $keyVal .= $val . $split; } return trim($keyVal,$split); } /** * 根据用户指定的顺序排列 用value拼接 * @param array $requestData * @param array $userSort * @param string $split * @return string */ public function userSortValueSplitFilter(array $requestData, array $userSort, string $split = '|'): string { $keyVal = ''; foreach ($userSort as $r) { if (array_key_exists($r, $requestData)) { $keyVal .= $requestData[$r] . $split; } } return trim($keyVal, $split); } /** * 使用指定的一些字段签名拼接 * @param array $requestData * @param array $userParam * @param string $split * @return string */ public function userParamSplitKeyValue(array $requestData,array $userParam,string $split='|'):string { $tempArr = array_filter($requestData, function ($k) use ($userParam) { return in_array($k, $userParam); }, ARRAY_FILTER_USE_KEY); ksort($tempArr); $keyVal = ''; foreach ($tempArr as $k => $val) { $keyVal .= $k . "=" . $val . $split; } return trim($keyVal, $split); } /** * @param $publicKey * @return string */ public function formatPublicKey($publicKey){ $publicKey = "-----BEGIN PUBLIC KEY-----\n" . chunk_split($publicKey, 64, "\n") . "-----END PUBLIC KEY-----"; return $publicKey; } /** * 验证签名 * @param string $data 数据 * @param string $sign 签名 * @param string $publicKey 公钥 * @return bool */ public function verifySign($data = '', $sign = '', $publicKey = '') { if (!is_string($sign) || !is_string($sign)) { return false; } return (bool)openssl_verify( $data, base64_decode($sign), $publicKey, OPENSSL_ALGO_SHA256 ); } }