Thinkphp3.2.3微信验证Token,授权登录并获取用户openID的基本信息

  • 6,100
摘要

Thinkphp3.2.3微信验证Token,授权登录并获取用户openID的基本信息。更开始在网上找了一些关于ThinkPHP接入微信的资源,但是由于ThinkPHP路径的问题一直验证不成功!网上也是怨声载道,经过一上午的测试还是不行,后来找到一篇文章【关于微信验证token 服务器接入微信】后经过测试接入成功并成功获取用户基本信息!整理出来希望能帮助到更多的人!

首先感谢帮助我的陈哥,在Thinkphp接入微信的时候一直验证不成功给与的帮助!

以下由陈哥整理并借鉴于此:

Thinkphp3.2.3微信验证Token,授权登录并获取用户openID的基本信息

Thinkphp3.2.3微信验证Token,授权登录并获取用户openID的基本信息

<?php
namespace Index\Controller;
use Think\Controller;

define("TOKEN", "KNRr873ddJ8D7zIMjDwIYM7m8Jy8M7db");//定义你公众号自己设置的token
define("APPID", "wxb59d68a1b88fc5b9");//填写你微信公众号的appid 千万要一致啊
define("APPSECRET", "49280f7d634eea52f20b9e7df2fd121c");//填写你微信公众号的appsecret  千万要记得保存 以后要看的话就只有还原了  保存起来 有益无害


class MeController extends Controller {
        //判断是介入还是用户  只有第一次介入的时候才会返回echostr

       public function index()
            {

                //这个echostr呢  只有说验证的时候才会echo  如果是验证过之后这个echostr是不存在的字段了

                $echoStr = $_GET["echostr"];
                if ($this->checkSignature()) {
                    ob_clean();
                    echo $echoStr;
                    //如果你不知道是否验证成功  你可以先echo echostr 然后再写一个东西
                    exit;
                }else{
                    echo " wa ";
                    exit();
                }
            }//index end
            //验证微信开发者模式接入是否成功
            private function checkSignature()
            {
                //signature 是微信传过来的 类似于签名的东西
                $signature = $_GET["signature"];
                //微信发过来的东西
                $timestamp = $_GET["timestamp"];
                //微信传过来的值  什么用我不知道...
                $nonce     = $_GET["nonce"];
                //定义你在微信公众号开发者模式里面定义的token
                $token  = "KNRr873ddJ8D7zIMjDwIYM7m8Jy8M7db";
                //三个变量 按照字典排序 形成一个数组
                $tmpArr = array(
                    $token,
                    $timestamp,
                    $nonce
                );
                // use SORT_STRING rule
                sort($tmpArr, SORT_STRING);
                $tmpStr = implode($tmpArr);
                //哈希加密  在laravel里面是Hash::
                $tmpStr = sha1($tmpStr);
                //按照微信的套路 给你一个signature没用是不可能的 这里就用得上了
                if ($tmpStr == $signature) {
                    return true;
                } else {
                    return false;
                }
            }// checkSignature end
            //构建一个发送请求的curl方法  微信的东西都是用这个 直接百度
            function https_request($url, $data = null)
            {
                //这个方法我不知道是怎么个意思  我看都是这个方法 就copy过来了
                $curl = curl_init();
                curl_setopt($curl, CURLOPT_URL, $url);
                curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
                curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
                if (!empty($data)){
                    curl_setopt($curl, CURLOPT_POST, 1);
                    curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
                }
                curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
                $output = curl_exec($curl);
                curl_close($curl);
                return $output;
            }//https_request end


}
<?php
namespace Index\Controller;
use Think\Controller;

define("TOKEN", "KNRr873ddJ8D7zIMjDwIYM7m8Jy8M7db");//定义你公众号自己设置的token
define("APPID", "wxb59d68a1b88fc5b9");//填写你微信公众号的appid 千万要一致啊
define("APPSECRET", "49280f7d634eea52f20b9e7df2fd121c");//填写你微信公众号的appsecret  千万要记得保存 以后要看的话就只有还原了  保存起来 有益无害
class MeController extends Controller {

    function index(){
        header("Content-Type: text/html; charset=UTF-8");
        $REDIRECT_URI = "http://v.150643.com/index.php/me/getCode";
        echo $REDIRECT_URI."<br>";
        $REDIRECT_URI = urlencode($REDIRECT_URI);
        echo $REDIRECT_URI."<br>";
        $scope = "snsapi_userinfo";
        echo $scope."<br>";
        $state = md5(mktime());
        echo $state."<br>";
        $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=".APPID."&redirect_uri=".$REDIRECT_URI."&response_type=code&scope=".$scope."&state=".$state."#wechat_redirect";
        header("location:$url");        
    }
    function getCode(){
        header("Content-Type: text/html; charset=UTF-8");
        $code = $_GET["code"];
        $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".APPID."&secret=".APPSECRET."&code=".$code."&grant_type=authorization_code";
        $res = $this->https_request($url);
        $res  = json_decode($res,true);
        $openid = $res["openid"];
        $access_token = $res["access_token"];
        $url = "https://api.weixin.qq.com/sns/userinfo?access_token=".$access_token."&openid=".$openid."&lang=zh_CN";
        $res = $this->https_request($url);
        $res = json_decode($res,true);
        foreach ($res as $key => $value) {
            echo $value . '<br>';

        }
/*        $arr = $res['openid'];
        session('id',$res['openid']);
        header("location:http://v.150643.com/index.php/me/me");*/


    }
    function https_request($url, $data = null)
            {
                $curl = curl_init();
                curl_setopt($curl, CURLOPT_URL, $url);
                curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
                curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
                if (!empty($data)){
                    curl_setopt($curl, CURLOPT_POST, 1);
                    curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
                }
                curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
                $output = curl_exec($curl);
                curl_close($curl);
                return $output;
            }
 


}

Thinkphp3.2.3微信验证Token,授权登录并获取用户openID的基本信息
参考文章地址:http://www.thinkphp.cn/extend/932.html
http://www.thinkphp.cn/extend/933.html

weinxin
我的微信
这是我的微信扫一扫
开拓者博主
  • 本文由 发表于 2017年7月5日12:56:16
  • 转载请务必保留本文链接:https://www.150643.com/453.html
匿名

发表评论

匿名网友 填写信息

评论:1   其中:访客  1   博主  0
    • 加气块设备 加气块设备 1

      收藏