public function decrypt($data){ ksort($data); $toSign =''; foreach($data as $key=>$value){ if(strcmp($key, 'sign')!= 0 && $value!=''){ $toSign .= $key.'='.$value.'&'; } } $str = rtrim($toSign,'&'); $encrypted = ''; //替换自己的公钥 $pem = chunk_split('MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDd1nUQ6b3fgC8ARNSvTeJ2aKeUfN8QSi8DulFqgczmI6Wh/Y27HiQOr9Hb9/0lBeG9ALyvAcGcVNFlPbiAzl2EfRkY2thh3GTBjTXMKpMvIX2QUedJ8aqAy9cntXo3OHcSGD4b4hL3yg9B3BQzgYDZDN76x93zY0CB/9Og/qxF6QIDAQAB', 64, "\n"); $pem = "-----BEGIN PUBLIC KEY-----\n" . $pem . "-----END PUBLIC KEY-----\n"; $publickey = openssl_pkey_get_public($pem); $base64=str_replace(array('-', '_'), array('+', '/'), $data['sign']); $crypto = ''; foreach(str_split(base64_decode($base64), 128) as $chunk) { openssl_public_decrypt($chunk,$decrypted,$publickey); $crypto .= $decrypted; } if($str != $crypto){ exit('sign fail'); } } //加密 public function encrypt($data){ ksort($data); $str = ''; foreach ($data as $k => $v){ if(!empty($v)){ $str .=(string) $k.'='.$v.'&'; } } $str = rtrim($str,'&'); $encrypted = ''; //替换成自己的私钥 $pem = chunk_split('MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAJELYEiZ3yIYOo2NzbwcD5Fm3w5NWyUG0UaYbX8l+zlqtKrCGyUQhjxpDOGiz7QgudPlfVt4yc+zFbtxJGD9jTzIHCkydNiGVzhlLFju6yXnNTD7FU5v1eq+fFsv/oZbKviTVapgkkMbjLm5zfWqxQMOzTMf6T7RSPhS66oZ92wTAgMBAAECgYEAjJbeSQD8y2t4teSRWphIbsOryY0pn4YwK6Fr4SbLkCfh3vIupYqS0tNwbPUHJq3h8YYsMBGwa+ZGVl2gyXJ7Bs0t5/dEnHD5ArMTxhSc+CqKt54Y0b1/Z4U9XiU+qG1gkkZS5Gcxjwyc0kUW2M6uga46N2WrjkHnDWs+4spCXuECQQDMTrpXEHAwgmmvLssOlSgm56aI3FBKiI0UOlBEbI0P0KaDZc4OPg5BE/AmKlTDt84Mcg1PDw0JJJbq/0kv6PJHAkEAtb4ZMPArDqPWKG6EipT37xI6HhM1WNU4YI3jpECoiJaYH65vZB4M+uvz0bp+uOMRdj4LddPX8JTmawRjlefx1QJBALaSn/hPq0HeOJ0g3rpgVio2Fl71KhcA4bmyxqnuqzv3w+Vl43ZcxBYpwBALAgaISWxbu0Lr+0UxWmAT044px98CQFCgPui5A0EBafaR4Pbh04QZ3/KLrvTz0ojzKXQqwxmlRWN4rS4LLtL6bjYyuBkpkwuTxt3E112BkR8U2WEdfukCQDujWa09aQEGBCgw1w2uWiOJsuaOSefpF1DfVmHTwSsM7tj3hqoDiDivQWe//ftW2Ua+n1V6tIRK8udLWaVFcOE=', 64, "\n"); $pem = "-----BEGIN PRIVATE KEY-----\n" . $pem . "-----END PRIVATE KEY-----\n"; $private_key = openssl_pkey_get_private($pem); $crypto = ''; foreach (str_split($str, 117) as $chunk) { openssl_private_encrypt($chunk, $encryptData, $private_key); $crypto .= $encryptData; } $encrypted = base64_encode($crypto); $encrypted = str_replace(array('+','/','='),array('-','_',''),$encrypted); $data['sign']=$encrypted; return $data; } public static function globalpay_http_post_res_json($url, $postData) { $options = array( 'http' => array( 'method' => 'POST', 'header' => 'Content-type:application/json', 'content' => $postData, 'timeout' => 15 * 60 // 超时时间(单位:s) ) ); $context = stream_context_create($options); $result = file_get_contents($url, false, $context); return $result; }