config = $payConfigService->getConfig('SitoBank'); $this->publicKey = '-----BEGIN PUBLIC KEY-----'."\n".chunk_split($this->config['platPublicKey'], 64, "\n").'-----END PUBLIC KEY-----'; $this->privateKey = '-----BEGIN PRIVATE KEY-----'."\n".chunk_split($this->config['mchPrivateKey'], 64, "\n").'-----END PRIVATE KEY-----'; } public function sign($msg) { if (openssl_sign($msg, $sign, $this->privateKey, OPENSSL_ALGO_SHA256)) { return $sign; } return false; } public function verify($msg, $sign) { if (openssl_verify($msg, $sign, $this->publicKey, OPENSSL_ALGO_SHA256)) { return true; } return false; } public function getNonceStr( $length = 16 ) { $chars = "abcdefghijklmnopqrstuvwxyz0123456789"; $str = ""; for ( $i = 0; $i < $length; $i++ ) { $str .= substr( $chars, mt_rand( 0, strlen( $chars ) - 1 ), 1 ); } return $str; } public function curlPost($url, $payload) { $timeout=20; $data = json_encode($payload); $sign = $this->sign($data); $signB64 = base64_encode($sign); $headers = [ 'X-Signature:' . $signB64, 'X-Account:' . $this->config['merchantCode'], 'Content-Type: application/json', ]; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 从证书中检查SSL加密算法是否存在 curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); // 设置超时限制防止死循环 curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); $result = curl_exec($ch); if(strstr($result,'code')){ Util::WriteLog('sito_error','error_state_'.$httpCode."|".$result); } curl_close($ch); return $result; } public function notifySign($jsonStr,$sign){ return $this->verify($jsonStr,$sign); } }