PHP 网站应用微信登录

背景

近期进行 PC 端的网站开发,需要用到微信授权登录,考虑到前期手机端已经获得了大量的微信用户群,现在想着进行资源整合,满足同一个微信用户的数据同步。

一、开发须知
1.概念区分

因为接触到微信开发的知识,必然会接触 OpenID 与UnionID 的使用,以下为微信官方文档的的介绍,请注意区分:

  • 在关注者与公众号产生消息交互后,公众号可获得关注者的 OpenID(加密后的微信号,每个用户对每个公众号的 OpenID 是唯一的。对于不同公众号,同一用户的 OpenID 不同)。公众号可通过相应接口来根据 OpenID 获取用户基本信息,包括昵称、头像、性别、所在城市、语言和关注时间。
  • 请注意,如果开发者有在多个公众号,或在公众号、移动应用之间统一用户帐号的需求,需要前往微信开放平台(open.weixin.qq.com)绑定公众号后,才可利用 UnionID 机制来满足上述需求。

简单概括来讲:

  • OpenID 是普通用户的标识,对当前开发者帐号唯一。一个 OpenID 对应一个公众号。
  • UnionID 是用户统一标识。针对一个微信开放平台帐号下的应用,同一用户的 UnionID 是唯一的。
2.归纳整理

绕了这个圈,也就是说,微信公众号开发与微信开发平台开发是有差别的,想让同一个微信用户使用不同平台(如PC端、app、微信小程序等)的网站登录,需要进行账号绑定,而这个绑定的账号不能以 OpenID 区分,而需要用 UnionID 区分。

3.典型问题

附录一个常见的设计问题,主要在于开发前的知识使用不够全面,而造成后续拓展的影响,当然,这也是我遇到的问题,希望可以给各位敲个警钟。

二、微信开放平台操作
1.简要引导

根据在下的需求,选择了“网站应用开发”的创建,然后按照官方提示进行材料的申请,一般需要三天以上。
选择“网站应用开发”

当应用创建通过后,必须还要满足接口权限的获取,会有工作人员主动联系,一般一天就能完成。
获取微信登录权限

2.官方提供的场景参考

场景参考

3.绑定公众账号/小程序

为了保证同一个开发账号下对应微信用户的 UnionID 绑定使用,需要在下面的列表中绑定对应的公众号/服务号,文档中介绍一般要满足微信支付功能

绑定公众账号/小程序

4.授权获取access_token时序图

获取access_token时序图

三、代码实现

其实,主要的时间都花费在了前期的申请操作上,而真正的代码实现却是极为简单,以下是我的实现方式,敬请指摘。

1、公共文件配置

习惯主要的配置信息同意放在了配置文件中,‘\Application\Common\Conf\config.php’。

'WEIXIN_LOGIN' => array(
        // 微信开放平台 使用微信帐号登录App或者网站 配置信息
        'OPEN_APPID' => 'wxbd961b2a6b7b2963', //应用 AppID
        'OPEN_APPSECRET' => 'e6xxxxxxxxxxxxxxxxxxxxe90',//应用 AppSecret
        'OPEN_CALLBACKURL' => 'http://www.52zhenmi.com/Home/Login/wxBack', //微信用户使用微信扫描二维码并且确认登录后,PC端跳转路径
    ),
2.核心代码

具体代码,请参考路径 “zmPro\Application\Home\Controller\LoginController.class.php”

public function wxIndex(){
        //--微信登录-----生成唯一随机串防CSRF攻击
        $state  = md5(uniqid(rand(), TRUE));
        $_SESSION["wx_state"]    =   $state; //存到SESSION
        $callback = urlencode($this->callBackUrl);
        'https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect';
        $wxurl = "https://open.weixin.qq.com/connect/qrconnect?appid="
                .$this->appID."&redirect_uri="
                .$callback."&response_type=code&scope=snsapi_login&state="
                .$state."#wechat_redirect";
        header("Location: $wxurl");
    }

    public function wxBack(){
        if($_GET['state']!=$_SESSION["wx_state"]){
            echo 'sorry,网络请求失败...';
            exit("5001");
        }
        $url='https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$this->appID.'&secret='.$this->appSecret.'&code='.$_GET['code'].'&grant_type=authorization_code';
        $arr = curl_get_contents($url);
        //得到 access_token 与 openid
        $url='https://api.weixin.qq.com/sns/userinfo?access_token='.$arr['access_token'].'&openid='.$arr['openid'].'&lang=zh_CN';
        $user_info = curl_get_contents($url);
        $this->dealWithWxLogin($user_info);
    }

    /**
     * 根据微信授权用户的信息 进行下一步的梳理
     * @param $user_info
     */
    public function dealWithWxLogin($user_info){
        //TODO 数据处理
        var_dump($user_info);
        die;
    }
