前段时间做微信开发,因微信有众多接口调用,因此自己整理了一套比较通用的工具类,用以做接口 调用,考虑到方便性和简洁性,这里选择使用php的curl扩展库来实现
1 curl启用和apache的配置
先来看看网友们提供的众多错误方法,本人被这些资料坑的太惨 了
(1)把dll复制到system32(64位的路径是其他)附带重启apache
(2) 直接到php.ini开启curl扩展即可(这个哪有那么简单)
正确的做法如下:
首先打开curl扩展,直接去php.ini里修改:
; Notes for Windows environments :
;
; - Many DLL files are located in the extensions/ (PHP 4) or ext/ (PHP 5+)
; extension folders as well as the separate PECL DLL download (PHP 5+).
; Be sure to appropriately set the extension_dir directive.
;
;extension=bz2
extension=curl
接着修改apache的配置文件httpd.conf,在最后加上如下配置,路径按需修改
LoadFile D:/phpenv/php7/php7ts.dll
LoadFile D:/phpenv/php7/libeay32.dll
LoadFile D:/phpenv/php7/ssleay32.dll
LoadFile D:/phpenv/php7/libssh2.dll
2 直接上工具类代码
class RequestUtil{
function https_request($url,$data=null){
$curl=curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
if(!empty($data)){
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl,CURLOPT_POST, true);
}
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$result=curl_exec($curl);
curl_close($curl);
return $result;
}
function http_request($url,$data=null){
$curl=curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
if(!empty($data)){
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl,CURLOPT_POST, true);
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$result=curl_exec($curl);
curl_close($curl);
return $result;
}
}
?>
工具类没写什么注释,如果看不明白,查阅下php开发手册,里面有详细说明
3 有关$data的注意事项
大部分post请求,只需要把参数写到一个数组里,以微信自定义菜单的创建接口做说明,如下:
$data=json_encode($menuJson,JSON_UNESCAPED_UNICODE)
一些情况下,请求的body可能只是一个字符串,此时直接拼接参数即可
$postStr=array("api_key"=>"xxx_","api_secret"=>"xxx","image_base64"=>$res,"return_attributes"=>"gender,age,ethnicity");
$o = "";
foreach ( $postStr as $k => $v )
{
$o.= "$k=" . urlencode( $v ). "&" ;
}
$postStr = substr($o,0,-1);
这里的$postStr和$data代表同一个东西