PHP实现微博登入(非开放平台)

用到官方的两个接口,一个是获取图片地址以及qrid,一个是用qrid验证二维码状态

获取新浪登入二维码

    public function getqrpic()
    {
    $url = "https://login.sina.com.cn/sso/qrcode/image?entry=weibo&size=180&callback=STK_" . $this->getTime();
    $header = [
        'Accept:' => '*/*',
        'Accept-Encoding:' => 'gzip, deflate, br',
        'Accept-Language:' => 'en-US,en;q=0.9',
        'Connection:' => 'keep-alive',
        'Cookie:' => 'mm_lang=en; mm_lang=en',
        'Host:' => 'login.wx.qq.com',
        'Referer:' => 'https://wx.qq.com/',
        'User-Agent:' => 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
    ];
    $res = Curl::url($url)->setHeader($header)->get();
    $regex = "#window(.*?)\(#"; 
    $resArr = json_decode(rtrim(rtrim(preg_replace($regex, "", $res), ';'), ')'), true); 
    // echo ltrim($resArr['data']['image'], '//');
    if ($resArr['retcode'] == 20000000) {
        Json::msg(0, 'success', ['qrid' => $resArr['data']['qrid'], 'image' => 'https://' . ltrim($resArr['data']['image'], '//')]);
    } else {
          Json::msg(1, '二维码获取失败');
    }
    }

利用返回的qrid验证二维码状态

    public function cron()
    {

    if (input('?get.qrid')) {
        $qrid = input('get.qrid');
    } else {
        Json::msg(400, 'qrid不能为空');
    }
    $url = "https://login.sina.com.cn/sso/qrcode/check?entry=weibo&qrid=" . $qrid . "&callback=STK_" . $this->getTime();
    // echo $url;exit;
    $header = [
        'Accept:' => '*/*',
        'Accept-Encoding:' => 'gzip, deflate, br',
        'Accept-Language:' => 'en-US,en;q=0.9',
        'Connection:' => 'keep-alive',
        'Cookie:' => 'mm_lang=en; mm_lang=en',
        'Host:' => 'login.wx.qq.com',
        'Referer:' => 'https://wx.qq.com/',
        'User-Agent:' => 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
    ];
    $res = Curl::url($url)->setHeader($header)->get();
    $regex = "#window(.*?)\(#"; 
    $resArr = json_decode(rtrim(rtrim(preg_replace($regex, "", $res), ';'), ')'), true); 
      if($resArr['retcode'] == 50114003){
          Json::msg(205, '二维码已失效');
    } elseif($resArr['retcode'] == 50114001) {
          Json::msg(202, '二维码未失效');
    } elseif($resArr['retcode'] == 50114002) {
          Json::msg(204, '正在验证二维码');
    } elseif ($resArr['retcode'] == 50114004) {
        Json::msg(204, '该二维码已登录,请重新扫描');
    } elseif ($resArr['retcode'] == 20000000) {
        //Json::msg(200, 'sucess', $resArr);
        preg_match("/-(.*?)-/", $resArr['data']['alt'], $ts_arr);
        $wb = base64_decode($ts_arr[1]);
        // 这里写成功后的操作
        // 扫码成功后会返回一个固定的base64,利用这个值登入吧
        $this->reg($wb);
    } else{
          Json::msg(306, $res);
    }
    }

附getTime方法,此方法获取13位时间戳

    private function getTime() {
        $arr = explode('.', microtime(true));  
        return (float)($arr[0] . substr($arr[1], 0 , 3));
    }

前端代码博主就不贴了,定时器罢了

示例网站:http://www.chinawenshu.com

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