3.前端显示

根据官方文档的介绍,既可以直接访问授权扫码界面,也可以进行自定义设计,估计本人脑抽,嵌套登录扫码的功能整了半天也没实现,在此只好使用默认跳转。

前端入口

通过点击上图中的微信图标,直接跳转如下链接
https://open.weixin.qq.com/connect/qrconnect?appid=wxbd961b2a6b7b2963&redirect_uri=http%3A%2F%2Fwww.52zhenmi.com%2FHome%2FLogin%2FwxBack&response_type=code&scope=snsapi_login&state=204b244a5051207d1987a95f4a7e42c1#wechat_redirect

显示效果如下:

默认微信登录效果

扫描登录成功后进行页面跳转
测试结果如图

四、总结
  • 1.根据上面功能实现的最后,可以获取登录用户的信息,而其中的openID 和 UnionID 可存储数据库进行后期业务的处理.
  • 2.在下阐述能力有限,建议多参考官方开发文档,谷歌前辈的干货经验…
  • 3.网上看到一篇不错的文章,建议参考:微信公众号用户与网站用户的绑定方案
附录
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PHP网站中实现微信授权登录的步骤如下: 1. 注册微信开放平台账号并创建应用:首先,你需要在微信开放平台注册一个账号,并创建一个应用。在创建应用时,你会获得一个AppID和AppSecret,这些信息将用于后续的授权登录过程。 2. 引入微信登录SDK:在你的PHP网站中,你需要引入微信登录的SDK,以便使用微信提供的API进行授权登录操作。你可以通过Composer安装SDK,或者手动下载SDK并引入到你的项目中。 3. 获取授权链接:在用户点击微信登录按钮时,你需要生成一个授权链接,将用户重定向到该链接。授权链接的生成需要使用你在第一步中获得的AppID和回调URL。回调URL是用户授权后返回的页面,你需要在该页面中处理授权结果。 4. 用户授权登录:当用户点击授权链接后,会跳转到微信登录页面,用户需要输入微信账号密码并确认授权。一旦用户授权成功,微信会将授权结果返回到你在第三步中设置的回调URL。 5. 处理授权结果:在回调URL页面中,你需要解析微信返回的授权结果。授权结果中包含了用户的唯一标识OpenID和访问令牌Access Token。你可以使用这些信息来获取用户的基本信息,例如昵称、头像等。 6. 完成登录流程:根据你的业务需求,你可以将用户的微信信息保存到数据库中,或者直接使用该信息完成用户的登录流程。一旦用户完成登录,你可以在网站中展示用户的个人信息或提供个性化的服务。 下面是一个简单的PHP代码示例,演示了如何实现微信授权登录: ```php <?php require_once 'path/to/wechat-sdk/autoload.php'; use EasyWeChat\Factory; $config = [ 'app_id' => 'your-app-id', 'secret' => 'your-app-secret', 'oauth' => [ 'scopes' => ['snsapi_userinfo'], 'callback' => 'http://your-callback-url', ], ]; $app = Factory::officialAccount($config); $oauth = $app->oauth; // 生成授权链接 $redirectUrl = $oauth->redirect()->getTargetUrl(); // 将用户重定向到授权链接 header("Location: $redirectUrl"); exit; ?> ``` 请注意,上述代码中的`your-app-id`和`your-app-secret`需要替换为你在微信开放平台注册应用时获得的实际值,`http://your-callback-url`需要替换为你的回调URL。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值