扫描微信公众号登陆网站
注释:本文章是扫码关注公众号登陆网站的功能(给公众号拉粉丝)
首先申请微信公众号(类型为:‘服务号’),然后进行下面两条设置。
-
公众号设置ip白名单,就是把网站的ip填入白名单,在“基本配置”里面:
-
服务器推送链接填写,不管是关注公众号,还是给公众号发消息,微信服务器都会把相关的信息,推送到这个链接,相当于微信支付的回调函数(自己的理解…),在这个链接方法下处理自己的业务逻辑。
注意:如果网站启用了https,那么url就必须写https的
逻辑实现思路:
- 结合微信公众号开发文档去生成微信公众号的关注二维码,生成二维码时可自己定义一个唯一的场景值id。
- 用户扫码后场景值id会由微信服务器推送到前边配置的url链接,我们在url链接方法中把场景值id存入数据库(当然扫码后用户的信息如头像,昵称都可以获取到,利用这些信息我们直接就创建账号了)。
- 前端页面做轮询(两秒一次setIntval),监控数据库有没有相同的场景值id存在,监控到场景值id存在了,将场景值id关联的用户信息返回执行登录即可。
下面是代码实现部分,代码直接可以用。
1.首先在微信公众号配置的url链接要做验证,就是让微信服务器能够找到并准确的把信息推送给我们的url链接,我们好来处理业务逻辑,填写URL,填写TOKNE,TOKEN自己随便定义。
class sns{
const TOKEN='xxxx';//自己定义token,要填写入上图TOKEN位置
//处理业务逻辑的URL方法,这个方法的链接写入上方URL处
public function wei_get(){
// 任何情况下都应首先验证消息的合法性
if ($this->checkSignature(self::TOKEN) === true) {
if(isset($_GET['echostr'])){
// wechat 开启开发者模式接入时的认证
echo $_GET['echostr'];
}else {
//公众平台消息转发 业务处理
}
}
}
//验证方法
private function checkSignature(){
$signature = isset($_GET["signature"]) ? $_GET["signature"] : '';
$timestamp = isset($_GET["timestamp"]) ? $_GET["timestamp"] : '';
$nonce = isset($_GET["nonce"]) ? $_GET["nonce"] : '';
$tmpArr = array(self::TOKEN, $timestamp, $nonce);
sort($tmpArr);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
}