首先封裝一個 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'); }
結果:

