微信网页二维码授权登陆

                                                                     PHP网站应用开发 微信三方扫码登陆 

 开发示例下载地址

1.微信开放平台配置 授权域名 (微信开放平台https://open.weixin.qq.com/)

进入管理中心 -> 网站应用->点击对应的公众号配置授权域名 审核时间较长 至少需提前一周去更改.

修改标记中的授权回调域名 和公众号回调域名是不同的 这就是一大坑. 格式为 mp.csdn.net , www.csdn.net ......

2.微信平台不在存储Appsecret 我们需要把appsecret存储起来 以便后续使用。

3. 再实际开发我们再tp5框架中 使用的是采取js调取二维码 (微信文档地址) 。

前端代码:

<div id="container"></div>

<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<script>
	
var WX = new Object();
WX.__CONTAINERid = 'container'; //* 容器ID
WX.__Appid = 'wxcd58928995acef61'; //* 公众号appid   
WX.__Scope = 'snsapi_login'; //* 用户授权的作用域,使用逗号(,)分隔
WX.__Redir = '*****'; //回调地址 需要进行rulencode处理 回调 需要进行 urlencode()处理
WX.__State = "{$wxlogin_state}";//  回调状态 用于做csrf验证 在这里我们采用了 session去做处理
WX.__Retype = 'code';	//死值 为获取凑得
WX.__Style = ''; //提供"black"、"white"可选,默认为黑色文字描述。详见文档底部FAQ
WX.__Href = '';//自定义样式链接,第三方可根据实际需求覆盖默认样式。详见文档底部FAQ
</script>
<script src="__STATIC__/login/js/wx_login.js"></script>

在这里我把微信官方给的js 直接复制了出来做出了调整 保存在了项目文件下,也就是上段代码中的 wx_login.js(  github下载地址 )

再扫码成功并授权完成后会携带code跳转到开发者填写的回调地址中

&&**获取临时用户Token和open_id的代码

<?php
/**
 * Created by PhpStorm.
 * User: 林虎
 * Date: 2018/7/24
 * Time: 15:30
 */

namespace app\base\controller;


use think\Controller;
use app\libException\client\ParamException;
use app\model\Verify;
use app\validate\VerifyValidate;

class Wechat extends Controller
{
    /**
     * 获取accesssToken
     *
     * @access public
     * @param string appid
     * @param string appsecret
     * @return json 返回类型
     */
//根据token 与openid获取用户数据
    public function bGetUserInfo($data=[]) 
    {
    	$user_info_url = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$data['access_token'].'&openid='.$data['openid'];
        return json_decode(https_request($user_info_url),true);
    }
    //通过code app_id appsecret 获取accesstoken和openid
    public function bGetUserToken($code='',$appid='',$secret=''){
    	if(empty($code) or empty($appid) or empty($secret)){
    		return '请检查您的填写的参数';
    	}
    	$code_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$appid.'&secret='.$secret.'&code='.$code.'&grant_type=authorization_code';
    	return json_decode(https_request($code_url),true);

    }
}

&&** 回调地址控制器 代码    微信开发文档链接


      public function wxlogin(){
        // // echo urlencode('https://qqcardcs.10088.cn/admin/cs/index');die;
        $param = request()->param();
        if(!empty($param)){
          if($param['state'] != Session::get('wxlogin_state'))
            {
                return '非法操作';
            }      
            $bGetUserToken_res = $this->bGetUserToken($param['code'],config('appid'),config('secret')); //根据获取token 和openid
            if(!empty($bGetUserToken_res['errcode'])){
              $this->cInsertErr($bGetUserToken_res,'code请求token');exit;//写入错误信息
            }
            $Admin_model = new Admin_model();
            $Ssecretary = new Ssecretary();
            $bGetUserInfo_res = $this->bGetUserInfo($bGetUserToken_res); //根据token和openid 获取用户信息
            $mGetAdminOne_res = $Admin_model->mGetAdminOne(['unionid'=>$bGetUserInfo_res['unionid']]);
            if(!empty($mGetAdminOne_res)){
               if(!empty($bGetUserInfo_res['errcode'])){
                 $this->cInsertErr($bGetUserInfo_res,'请求用户数据');//写入错误信息
               }
               $res = (new Admin_model())->mInsertAdmin($bGetUserInfo_res); //插入用户信息 

              
         
              return $this->redirect('index/index/index');            
            }else{

            }           
        }

      }

     

                                                                                                                                         不是你浪费了时间,而是时间消耗了你的生命。

猜你喜欢

转载自blog.csdn.net/kolinhu/article/details/81184598