站点公告:
微信公众号liuprogramme

易牛网 主页 编程 PHP教程PHP开放平台

微信开发的扫码登录处理的步骤详解

简介
在现今很多网站里面,都使用了微信开放平台的扫码登录认证处理,这样做相当于把身份认证交给较为权威的第三方进行认证,在应用网站里面可以不需要存储用户的密码了。本篇介绍如何基于微信开放平台的扫码进行网站的登 ...
在现今很多网站里面,都使用了微信开放平台的扫码登录认证处理,这样做相当于把身份认证交给较为权威的第三方进行认证,在应用网站里面可以不需要存储用户的密码了。本篇介绍如何基于微信开放平台的扫码进行网站的登陆处理。

1、开放平台的认证

要使用网站的扫码登录处理,就需要先进行微信开放平台帐号的开发者资质认证,提交相关的资料,以及交付每年300元的认证费用。

上面的界面,就是在一个页面里面弹出一个层,然后请求二维码显示即可,如下界面代码所示。

        

扫描用户二维码,进行绑定

使用微信扫码进行绑定

关闭

上面的层在打开的时候,我们使用JS来动态获取二维码进行显示,具体JS代码如下所示。

    //绑定微信登陆function BindWechat() {        var url = "http://www.iqidi.com/H5/BindWechat?id=@Session["UserID"]";url = encodeURIComponent(url);        $("#imgQRcode").attr("src", "/H5/QR?url=" + url);        //打开绑定窗口$("#pWechat").dialog('open').dialog('setTitle', '使用微信扫码进行绑定');}

上面的JS只是做前端的数据请求和显示,具体的QR动作Action其实就是生成扫描二维码的过程,这个二维码其实就是采用通用的方式,来构建一个指向我们绑定账号的地址,从而实现我们绑定账号的判断,二维码的生成过程如下所示。

        /// /// 转换二维码连接为图片格式        /// /// 二维码连接///         [HttpGet]        public ActionResult QR(string url){            //初始化二维码生成工具QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;qrCodeEncoder.QRCodeVersion = 0;qrCodeEncoder.QRCodeScale = 4;            //将字符串生成二维码图片var image = qrCodeEncoder.Encode(url, Encoding.Default);            //保存为PNG到内存流  MemoryStream ms = new MemoryStream();image.Save(ms, ImageFormat.Png);image.Dispose();            return File(ms.ToArray(), "image/Png");}

为了实现用户的绑定,我们需要获取当前用户的身份信息,因此需要在BindWeChat的操作里面做一个转向处理,如下接口所示。

        /// /// 生成绑定微信的地址        /// /// public ActionResult BindWechat()

这个函数处理里面,我们需要重新定向处理,我们把它定向到BindAccount函数里面,方便获取用户的openid和其他必要的信息。

另外我们基于微信开放平台的应用,建立了一个和微信账号信息的联系,因此创建数据库信息如下所示。

也就是一个具体的开放平台应用对应着一个具体的微信账号,这样我们就可以充分利用配置进行处理了。

上面提到的BindAccount的处理的逻辑就是获取必要的信息,然后在数据库层面对身份信息进行验证,具体代码如下所示。

        /// /// 绑定用户微信号        /// /// 账号ID/// public ActionResult BindAccount(){WebAppInfo appInfo = GetWebApp(ConfigData.WebAppId);AccountInfo accountInfo = GetAccount(appInfo.AccountNo);            var htResult = GetOpenIdAndUnionId(accountInfo.UniteAppId, accountInfo.UniteAppSecret);//存储openid方便使用string openid = htResult["openid"].ToString();            var unionid = htResult["unionid"].ToString();            var userid = Request.QueryString["id"];            var state = Request.QueryString["state"];if (!string.IsNullOrEmpty(openid) && !string.IsNullOrEmpty(userid)){CommonResult result = BLLFactory.Instance.BindUser(openid, unionid, userid.ToInt32());                if (result.Success){                    return BindSuccess();}                else{                    return BindFail();}}            else{                throw new WeixinException("无法获取openid" + string.Format(", openid:{0}, userid:{1}", openid, userid));}}

在绑定的过程,我们需要考虑绑定正确账号,重复绑定其他账号,无效绑定几种情况,如果成功绑定正确账号(可多次处理结果一样),那么得到界面如下所示(这个界面的样式采用了weui的样式)。

这个和前面的二维码显示规则差不多,不过他们的连接地址是不同的,这个地方用到了开放平台的接口,也就是我们前面提到开放平台认证的接口了。

上面的扫码登录的界面代码如下所示。

    

关闭

上面代码需要引入JS文件,并使用微信JSSDK的API进行显示的。

        
扫码关注 PHP1 官方微信号
收藏 邀请

鲜花

握手

雷人

路过

鸡蛋

精彩阅读

精选资讯

推荐资讯

广告位

扫描二维码下载客户端

扫描,关注官方微信

联系我们

1399-7632910

24小时服务热线
客服QQ:834713287
市场部电话:13997632910

Archiver|手机版|小黑屋|Eaniu. ( 鄂ICP备17026225号 )

Powered by 易牛网 X3.4© 2016-2017 易牛门户 鄂ICP备17026225号 增值电信业务经营许可证:苏B2-20120251 公安机关备案号:苏32058202010001号 | 互联网新闻信息服务许可证编号:1312006002