微信公众号菜单openid 点击菜单便可打开并登陆微站

如今大部分微站都经过用户的微信openid来实现自动登陆。在我以前的开发中,用户经过点击一个菜单,公众号返回一个图文,用户点击这个图文才能够自动登陆微站。可是若是你拥有高级接口,就能够实现点击菜单,打开网页就能获取这个openid,实现自动登陆。php

这里已经提到,必需要拥有高级接口的权限(服务号、企业号),开启了开发者模式。html

1.设置回调地址

在微信公众平台后台“开发者中心”中找到“高级接口”下的“OAuth2.0网页受权”,后面有一个“修改”,点击以后就会弹出填写回调地址的对话框。具体如何受权,请点击这里学习。只有得到高级接口权限后,才能出现这个地方的“修改”。json

注意,这里填写的是域名,不是带http://的网址,并且解释中很清楚,“受权回调域名配置规范为全域名”,也就是说带www和不带是不一样的两个域名。所以我这里要填写以下图中的域名。api

2014-10-31-232011

2. 建立菜单

建立菜单能够经过你的微站后台建立,若是没有开启开发者模式,也能够经过微信公众平台后台建立。微信

菜单使用点击打开连接的模式,也就是view模式。若是你是使用开发者模式,经过向微信提交以下代码,便可建立公众号菜单(开发者文档):app

 {
     "button":[
     {	
          "type":"view",
          "name":"登陆微站",
          "url":"https://open.weixin.qq.com/connect/oauth2/authorize?appid={在微信公众平台后台获取这个APPID}&redirect_uri={你填写的回调域名下的地址}&response_type=code&scope=snsapi_base&state=1#wechat_redirect"
      }]
 }

代码1 要提交的菜单代码,下面要用到微信公众平台

APPID的获取位置就是上面你填写回调地址的那个“开发者中心”。下面咱们用PHP来实现一下菜单提交:curl

<?php
function curl_info($appid,$secret) {
  $ch = curl_init(); 
  curl_setopt($ch, CURLOPT_URL, "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$secret);
  curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
  curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt($ch, CURLOPT_AUTOREFERER, 1); 
  // curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
  $tmpInfo = curl_exec($ch); 
  if (curl_errno($ch)) {  
    echo 'Errno'.curl_error($ch);
  }
  curl_close($ch); 
  $arr= json_decode($tmpInfo,true);
  return $arr;
}
function curl_menu($ACCESS_TOKEN,$data) {
  $ch = curl_init(); 
  curl_setopt($ch, CURLOPT_URL, "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$ACCESS_TOKEN); 
  curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
  curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt($ch, CURLOPT_AUTOREFERER, 1); 
  curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
  $tmpInfo = curl_exec($ch); 
  if (curl_errno($ch)) {
    echo 'Errno'.curl_error($ch);
  }
  curl_close($ch); 
  $arr= json_decode($tmpInfo,true);
  return $arr;
}
function creat_menu() {
  $ACCESS_LIST= curl_info(APP_ID,APP_SCR);//获取到的凭证,你须要本身define APP_ID和APP_SCR(应用密钥),这个也是在微信公众平台后台开发者中心找
  if($ACCESS_LIST['access_token']!='') {
    $access_token = $ACCESS_LIST['access_token'];//获取到ACCESS_TOKEN
    $data = '把上面代码1拷贝黏贴在这里';
    $msg = curl_menu($access_token,preg_replace("#\\\u([0-9a-f]+)#ie", "iconv('UCS-2', 'UTF-8', pack('H4', '\\1'))", $data));
    if($msg['errmsg']=='ok') {
      die('建立自定义菜单成功!');
    }
    else {
      die('建立自定义菜单失败!');
    }
  }
  else {
    die('建立失败,微信AppId或微信AppSecret填写错误');
  }
}
create_menu();
?>

代码2 用PHP来建立微信公众号菜单post

代码2其实有点冗余了,核心部分用红色标出来了。就这样,你的微信公众号中应该很快就能够看到建立了一个“登陆微站”的菜单。点击这个菜单就能够实现登陆微站了。学习

若是你不须要PHP,能够直接在微信公众平台后台的菜单自定义中写连接就能够了。

2014-11-01-000630

在上图中的这个地方,选择打开连接的方式建立菜单。OK,接下来把上面那个连接放进去:

https://open.weixin.qq.com/connect/oauth2/authorize?appid={在微信公众平台后台获取这个APPID}&redirect_uri={你填写的回调域名下的地址}&response_type=code&scope=snsapi_base&state=1#wechat_redirect

建立菜单就能够了。

固然,你也有可能只须要在你本身的微信管理后台加入这个连接就能够了。

3.在回调页获取openid

细心的你可能已经发现了,上面的连接地址中含有参数scope=snsapi_base,而非scope=snsapi_userinfo, 由于使用前者不须要用户点击一个受权按钮,直接跳转到回调页面,然后者须要点击受权按钮,不过点击受权按钮有好处,一是能够在没有关注公众号的状况下也可 以受权,二是受权后能够得到用户的一些信息,如昵称、性别、所在地。可是咱们是为了利用openid进行登陆,因此直接选择前者就能够了。

点击菜单以后,通过微信authorize的处理,会跳转到你提交的回调地址(这里须要提醒,回调地址最好不要带参数,例如xxx/?callback=from_weixin,由于微信跳转到你的回调地址也要带参数,而这个参数就你须要的)。微信跳转到以下URL:

回调地址/?code=CODE&state=1

上面代码能够经过$_GET['code']得到一个CODE值,利用这个CODE值和appid,能够得到openid和access_token。

下面再用PHP来实现如下:

if($_GET['code']) {
  $code = $_GET['code'];
  $data = get_by_curl('https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=APPSRC&code='.$code.'&grant_type=authorization_code');
  $data = json_decode($data);
  $openid = $data->openid;
  $access_token = $data->access_token;
}

function get_by_curl($url,$post = false){
    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    if($post){
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS,$post);
    }
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
}

这样能够就能够得到openid和access_token,利用这些值,咱们还能够利用微信公众平台的获取用户基本信息api接口获取用户基本信息。

 

原文来自 乌徒帮 http://www.utubon.com/post/3065.html

相关文章
相关标签/搜索