今天所做的努力
都是在为明天积蓄力量

file_get_contents 无法请求微信https接口的问题,解决方法和备用方法

做微信公众平台开发,要通过读取公众平台的一个网址实时获得access_token,用了file_get_contents 在本地测试一切正常,但在服务器上却返回空数据。经过网上查资料原来要修改php.ini中的一个默认配置:

1.windows下的PHP,只需要到php.ini中把extension=php_openssl.dll前面的;删掉,重启服务就可以了。
2.linux下的PHP,就必须安装openssl模块,安装好了以后就可以访问了。
3.如果服务器你不能修改配置的话,那么就使用curl函数来替代file_get_contents函数,当然不是简单的替换啊。还有相应的参数配置才能正常使用curl函数。

我的是windows服务器,修改后,OK!

如果开启了php_openssl.dll 仍无法正常请求https,可以参考一下方式处理:
1,下载https证书到服务器

服务器 下载这个证书,http://curl.haxx.se/ca/cacert.pem
php.ini 配置
openssl.cafile = "/etc/ssl/certs/cacert.pem"//你实际下载证书的路径
重启 php 即可

2,使用cURL 函数处理 https 的参数,获取文件内容


	function getSSLPage($url) {
	    $ch = curl_init();
	    curl_setopt($ch, CURLOPT_HEADER, false);
	    curl_setopt($ch, CURLOPT_URL, $url);
	    curl_setopt($ch, CURLOPT_SSLVERSION,3); 
	    $result = curl_exec($ch);
	    curl_close($ch);
	    return $result;
	}
	
	var_dump(getSSLPage("https://xxx.xxx.xxx"));

       还有一种post
       function getSSLPage($url) {
           $post    = array(
	          '字段'    => '值',
           );
           $url    = '对应url地址';
           $ch = curl_init($url);
           curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //返回数据不直接输出
           curl_setopt($ch, CURLOPT_POST, 1);      //发送POST类型数据
           curl_setopt($ch, CURLOPT_POSTFIELDS, $post); //POST数据,$post可以是数组,也可以是拼接
           $content = curl_exec($ch);          //执行并存储结果
           curl_close($ch);  

}
	

	//引用:https://stackoverflow.com/questions/14078182/openssl-file-get-contents-failed-to-enable-crypto

3,使file_get_contents()函数跳过https验证

$stream_opts = [
    "ssl" => [
        	 "verify_peer"=>false,
        	"verify_peer_name"=>false,
    ]
]; 

$response = file_get_contents("https://xxx.xxx.xxx",false, stream_context_create($stream_opts));

开发中建议使用cURL 函数替代file_get_contents()函数。

赞(0)
未经允许不得转载:如需转载,请标注内容来源流觞 » file_get_contents 无法请求微信https接口的问题,解决方法和备用方法
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

今天所做的努力都是在为明天积蓄力量

联系我们关于小站