diff --git a/extend/payment/Weixin.php b/extend/payment/Weixin.php index 46f1715ee..28b5b4c22 100755 --- a/extend/payment/Weixin.php +++ b/extend/payment/Weixin.php @@ -611,6 +611,58 @@ class Weixin } } + /** + * 以post方式提交xml到对应的接口url + * + * @param WxPayConfigInterface $config 配置对象 + * @param string $xml 需要post的xml数据 + * @param string $url url + * @param bool $useCert 是否需要证书,默认不需要 + * @param int $second url执行超时时间,默认30s + * @throws WxPayException + */ + private static function HttpRequest($url, $xml, $useCert = false, $second = 30) + { + $ch = curl_init(); + $curlVersion = curl_version(); + + //设置超时 + curl_setopt($ch, CURLOPT_TIMEOUT, $second); + curl_setopt($ch,CURLOPT_URL, $url); + curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE); + curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验 + + //设置header + curl_setopt($ch, CURLOPT_HEADER, FALSE); + //要求结果为字符串且输出到屏幕上 + curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); + + if($useCert == true){ + //设置证书 + //使用证书:cert 与 key 分别属于两个.pem文件 + //证书文件请放入服务器的非web目录下 + curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM'); + curl_setopt($ch,CURLOPT_SSLCERT, ROOT.'weixin-cert/apiclient_cert.pem'); + curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM'); + curl_setopt($ch,CURLOPT_SSLKEY, ROOT.'weixin-cert/apiclient_key.pem'); + } + //post提交方式 + curl_setopt($ch, CURLOPT_POST, TRUE); + curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); + //运行curl + $data = curl_exec($ch); + //返回结果 + if($data){ + curl_close($ch); + return $data; + } else { + $error = curl_errno($ch); + curl_close($ch); + var_dump($error); + return $error; + } + } + /** * [HttpRequest 网络请求] * @author Devil @@ -623,7 +675,7 @@ class Weixin * @param [int] $second [超时] * @return [mixed] [请求返回数据] */ - private function HttpRequest($url, $data, $use_cert = false, $second = 30) + private function HttpRequestss($url, $data, $use_cert = false, $second = 30) { $options = array( CURLOPT_RETURNTRANSFER => true,