首先封装一个 CURL 方法,可以不用理解代码
class MyCurl extends Base { /** * http请求 * * @param $url //请求地址 * @param $params //链接后拼接的参数数组 * @param $method //get/post * @param $header //请求头数组 */ function httpCurl($url, $params, $method = 'GET', $header = array(), $multi = false) { date_default_timezone_set('PRC'); //设置默认时区 $opts = array( //请求参数 CURLOPT_TIMEOUT => 30, CURLOPT_RETURNTRANSFER => 1, //将curl_exec()获取的信息以文件流的形式返回 CURLOPT_SSL_VERIFYPEER => false, //不对认证证书来源的检查 CURLOPT_SSL_VERIFYHOST => false, //不从证书中检查SSL加密算法是否存在 CURLOPT_HTTPHEADER => $header, //Content-Type类型 CURLOPT_COOKIESESSION => true, CURLOPT_FOLLOWLOCATION => 1, // 使用自动跳转 CURLOPT_COOKIE => session_name() . '=' . session_id(), ); /* 根据请求类型设置特定参数 */ switch (strtoupper($method)) { case 'GET': // 链接后拼接参数 如xxx.com?key = value & key2=value $opts[CURLOPT_URL] = $url . '?' . http_build_query($params);//将数组变成key=value&key2=value break; case 'POST': //判断是否传输文件 $params = $multi ? $params : http_build_query($params); //同上 $opts[CURLOPT_URL] = $url; $opts[CURLOPT_POST] = 1; $opts[CURLOPT_POSTFIELDS] = $params; break; default: throw new Exception('不支持的请求方式!'); } /* 初始化并执行curl请求 */ $ch = curl_init(); curl_setopt_array($ch, $opts); // 数组形式设置URL和其他参数 $data = curl_exec($ch); // URL抓取并把它传递给浏览器 $error = curl_error($ch); curl_close($ch); if ($error) return $this->create('','错误信息:'.$error,400); $data = json_decode($data, true); return $data; } /** * xml/json数据的POST请求 * * @param $url //请求地址 * @param $xmlData //xml 或 json数据 */ public function PostData($url,$xmlData) { $curl = curl_init(); $param[CURLOPT_URL] = $url; $param[CURLOPT_HEADER] = false; $param[CURLOPT_RETURNTRANSFER] = true; $param[CURLOPT_FOLLOWLOCATION] = true; $param[CURLOPT_POST] = true; $param[CURLOPT_POSTFIELDS] = $xmlData; $param[CURLOPT_SSL_VERIFYPEER] = false; $param[CURLOPT_SSL_VERIFYHOST] = false; curl_setopt_array($curl,$param); //传参数 $data = curl_exec($curl); //执行命令 curl_close($curl); return $data; } }
测试 微信小程序通过code 获取 openId 的过程
public function test(Request $request) { $url = App::config('xcxKey_url'); //请求地址 //从微信服务器换取 openid 传递的参数 AppId、AppSecret、Code、grant_type、connect_redirect $params['appid'] = App::config('xcx_appid'); $params['secret'] = App::config('xcx_secret'); $params['js_code'] = $request::param('code'); $params['grant_type'] = 'authorization_code'; $params['connect_redirect'] = 1; return (new MyCurl)->httpCurl($url, $params, 'POST'); }
结果: