<p>微信扫描登录申请及PHP实现方式方法摘抄自讯睿cms框架。</p><p>首先<span style="color: rgb(51, 51, 51);font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;background-color: rgb(255, 255, 255)">申请地址:</span><a href="https://open.weixin.qq.com/cgi-bin/frame?t=home/web_tmpl&lang=zh_CN" style="box-sizing: border-box;background-color: rgb(255, 255, 255);color: rgb(51, 122, 183);font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;white-space: normal">https://open.weixin.qq.com/cgi-bin/frame?t=home/web_tmpl&lang=zh_CN</a></p><p><img src="http://img.80zx.com/ueditor/image/202007/1595502618480786.jpg" title="1" alt="1"/></p><p><span style="color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: rgb(255, 255, 255);">填写网站信息</span></p><p><img src="http://img.80zx.com/ueditor/image/202007/1595502757a62608.jpg" title="2" alt="2"/></p><p><span style="color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: rgb(255, 255, 255);">回调域名填写网站主域名,不要填写http:</span></p><p><span style="color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: rgb(255, 255, 255);"><img src="http://img.80zx.com/ueditor/image/202007/1595502787fdca60.jpg" title="3" alt="3"/></span></p><p><span style="color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: rgb(255, 255, 255);"><span style="color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: rgb(255, 255, 255);">申请成功后得到key</span></span></p><p><span style="color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; background-color: rgb(255, 255, 255);"><img src="http://img.80zx.com/ueditor/image/202007/1595502818d43fac.jpg" title="4" alt="4"/></span></p><p><span style="color:#333333;font-family:Helvetica Neue, Helvetica, Arial, sans-serif"><span style="background-color: rgb(255, 255, 255);">后面就是代码的实现方式参考如下代码也是摘抄自讯睿cms框架插件代码</span></span></p><p><br/></p><pre style="background-color:#262e37;color:#ffffff;font-family:'Consolas';font-size:11.3pt;"><br/><span style="color:#f92672;">if </span>($action <span style="color:#f92672;">== </span><span style="color:#e6db74;">'callback'</span>) {<br/> <span style="color:#66837f;background-color:#191f26;">// </span><span style="color:#66837f;background-color:#191f26;font-family:'宋体';">表示回调返回</span><span style="color:#66837f;font-family:'宋体';"><br/></span><span style="color:#66837f;font-family:'宋体';"> </span><span style="color:#f92672;">if </span>(<span style="color:#f92672;">isset</span>($_REQUEST[<span style="color:#e6db74;">'code'</span>])) {<br/> <span style="color:#66837f;background-color:#191f26;">// </span><span style="color:#66837f;background-color:#191f26;font-family:'宋体';">获取</span><span style="color:#66837f;background-color:#191f26;">access_token</span><span style="color:#66837f;"><br/></span><span style="color:#66837f;"> </span><span style="color:#66837f;background-color:#191f26;">//</span><span style="color:#66837f;background-color:#191f26;font-family:'宋体';">通过</span><span style="color:#66837f;background-color:#191f26;">code</span><span style="color:#66837f;background-color:#191f26;font-family:'宋体';">获取</span><span style="color:#66837f;background-color:#191f26;">access_token</span><span style="color:#66837f;"><br/></span><span style="color:#66837f;"> </span>$url <span style="color:#f92672;">= </span><span style="color:#e6db74;">'https://api.weixin.qq.com/sns/oauth2/access_token?appid='</span><span style="color:#f92672;">.</span>$appid<span style="color:#f92672;">.</span><span style="color:#e6db74;">'&secret='</span><span style="color:#f92672;">.</span>$appkey<span style="color:#f92672;">.</span><span style="color:#e6db74;">'&code='</span><span style="color:#f92672;">.</span>$_REQUEST[<span style="color:#e6db74;">'code'</span>]<span style="color:#f92672;">.</span><span style="color:#e6db74;">'&grant_type=authorization_code'</span>;<br/> <span style="color:#486460;background-color:#222930;">/**<br/></span><span style="color:#486460;background-color:#222930;"> </span><span style="color:#486460;background-color:#222930;font-family:'宋体';">正确的返回:<br/></span><span style="color:#486460;background-color:#222930;font-family:'宋体';"> </span><span style="color:#486460;background-color:#222930;">{<br/></span><span style="color:#486460;background-color:#222930;"> "access_token":"ACCESS_TOKEN",<br/></span><span style="color:#486460;background-color:#222930;"> "expires_in":7200,<br/></span><span style="color:#486460;background-color:#222930;"> "refresh_token":"REFRESH_TOKEN",<br/></span><span style="color:#486460;background-color:#222930;"> "openid":"OPENID",<br/></span><span style="color:#486460;background-color:#222930;"> "scope":"SCOPE",<br/></span><span style="color:#486460;background-color:#222930;"> "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"<br/></span><span style="color:#486460;background-color:#222930;"> }<br/></span><span style="color:#486460;background-color:#222930;"> **/</span><span style="color:#486460;"><br/></span><span style="color:#486460;"> </span>$token <span style="color:#f92672;">= </span><span style="color:#66d9ef;font-style:italic;">json_decode</span>(<span style="color:#a6e22e;">dr_catcher_data</span>($url), <span style="color:#f92672;">true</span>);<br/> <span style="color:#f92672;">if </span>(<span style="color:#f92672;">!</span>$token) {<br/> $this<span style="color:#f92672;">-></span><span style="color:#a6e22e;">_msg</span>(<span style="color:#ae81ff;">0</span>, <span style="color:#a6e22e;">dr_lang</span>(<span style="color:#e6db74;">'</span><span style="color:#e6db74;font-family:'宋体';">无法获取到远程信息</span><span style="color:#e6db74;">'</span>));<br/> } <span style="color:#f92672;">elseif </span>($token[<span style="color:#e6db74;">'errmsg'</span>]) {<br/> $this<span style="color:#f92672;">-></span><span style="color:#a6e22e;">_msg</span>(<span style="color:#ae81ff;">0</span>, $token[<span style="color:#e6db74;">'errmsg'</span>]);<br/> }<br/> <span style="color:#66837f;background-color:#191f26;">// </span><span style="color:#66837f;background-color:#191f26;font-family:'宋体';">获取用户信息</span><span style="color:#66837f;font-family:'宋体';"><br/></span><span style="color:#66837f;font-family:'宋体';"> </span><span style="color:#66837f;background-color:#191f26;">//</span><span style="color:#66837f;background-color:#191f26;font-family:'宋体';">参考</span><span style="color:#66837f;background-color:#191f26;">https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Authorized_Interface_Calling_UnionID.html</span><span style="color:#66837f;"><br/></span><span style="color:#66837f;"> </span>$url <span style="color:#f92672;">= </span><span style="color:#e6db74;">'https://api.weixin.qq.com/sns/userinfo?access_token='</span><span style="color:#f92672;">.</span>$token[<span style="color:#e6db74;">'access_token'</span>]<span style="color:#f92672;">.</span><span style="color:#e6db74;">'&openid='</span><span style="color:#f92672;">.</span>$token[<span style="color:#e6db74;">'openid'</span>];<br/> <span style="color:#486460;background-color:#222930;">/**<br/></span><span style="color:#486460;background-color:#222930;"> </span><span style="color:#486460;background-color:#222930;font-family:'宋体';">正确的</span><span style="color:#486460;background-color:#222930;">Json</span><span style="color:#486460;background-color:#222930;font-family:'宋体';">返回结果:<br/></span><span style="color:#486460;background-color:#222930;font-family:'宋体';"> </span><span style="color:#486460;background-color:#222930;">{<br/></span><span style="color:#486460;background-color:#222930;"> "openid":"OPENID",<br/></span><span style="color:#486460;background-color:#222930;"> "nickname":"NICKNAME",<br/></span><span style="color:#486460;background-color:#222930;"> "sex":1,<br/></span><span style="color:#486460;background-color:#222930;"> "province":"PROVINCE",<br/></span><span style="color:#486460;background-color:#222930;"> "city":"CITY",<br/></span><span style="color:#486460;background-color:#222930;"> "country":"COUNTRY",<br/></span><span style="color:#486460;background-color:#222930;"> "headimgurl": "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0",<br/></span><span style="color:#486460;background-color:#222930;"> "privilege":[<br/></span><span style="color:#486460;background-color:#222930;"> "PRIVILEGE1",<br/></span><span style="color:#486460;background-color:#222930;"> "PRIVILEGE2"<br/></span><span style="color:#486460;background-color:#222930;"> ],<br/></span><span style="color:#486460;background-color:#222930;"> "unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"<br/></span><span style="color:#486460;background-color:#222930;"> }<br/></span><span style="color:#486460;background-color:#222930;"> </span><span style="color:#486460;background-color:#222930;font-family:'宋体';">有人用户信息后面就是插入会员信息或做绑定处理了<br/></span><span style="color:#486460;background-color:#222930;font-family:'宋体';"> </span><span style="color:#486460;background-color:#222930;">**/</span><span style="color:#486460;"><br/></span><span style="color:#486460;"> </span>$user <span style="color:#f92672;">= </span><span style="color:#66d9ef;font-style:italic;">json_decode</span>(<span style="color:#a6e22e;">dr_catcher_data</span>($url), <span style="color:#f92672;">true</span>);<br/> <span style="color:#f92672;">if </span>(<span style="color:#f92672;">!</span>$user) {<br/> $this<span style="color:#f92672;">-></span><span style="color:#a6e22e;">_msg</span>(<span style="color:#ae81ff;">0</span>, <span style="color:#a6e22e;">dr_lang</span>(<span style="color:#e6db74;">'</span><span style="color:#e6db74;font-family:'宋体';">无法获取到用户信息</span><span style="color:#e6db74;">'</span>));<br/> } <span style="color:#f92672;">elseif </span>($user[<span style="color:#e6db74;">'errmsg'</span>]) {<br/> $this<span style="color:#f92672;">-></span><span style="color:#a6e22e;">_msg</span>(<span style="color:#ae81ff;">0</span>, $user[<span style="color:#e6db74;">'errmsg'</span>]);<br/> }<br/> $rt <span style="color:#f92672;">= </span>\<span style="color:#f57dac;">Phpcmf</span>\<span style="color:#e1e1e1;">Service</span><span style="color:#f92672;">::</span><span style="color:#a6e22e;">M</span>(<span style="color:#e6db74;">'member'</span>)<span style="color:#f92672;">-></span><span style="color:#a6e22e;">insert_oauth</span>($this<span style="color:#f92672;">-></span><span style="color:#660e7a;font-weight:bold;">uid</span>, $type, [<br/> <span style="color:#e6db74;">'oid' </span><span style="color:#f92672;">=> </span>$token[<span style="color:#e6db74;">'openid'</span>],<br/> <span style="color:#e6db74;">'oauth' </span><span style="color:#f92672;">=> </span><span style="color:#e6db74;">'weixin'</span>,<br/> <span style="color:#e6db74;">'avatar' </span><span style="color:#f92672;">=> </span>$user[<span style="color:#e6db74;">'headimgurl'</span>],<br/> <span style="color:#e6db74;">'unionid' </span><span style="color:#f92672;">=> (string)</span>$user[<span style="color:#e6db74;">'unionid'</span>],<br/> <span style="color:#e6db74;">'nickname' </span><span style="color:#f92672;">=> </span><span style="color:#a6e22e;">dr_emoji2html</span>($user[<span style="color:#e6db74;">'nickname'</span>]),<br/> <span style="color:#e6db74;">'expire_at' </span><span style="color:#f92672;">=> </span><span style="color:#660e7a;font-weight:bold;font-style:italic;">SYS_TIME</span>,<br/> <span style="color:#e6db74;">'access_token' </span><span style="color:#f92672;">=> </span><span style="color:#ae81ff;">0</span>,<br/> <span style="color:#e6db74;">'refresh_token' </span><span style="color:#f92672;">=> </span>$token[<span style="color:#e6db74;">'refresh_token'</span>],<br/> ], <span style="color:#f92672;">null</span>, $back);<br/> <span style="color:#f92672;">if </span>(<span style="color:#f92672;">!</span>$rt[<span style="color:#e6db74;">'code'</span>]) {<br/> $this<span style="color:#f92672;">-></span><span style="color:#a6e22e;">_msg</span>(<span style="color:#ae81ff;">0</span>, $rt[<span style="color:#e6db74;">'msg'</span>]);<span style="color:#f92672;">exit</span>;<br/> } <span style="color:#f92672;">else </span>{<br/> <span style="color:#a6e22e;">dr_redirect</span>($rt[<span style="color:#e6db74;">'msg'</span>]);<br/> }<br/> } <span style="color:#f92672;">else </span>{<br/> $this<span style="color:#f92672;">-></span><span style="color:#a6e22e;">_msg</span>(<span style="color:#ae81ff;">0</span>, <span style="color:#a6e22e;">dr_lang</span>(<span style="color:#e6db74;">'</span><span style="color:#e6db74;font-family:'宋体';">回调参数</span><span style="color:#e6db74;">code</span><span style="color:#e6db74;font-family:'宋体';">不存在</span><span style="color:#e6db74;">'</span>));<span style="color:#f92672;">exit</span>;<br/> }<br/>} <span style="color:#f92672;">else </span>{<br/> <span style="color:#66837f;background-color:#191f26;">// </span><span style="color:#66837f;background-color:#191f26;font-family:'宋体';">跳转授权页面</span><span style="color:#66837f;font-family:'宋体';"><br/></span><span style="color:#66837f;font-family:'宋体';"> </span><span style="color:#66837f;background-color:#191f26;">//</span><span style="color:#66837f;background-color:#191f26;font-family:'宋体';">参考</span><span style="color:#66837f;background-color:#191f26;">https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html</span><span style="color:#66837f;"><br/></span><span style="color:#66837f;"> </span>$url <span style="color:#f92672;">= </span><span style="color:#e6db74;">'https://open.weixin.qq.com/connect/qrconnect?appid='</span><span style="color:#f92672;">.</span>$appid<span style="color:#f92672;">.</span><span style="color:#e6db74;">'&redirect_uri='</span><span style="color:#f92672;">.</span><span style="color:#66d9ef;font-style:italic;">urlencode</span>($callback_url)<span style="color:#f92672;">.</span><span style="color:#e6db74;">'&response_type=code&scope=snsapi_login&state=STATE#wechat_redirect'</span>;<br/> <span style="color:#66837f;background-color:#191f26;">//</span><span style="color:#66837f;background-color:#191f26;font-family:'宋体';">返回说明</span><span style="color:#66837f;font-family:'宋体';"><br/></span><span style="color:#66837f;font-family:'宋体';"> </span><span style="color:#66837f;background-color:#191f26;">//</span><span style="color:#66837f;background-color:#191f26;font-family:'宋体';">用户允许授权后,将会重定向到</span><span style="color:#66837f;background-color:#191f26;">redirect_uri</span><span style="color:#66837f;background-color:#191f26;font-family:'宋体';">的网址上,并且带上</span><span style="color:#66837f;background-color:#191f26;">code</span><span style="color:#66837f;background-color:#191f26;font-family:'宋体';">和</span><span style="color:#66837f;background-color:#191f26;">state</span><span style="color:#66837f;background-color:#191f26;font-family:'宋体';">参数</span><span style="color:#66837f;font-family:'宋体';"><br/></span><span style="color:#66837f;font-family:'宋体';"> </span><span style="color:#66837f;background-color:#191f26;">//redirect_uri?code=CODE&state=STATE</span><span style="color:#66837f;"><br/></span><span style="color:#66837f;"> </span><span style="color:#66837f;background-color:#191f26;">//</span><span style="color:#66837f;background-color:#191f26;font-family:'宋体';">若用户禁止授权,则重定向后不会带上</span><span style="color:#66837f;background-color:#191f26;">code</span><span style="color:#66837f;background-color:#191f26;font-family:'宋体';">参数,仅会带上</span><span style="color:#66837f;background-color:#191f26;">state</span><span style="color:#66837f;background-color:#191f26;font-family:'宋体';">参数</span><span style="color:#66837f;font-family:'宋体';"><br/></span><span style="color:#66837f;font-family:'宋体';"> </span><span style="color:#66837f;background-color:#191f26;">//redirect_uri?state=STATE</span><span style="color:#66837f;"><br/></span><span style="color:#66837f;"> </span><span style="color:#a6e22e;">dr_redirect</span>($url);<br/>}</pre><p><span style="color:#333333;font-family:Helvetica Neue, Helvetica, Arial, sans-serif"><span style="background-color: rgb(255, 255, 255);"></span></span><br/></p>
登录微信公众号平台https://mp.weixin.qq.com打开设置与开发》账号设置》功能设置,设置网页授权域名,参考如下图