微信扫描登录申请及PHP实现方式

      发布在:后端技术      评论:0 条评论
<p>微信扫描登录申请及PHP实现方式方法摘抄自讯睿cms框架。</p><p>首先<span style="color: rgb(51, 51, 51);font-family: &#39;Helvetica Neue&#39;, 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: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif;white-space: normal">https://open.weixin.qq.com/cgi-bin/frame?t=home/web_tmpl&amp;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: &quot;Helvetica Neue&quot;, 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: &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; background-color: rgb(255, 255, 255);">回调域名填写网站主域名,不要填写http:</span></p><p><span style="color: rgb(51, 51, 51); font-family: &quot;Helvetica Neue&quot;, 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: &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; background-color: rgb(255, 255, 255);"><span style="color: rgb(51, 51, 51); font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; background-color: rgb(255, 255, 255);">申请成功后得到key</span></span></p><p><span style="color: rgb(51, 51, 51); font-family: &quot;Helvetica Neue&quot;, 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:&#39;Consolas&#39;;font-size:11.3pt;"><br/><span style="color:#f92672;">if </span>($action <span style="color:#f92672;">== </span><span style="color:#e6db74;">&#39;callback&#39;</span>) {<br/> <span style="color:#66837f;background-color:#191f26;">// </span><span style="color:#66837f;background-color:#191f26;font-family:&#39;宋体&#39;;">表示回调返回</span><span style="color:#66837f;font-family:&#39;宋体&#39;;"><br/></span><span style="color:#66837f;font-family:&#39;宋体&#39;;"> &nbsp; &nbsp;</span><span style="color:#f92672;">if </span>(<span style="color:#f92672;">isset</span>($_REQUEST[<span style="color:#e6db74;">&#39;code&#39;</span>])) {<br/> <span style="color:#66837f;background-color:#191f26;">// </span><span style="color:#66837f;background-color:#191f26;font-family:&#39;宋体&#39;;">获取</span><span style="color:#66837f;background-color:#191f26;">access_token</span><span style="color:#66837f;"><br/></span><span style="color:#66837f;"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color:#66837f;background-color:#191f26;">//</span><span style="color:#66837f;background-color:#191f26;font-family:&#39;宋体&#39;;">通过</span><span style="color:#66837f;background-color:#191f26;">code</span><span style="color:#66837f;background-color:#191f26;font-family:&#39;宋体&#39;;">获取</span><span style="color:#66837f;background-color:#191f26;">access_token</span><span style="color:#66837f;"><br/></span><span style="color:#66837f;"> &nbsp; &nbsp; &nbsp; &nbsp;</span>$url <span style="color:#f92672;">= </span><span style="color:#e6db74;">&#39;https://api.weixin.qq.com/sns/oauth2/access_token?appid=&#39;</span><span style="color:#f92672;">.</span>$appid<span style="color:#f92672;">.</span><span style="color:#e6db74;">&#39;&amp;secret=&#39;</span><span style="color:#f92672;">.</span>$appkey<span style="color:#f92672;">.</span><span style="color:#e6db74;">&#39;&amp;code=&#39;</span><span style="color:#f92672;">.</span>$_REQUEST[<span style="color:#e6db74;">&#39;code&#39;</span>]<span style="color:#f92672;">.</span><span style="color:#e6db74;">&#39;&amp;grant_type=authorization_code&#39;</span>;<br/> <span style="color:#486460;background-color:#222930;">/**<br/></span><span style="color:#486460;background-color:#222930;"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color:#486460;background-color:#222930;font-family:&#39;宋体&#39;;">正确的返回:<br/></span><span style="color:#486460;background-color:#222930;font-family:&#39;宋体&#39;;"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color:#486460;background-color:#222930;">{<br/></span><span style="color:#486460;background-color:#222930;"> &nbsp; &nbsp; &nbsp; &nbsp;&quot;access_token&quot;:&quot;ACCESS_TOKEN&quot;,<br/></span><span style="color:#486460;background-color:#222930;"> &nbsp; &nbsp; &nbsp; &nbsp;&quot;expires_in&quot;:7200,<br/></span><span style="color:#486460;background-color:#222930;"> &nbsp; &nbsp; &nbsp; &nbsp;&quot;refresh_token&quot;:&quot;REFRESH_TOKEN&quot;,<br/></span><span style="color:#486460;background-color:#222930;"> &nbsp; &nbsp; &nbsp; &nbsp;&quot;openid&quot;:&quot;OPENID&quot;,<br/></span><span style="color:#486460;background-color:#222930;"> &nbsp; &nbsp; &nbsp; &nbsp;&quot;scope&quot;:&quot;SCOPE&quot;,<br/></span><span style="color:#486460;background-color:#222930;"> &nbsp; &nbsp; &nbsp; &nbsp;&quot;unionid&quot;: &quot;o6_bmasdasdsad6_2sgVt7hMZOPfL&quot;<br/></span><span style="color:#486460;background-color:#222930;"> &nbsp; &nbsp; &nbsp; &nbsp;}<br/></span><span style="color:#486460;background-color:#222930;"> &nbsp; &nbsp; &nbsp; &nbsp; **/</span><span style="color:#486460;"><br/></span><span style="color:#486460;"> &nbsp; &nbsp; &nbsp; &nbsp;</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;">-&gt;</span><span style="color:#a6e22e;">_msg</span>(<span style="color:#ae81ff;">0</span>, <span style="color:#a6e22e;">dr_lang</span>(<span style="color:#e6db74;">&#39;</span><span style="color:#e6db74;font-family:&#39;宋体&#39;;">无法获取到远程信息</span><span style="color:#e6db74;">&#39;</span>));<br/> } <span style="color:#f92672;">elseif </span>($token[<span style="color:#e6db74;">&#39;errmsg&#39;</span>]) {<br/> $this<span style="color:#f92672;">-&gt;</span><span style="color:#a6e22e;">_msg</span>(<span style="color:#ae81ff;">0</span>, $token[<span style="color:#e6db74;">&#39;errmsg&#39;</span>]);<br/> }<br/> <span style="color:#66837f;background-color:#191f26;">// </span><span style="color:#66837f;background-color:#191f26;font-family:&#39;宋体&#39;;">获取用户信息</span><span style="color:#66837f;font-family:&#39;宋体&#39;;"><br/></span><span style="color:#66837f;font-family:&#39;宋体&#39;;"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color:#66837f;background-color:#191f26;">//</span><span style="color:#66837f;background-color:#191f26;font-family:&#39;宋体&#39;;">参考</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;"> &nbsp; &nbsp; &nbsp; &nbsp;</span>$url <span style="color:#f92672;">= </span><span style="color:#e6db74;">&#39;https://api.weixin.qq.com/sns/userinfo?access_token=&#39;</span><span style="color:#f92672;">.</span>$token[<span style="color:#e6db74;">&#39;access_token&#39;</span>]<span style="color:#f92672;">.</span><span style="color:#e6db74;">&#39;&amp;openid=&#39;</span><span style="color:#f92672;">.</span>$token[<span style="color:#e6db74;">&#39;openid&#39;</span>];<br/> <span style="color:#486460;background-color:#222930;">/**<br/></span><span style="color:#486460;background-color:#222930;"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color:#486460;background-color:#222930;font-family:&#39;宋体&#39;;">正确的</span><span style="color:#486460;background-color:#222930;">Json</span><span style="color:#486460;background-color:#222930;font-family:&#39;宋体&#39;;">返回结果:<br/></span><span style="color:#486460;background-color:#222930;font-family:&#39;宋体&#39;;"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color:#486460;background-color:#222930;">{<br/></span><span style="color:#486460;background-color:#222930;"> &nbsp; &nbsp; &nbsp; &nbsp;&quot;openid&quot;:&quot;OPENID&quot;,<br/></span><span style="color:#486460;background-color:#222930;"> &nbsp; &nbsp; &nbsp; &nbsp;&quot;nickname&quot;:&quot;NICKNAME&quot;,<br/></span><span style="color:#486460;background-color:#222930;"> &nbsp; &nbsp; &nbsp; &nbsp;&quot;sex&quot;:1,<br/></span><span style="color:#486460;background-color:#222930;"> &nbsp; &nbsp; &nbsp; &nbsp;&quot;province&quot;:&quot;PROVINCE&quot;,<br/></span><span style="color:#486460;background-color:#222930;"> &nbsp; &nbsp; &nbsp; &nbsp;&quot;city&quot;:&quot;CITY&quot;,<br/></span><span style="color:#486460;background-color:#222930;"> &nbsp; &nbsp; &nbsp; &nbsp;&quot;country&quot;:&quot;COUNTRY&quot;,<br/></span><span style="color:#486460;background-color:#222930;"> &nbsp; &nbsp; &nbsp; &nbsp;&quot;headimgurl&quot;: &quot;http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0&quot;,<br/></span><span style="color:#486460;background-color:#222930;"> &nbsp; &nbsp; &nbsp; &nbsp;&quot;privilege&quot;:[<br/></span><span style="color:#486460;background-color:#222930;"> &nbsp; &nbsp; &nbsp; &nbsp;&quot;PRIVILEGE1&quot;,<br/></span><span style="color:#486460;background-color:#222930;"> &nbsp; &nbsp; &nbsp; &nbsp;&quot;PRIVILEGE2&quot;<br/></span><span style="color:#486460;background-color:#222930;"> &nbsp; &nbsp; &nbsp; &nbsp;],<br/></span><span style="color:#486460;background-color:#222930;"> &nbsp; &nbsp; &nbsp; &nbsp;&quot;unionid&quot;: &quot; o6_bmasdasdsad6_2sgVt7hMZOPfL&quot;<br/></span><span style="color:#486460;background-color:#222930;"> &nbsp; &nbsp; &nbsp; &nbsp;}<br/></span><span style="color:#486460;background-color:#222930;"> &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color:#486460;background-color:#222930;font-family:&#39;宋体&#39;;">有人用户信息后面就是插入会员信息或做绑定处理了<br/></span><span style="color:#486460;background-color:#222930;font-family:&#39;宋体&#39;;"> &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color:#486460;background-color:#222930;">**/</span><span style="color:#486460;"><br/></span><span style="color:#486460;"> &nbsp; &nbsp; &nbsp; &nbsp;</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;">-&gt;</span><span style="color:#a6e22e;">_msg</span>(<span style="color:#ae81ff;">0</span>, <span style="color:#a6e22e;">dr_lang</span>(<span style="color:#e6db74;">&#39;</span><span style="color:#e6db74;font-family:&#39;宋体&#39;;">无法获取到用户信息</span><span style="color:#e6db74;">&#39;</span>));<br/> } <span style="color:#f92672;">elseif </span>($user[<span style="color:#e6db74;">&#39;errmsg&#39;</span>]) {<br/> $this<span style="color:#f92672;">-&gt;</span><span style="color:#a6e22e;">_msg</span>(<span style="color:#ae81ff;">0</span>, $user[<span style="color:#e6db74;">&#39;errmsg&#39;</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;">&#39;member&#39;</span>)<span style="color:#f92672;">-&gt;</span><span style="color:#a6e22e;">insert_oauth</span>($this<span style="color:#f92672;">-&gt;</span><span style="color:#660e7a;font-weight:bold;">uid</span>, $type, [<br/> <span style="color:#e6db74;">&#39;oid&#39; </span><span style="color:#f92672;">=&gt; </span>$token[<span style="color:#e6db74;">&#39;openid&#39;</span>],<br/> <span style="color:#e6db74;">&#39;oauth&#39; </span><span style="color:#f92672;">=&gt; </span><span style="color:#e6db74;">&#39;weixin&#39;</span>,<br/> <span style="color:#e6db74;">&#39;avatar&#39; </span><span style="color:#f92672;">=&gt; </span>$user[<span style="color:#e6db74;">&#39;headimgurl&#39;</span>],<br/> <span style="color:#e6db74;">&#39;unionid&#39; </span><span style="color:#f92672;">=&gt; (string)</span>$user[<span style="color:#e6db74;">&#39;unionid&#39;</span>],<br/> <span style="color:#e6db74;">&#39;nickname&#39; </span><span style="color:#f92672;">=&gt; </span><span style="color:#a6e22e;">dr_emoji2html</span>($user[<span style="color:#e6db74;">&#39;nickname&#39;</span>]),<br/> <span style="color:#e6db74;">&#39;expire_at&#39; </span><span style="color:#f92672;">=&gt; </span><span style="color:#660e7a;font-weight:bold;font-style:italic;">SYS_TIME</span>,<br/> <span style="color:#e6db74;">&#39;access_token&#39; </span><span style="color:#f92672;">=&gt; </span><span style="color:#ae81ff;">0</span>,<br/> <span style="color:#e6db74;">&#39;refresh_token&#39; </span><span style="color:#f92672;">=&gt; </span>$token[<span style="color:#e6db74;">&#39;refresh_token&#39;</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;">&#39;code&#39;</span>]) {<br/> $this<span style="color:#f92672;">-&gt;</span><span style="color:#a6e22e;">_msg</span>(<span style="color:#ae81ff;">0</span>, $rt[<span style="color:#e6db74;">&#39;msg&#39;</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;">&#39;msg&#39;</span>]);<br/> }<br/> } <span style="color:#f92672;">else </span>{<br/> $this<span style="color:#f92672;">-&gt;</span><span style="color:#a6e22e;">_msg</span>(<span style="color:#ae81ff;">0</span>, <span style="color:#a6e22e;">dr_lang</span>(<span style="color:#e6db74;">&#39;</span><span style="color:#e6db74;font-family:&#39;宋体&#39;;">回调参数</span><span style="color:#e6db74;">code</span><span style="color:#e6db74;font-family:&#39;宋体&#39;;">不存在</span><span style="color:#e6db74;">&#39;</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:&#39;宋体&#39;;">跳转授权页面</span><span style="color:#66837f;font-family:&#39;宋体&#39;;"><br/></span><span style="color:#66837f;font-family:&#39;宋体&#39;;"> &nbsp; &nbsp;</span><span style="color:#66837f;background-color:#191f26;">//</span><span style="color:#66837f;background-color:#191f26;font-family:&#39;宋体&#39;;">参考</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;"> &nbsp; &nbsp;</span>$url <span style="color:#f92672;">= </span><span style="color:#e6db74;">&#39;https://open.weixin.qq.com/connect/qrconnect?appid=&#39;</span><span style="color:#f92672;">.</span>$appid<span style="color:#f92672;">.</span><span style="color:#e6db74;">&#39;&amp;redirect_uri=&#39;</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;">&#39;&amp;response_type=code&amp;scope=snsapi_login&amp;state=STATE#wechat_redirect&#39;</span>;<br/> <span style="color:#66837f;background-color:#191f26;">//</span><span style="color:#66837f;background-color:#191f26;font-family:&#39;宋体&#39;;">返回说明</span><span style="color:#66837f;font-family:&#39;宋体&#39;;"><br/></span><span style="color:#66837f;font-family:&#39;宋体&#39;;"> &nbsp; &nbsp;</span><span style="color:#66837f;background-color:#191f26;">//</span><span style="color:#66837f;background-color:#191f26;font-family:&#39;宋体&#39;;">用户允许授权后,将会重定向到</span><span style="color:#66837f;background-color:#191f26;">redirect_uri</span><span style="color:#66837f;background-color:#191f26;font-family:&#39;宋体&#39;;">的网址上,并且带上</span><span style="color:#66837f;background-color:#191f26;">code</span><span style="color:#66837f;background-color:#191f26;font-family:&#39;宋体&#39;;">和</span><span style="color:#66837f;background-color:#191f26;">state</span><span style="color:#66837f;background-color:#191f26;font-family:&#39;宋体&#39;;">参数</span><span style="color:#66837f;font-family:&#39;宋体&#39;;"><br/></span><span style="color:#66837f;font-family:&#39;宋体&#39;;"> &nbsp; &nbsp;</span><span style="color:#66837f;background-color:#191f26;">//redirect_uri?code=CODE&amp;state=STATE</span><span style="color:#66837f;"><br/></span><span style="color:#66837f;"> &nbsp; &nbsp;</span><span style="color:#66837f;background-color:#191f26;">//</span><span style="color:#66837f;background-color:#191f26;font-family:&#39;宋体&#39;;">若用户禁止授权,则重定向后不会带上</span><span style="color:#66837f;background-color:#191f26;">code</span><span style="color:#66837f;background-color:#191f26;font-family:&#39;宋体&#39;;">参数,仅会带上</span><span style="color:#66837f;background-color:#191f26;">state</span><span style="color:#66837f;background-color:#191f26;font-family:&#39;宋体&#39;;">参数</span><span style="color:#66837f;font-family:&#39;宋体&#39;;"><br/></span><span style="color:#66837f;font-family:&#39;宋体&#39;;"> &nbsp; &nbsp;</span><span style="color:#66837f;background-color:#191f26;">//redirect_uri?state=STATE</span><span style="color:#66837f;"><br/></span><span style="color:#66837f;"> &nbsp; &nbsp;</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>
热门推荐