$val) { $paramsStrExceptSign .= $val; } $paramsStrExceptSign .= $key; $sign = md5($paramsStrExceptSign);//签名 //初始化 $curl = curl_init(); //设置抓取的url curl_setopt($curl, CURLOPT_URL, $payurl); //设置头文件的信息作为数据流输出 curl_setopt($curl, CURLOPT_HEADER, false); //设置获取的信息以文件流的形式返回,而不是直接输出。 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_HTTPHEADER, [ 'Sign:' . $sign ]); //设置post方式提交 curl_setopt($curl, CURLOPT_POST, 1); //设置post数据 $post_data = $data; curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data); //执行命令 $return_data = curl_exec($curl); //关闭URL请求 curl_close($curl); $return_data = json_decode($return_data, true); $tt = print_r($return_data,true); file_put_contents('heheheh.txt',$tt); if ($return_data['code'] == 200) { //成功 return $return_data; //返回登录地址 } else { return $return_data; } } //加密函数 public static function encrypt($data, $rsa_publickey) { $split = str_split($data, 117); // 1024 bit && OPENSSL_PKCS1_PADDING 不大于117即可 $crypto = ''; foreach ($split as $chunk) { $isOkay = openssl_public_encrypt($chunk, $encryptData, $rsa_publickey); if (!$isOkay) { return false; } $crypto .= $encryptData; } return base64_encode($crypto); } //解密函数 public static function decrypt($data, $rsa_privatekey) { $split = str_split(base64_decode($data), 128); // 1024 bit 固定172 $crypto = ''; foreach ($split as $chunk) { $isOkay = openssl_private_decrypt($chunk, $decryptData, $rsa_privatekey); // base64在这里使用,因为172字节是一组,是encode来的 if (!$isOkay) { return false; } $crypto .= $decryptData; } return $crypto; } //响应和验签函数 public static function response($data,$rsa_private,$key) { //接受到响应 第一步解密 $rsa_private = openssl_get_privatekey($rsa_private); //解密出私钥 $data = json_decode(PayUtils::decrypt($data, $rsa_private), true); //解密函数,得到数据 ksort($data); $sign = $data['sign']; unset($data['sign']); $paramsStrExceptSign = ''; foreach ($data as $k => $val) { $paramsStrExceptSign .= $k . $val; } $paramsStrExceptSign .= $key; //需要拼接上密钥 if ($sign == md5($paramsStrExceptSign)) { //验签成功 return $data['paymentNo']; //返回解析数据中的订单号码 }else{ return false; //验签不过就返回false } } }