微信公衆號網頁受權code問題

最近作微信開發,在網頁受權的時候,老是出現異常

time:2017-03-10
問題:手機端訪問網頁沒問題,電腦端微信測試就會出現code過時狀況,致使服務器錯誤
錯誤狀況:圖片描述php

只要出現上述申請訪問鏈接,點擊後code就會過時

圖片描述

code過時致使服務器報錯

問題緣由:json

客戶端以及微信方同時帶code請求服務器屢次,用戶真實請求時code已通過期

解決方法:緩存

  1. 萬金油解決方法,第一次經過code獲取到信息後就把code存入session中,短期內直接從session中獲取,再也不請求微信防止服務器報錯,下面的php代碼給用戶30秒緩存時間.服務器

session_start();
if(isset($_SESSION['user'])){
    $time = time()-$_SESSION['session_time'];
    if($time>30){
        unset($_SESSION['user']);
        unset($_SESSION['session_time']);
    }
}
if(isset($_SESSION['user'])){
    $userinfo = $_SESSION['user'];
}else{...}
  1. 分析請求頭找出用戶真是請求,加以排除.注意要有上述狀況的再嘗試此方法微信

if(!isset($_SERVER['HTTP_UPGRADE_INSECURE_REQUESTS'])){
    if(!isset($_GET['nsukey'])||$_SERVER['HTTP_CONNECTION']=='close'){
        die;
    }
}

後面發現本身剛開始用.top域名訪問時候老是出現這個緣由,後期換成.com就不會讓申請跳轉直接進去落地頁了.多是微信設置緣由.session


下方闡述緣由以及排錯通過,無聊發泄,沒事幹的能夠看看
網頁寫好後,電腦版微信測試時候老是平白無故500報錯,找到報錯緣由就是code失效,一頭霧水,檢查本身代碼檢查了很久,最後手機端一看頁面好好的! 艹!
很明顯code是電腦版使用時候,在用戶訪問以前已經被用了,啥都不說了,先打開抓包工具看一看
圖片描述微信開發

能夠看到我還沒點繼續訪問的時候,就已經有一個請求衝到個人服務器把code用掉啦!
圖片描述
在我點完以後多了一個請求過去,不過明顯已經晚了..code已經失效工具

如今找到緣由很明顯要區別哪一個是用戶真正的請求,分析下請求頭髮現後面訪問的url參數裏有有一個叫nsukey的參數,那就好辦了 有這個參數的再請求獲取code,沒有的直接退出唄,代碼上傳一試
圖片描述測試

靠!繼續報錯!

目測還有別的請求也訪問了服務器,本地抓包沒抓到,八成是微信本身訪問的,怎麼辦呢?url

$file = fopen("HELLO.TXT",'a+');
    $txt = json_encode($_SERVER);
    fwrite($file, "\n".$txt);
    fclose($file);
    die;

生氣了,只要有請求就把信息打印出來看看唄,寫好後在用電腦版試一試
圖片描述

打開hello.txt,乖乖!微信也請求了兩次!

再次分析信息,發現微信請求的HTTP_CONNECTION沒有開啓,如今就辦了

if(!isset($_GET['nsukey'])||$_SERVER['HTTP_CONNECTION']=='close'){
        die;
    }

這兩種狀況屏蔽掉最後就是真是請求了唄,看着很完美,試一下也鏈接成功啦!
惋惜最重要的手機端試一下GG,沒辦法在用上面方法把手機端的也打印出來看看
發現手機端有一個獨特的HTTP_UPGRADE_INSECURE_REQUESTS
OK,那就再判斷下吧..

if(!isset($_SERVER['HTTP_UPGRADE_INSECURE_REQUESTS'])){
    if(!isset($_GET['nsukey'])||$_SERVER['HTTP_CONNECTION']=='close'){
        die;
    }
}

坑爹的微信,本身設置code只有一次機會,本身還跑去請求那麼屢次.

相關文章
相關標籤/搜索