PHP--------微商城实现微信授权登录

切切歆语 · · 103 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

前段时间做完微商城了,来把微信商城学到的一些东西分享一下,希望对各位有所帮助。

PHP做后台,先来说微信商城的授权登录吧!这个几乎都有,这个功能代码其实不多,主要是看懂文档需求。

前提:要有公众号,和通过微信认证,得到相应信息,appid,appsecret等。

 

看看效果图:

                     

获取信息有:用户昵称,性别,头像,国家等

微信开发文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842

第一步:获取code

  /****
     * 点击进入登录调用
     */
    function index() {
        /***
         * 跳转得到code
         * 回调地址 列http://xxxxxx/?m=weixin&c=wxtest&a=wxcode
         * 
         */
        $this->getCode("http://xxxxxx/?m=home&c=wxlogin&a=wxcode");
        
    }

/**
     * 第一步
     * 获取CODE
     * @param string $weixin_uri
     * appid    是    公众号的唯一标识
     * redirect_uri    是    授权后重定向的回调链接地址, 请使用 urlEncode 对链接进行处理
     * response_type    是    返回类型,请填写code
     * scope    是    应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息 )
     * state    否    重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节
     * #wechat_redirect    是    无论直接打开还是做页面302重定向时候,必须带此参数
     * 
     */
    private function getCode($redirect_uri){
        $weixin_uri = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$this->appid;
        $weixin_uri.= '&redirect_uri='.urlencode($redirect_uri).'&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect';
        $this->redirect($weixin_uri);
            
    }

第二步:获取回调方法接收code,通过code换取网页授权access_token

/****
     * 回调地址
     * 获取code
     */
    function wxcode(){
    
     //验证是否得到参数code,做相应处理
        if ($_GET['code']) {
        
        }
        //得到回调接口的参数code
        $code=$_GET['code'];
    
        /***
         * 第二步:通过code换取网页授权access_token
         * 首先请注意,这里通过code换取的是一个特殊的网页授权access_token,
         * 与基础支持中的access_token(该access_token用于调用其他接口)不同。
         * 公众号可通过下述接口来获取网页授权access_token。如果网页授权的作用域为snsapi_base,
         * 则本步骤中获取到网页授权access_token的同时,也获取到了openid,snsapi_base式的网页授权流程即到此为止。
         * 尤其注意:由于公众号的secret和获取到的access_token安全级别都非常高,必须只保存在服务器,不允许传给客户端。
         * 后续刷新access_token、通过access_token获取用户信息等步骤,也必须从服务器发起。
         * 
         */
        $url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$this->appid;
        $url.= '&secret='.$this->appsecret.'&code='.$code.'&grant_type=authorization_code';
      //get请求,得到access_token,openid等信息
        $data = json_decode(httpGet($url), true);


       //打印数据
        echo $code;
        print_array($data);
    
        //第三步  可省略 刷新access_token(如果需要)
        //由于access_token拥有较短的有效期,当access_token超时后,可以使用refresh_token进行刷新,
        //refresh_token有效期为30天,当refresh_token失效之后,需要用户重新授权。
    
    
        //第四步 获取用户信息
        //如果网页授权作用域为snsapi_userinfo,则此时开发者可以通过access_token和openid拉取用户信息了。
        //http:GET(请使用https协议) https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
        if ($data['openid'] && $data['access_token']) {
            $json = httpGet("https://api.weixin.qq.com/sns/userinfo?access_token=$data[access_token]&openid=$data[openid]&lang=zh_CN");
            $user=json_decode($json, true);
            // print_array($user); //打印信息
        }
    
        // exit();
      $this->assign('user',$user);

        //跳转界面显示所获取的信息
        $this->display("wxcode");
    }

正确时返回的JSON数据包如下:

{    
"openid":" OPENID",
" nickname": NICKNAME,
"sex":"1",
"province":"PROVINCE"
"city":"CITY",
"country":"COUNTRY",
"headimgurl":    "http://wx.qlogo.cn/mmopen/g3MonUZQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46",
"privilege":[ "PRIVILEGE1" "PRIVILEGE2"     ],
"unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
}

注:我用到的参数  appid,appsecret在父类中

PHP不管用什么框架,只要步骤对,都能实现。

本文来自:开源中国博客

感谢作者:切切歆语

查看原文:PHP--------微商城实现微信授权登录

103 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet