首頁  >  文章  >  後端開發  >  微信網頁授權介面為什麼取得不到code(已解決)

微信網頁授權介面為什麼取得不到code(已解決)

WBOY
WBOY原創
2016-12-01 01:27:273552瀏覽

一.呼叫第三方介面的方法

<code>function https_request($url,$type='get',$res='json',$data = ''){
        //1.初始化curl
        $curl = curl_init();
        //2.设置curl的参数
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,2);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        if ($type == "post"){
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        }
        //3.采集
        $output = curl_exec($curl);
        //4.关闭
        curl_close($curl);
        if ($res == 'json') {
            return json_decode($output,true);
        }
    }    </code>

二.取得使用者的openid

<code>    function getBaseInfo(){
        $appid = "我的ID";
        $redirect_uri = urlencode("http://www.XXXXXXX.com/XXXXX/XXXXXX.php/Index/getUserOpenId");
        $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$appid."&redirect_uri=".$redirect_uri."&response_type=code&scope=snsapi_base&state=614#wechat_redirect";
        header('location:'.$url);
    }</code>

三.取得使用者的access_token

<code>    function getUserOpenId(){
        $appid = "我的ID";
        $appsecret = "我的secret";
        $code=$_GET['code'];
        //2.获取到网页授权的access_token
        $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appid."&secret=".$appsecret."&code=".$code."&grant_type=authorization_cod";
        //3.拉取用户的opendi
        $res = $this->https_request($url);
        var_dump($code);
        var_dump("<hr >");
        var_dump($url);
        var_dump("<hr >");
        dump($res);
    }</code>

取得不到網頁授權介面的code,列印三個值結果如下:

<code>NULL string(5) "

" string(149) "https://api.weixin.qq.com/sns/oauth2/access_token?appid=我的ID &secret=我的secret&code=&grant_type=authorization_cod" string(5) "

" array(2) { ["errcode"]=> int(41008) ["errmsg"]=> string(47) "missing code, hints: [ req_id: 3MmDtA0251s113 ]" }
</code>

問題已經找到,相信很多人跟我一樣沒發現問題在哪裡。如下圖所示,應該是code。從官網拷貝的鏈接,不知道咋弄的,少了一個字母...然而這裡不需要拼裝參數,所以一直沒發現...
微信網頁授權介面為什麼取得不到code(已解決)

回覆內容:

一.呼叫第三方介面的方法

<code>function https_request($url,$type='get',$res='json',$data = ''){
        //1.初始化curl
        $curl = curl_init();
        //2.设置curl的参数
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,2);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        if ($type == "post"){
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        }
        //3.采集
        $output = curl_exec($curl);
        //4.关闭
        curl_close($curl);
        if ($res == 'json') {
            return json_decode($output,true);
        }
    }    </code>

二.取得使用者的openid

<code>    function getBaseInfo(){
        $appid = "我的ID";
        $redirect_uri = urlencode("http://www.XXXXXXX.com/XXXXX/XXXXXX.php/Index/getUserOpenId");
        $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$appid."&redirect_uri=".$redirect_uri."&response_type=code&scope=snsapi_base&state=614#wechat_redirect";
        header('location:'.$url);
    }</code>

三.取得使用者的access_token

<code>    function getUserOpenId(){
        $appid = "我的ID";
        $appsecret = "我的secret";
        $code=$_GET['code'];
        //2.获取到网页授权的access_token
        $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appid."&secret=".$appsecret."&code=".$code."&grant_type=authorization_cod";
        //3.拉取用户的opendi
        $res = $this->https_request($url);
        var_dump($code);
        var_dump("<hr >");
        var_dump($url);
        var_dump("<hr >");
        dump($res);
    }</code>

取得不到網頁授權介面的code,列印三個值結果如下:

<code>NULL string(5) "

" string(149) "https://api.weixin.qq.com/sns/oauth2/access_token?appid=我的ID &secret=我的secret&code=&grant_type=authorization_cod" string(5) "

" array(2) { ["errcode"]=> int(41008) ["errmsg"]=> string(47) "missing code, hints: [ req_id: 3MmDtA0251s113 ]" }
</code>

問題已經找到,相信很多人跟我一樣沒發現問題在哪裡。如下圖所示,應該是code。從官網拷貝的鏈接,不知道咋弄的,少了一個字母...然而這裡不需要拼裝參數,所以一直沒發現...
微信網頁授權介面為什麼取得不到code(已解決)

好巧,昨天晚上也有個朋友QQ上問我這問題了。一模一樣的問題。

你設定了可信網域嗎

你總得寫一下你是怎麼取得 code的吧。 。 。

那這樣子,你故意把appid寫錯,看看會不會報錯,就第一次跳轉的那個接口,故意把appid寫錯

我之前看的demo和自己寫的程式碼,我都是把所有的東西寫到了一個方法裡面,剛才給你寫的那個方法,我拆成了兩個方法,會不會是因為這個問題,才沒辦法得到code,你寫到一起試試。

比方說

public function index(){

<code>if($_GET['code']){
        //第二步
        //第三部
}else{

    //第一步跳转
    //回调地址也是回调到这个方法,获取回调地址,用我下面这个地址来取得当前的地址作为回调,getCurUrl()

}</code>

}

/**

  • php取得目前造訪的完整url位址
    */

function getCurUrl() {

<code>$url = 'http://';
if (isset($_SERVER ['HTTPS']) && $_SERVER ['HTTPS'] == 'on') {
    $url = 'https://';
}
if ($_SERVER ['SERVER_PORT'] != '80') {
    $url .= $_SERVER ['HTTP_HOST'] . ':' . $_SERVER ['SERVER_PORT'] . $_SERVER ['REQUEST_URI'];
} else {
    $url .= $_SERVER ['HTTP_HOST'] . $_SERVER ['REQUEST_URI'];
}
// 兼容后面的参数组装
if (stripos($url, '?') === false) {
    $url .= '?t=' . time();
}
return $url;</code>

}

要 location.href = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=wx2d6844d53934185f&secret=551ffeb8a5bbd50766bd3401410963630

它是基於oAuth2.0,流程請參考:wapbaike.baidu.com/item/OAuth2.0/6788617?adapt=1&fr=aladdin

麻煩了...

2天了還是沒結果,能幫下忙嗎

第三步為什麼code時get傳參過來的,之前應該有用access_token取得到的code吧;報錯內容是缺少code參數,檢查下之前取得code的步驟

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn