微信公众平台开发(99) 自定义菜单获取OpenID

简介: 关键字 微信公众平台 自定义菜单 OpenID作者:方倍工作室原文:http://www.cnblogs.com/txw1958/p/weixin-menu-get-openid.html   在这篇微信公众平台开发教程中,我们将介绍如何在自定义菜单中获得用户的OpenID。

关键字 微信公众平台 自定义菜单 OpenID
作者:方倍工作室
原文:http://www.cnblogs.com/txw1958/p/weixin-menu-get-openid.html

 

在这篇微信公众平台开发教程中,我们将介绍如何在自定义菜单中获得用户的OpenID。

本篇开发教程的实质是微信自定义菜单及OAuth2.0授权的灵活运用。

本文分为以下两个部分:

  1. 拥有高级接口权限时的获取(基于view事件)
  2. 没有高级接口权限时的获取(基于click事件)

 

一、拥有高级接口权限

拥有高级接口权限时,我们使用OAuth2.0授权的方式来获取。

OAuth2.0的详细设置方法,请参考 微信公众平台开发(71)OAuth2.0网页授权

在设置好授权回调页面域名之后,我们需要构造菜单,为了方便同时讲解下一小节,我们菜单构造如下

{
    "button": [
        {
            "type": "click",
            "name": "图文获取",
            "key": "图文"
        },
        {
            "type": "view",
            "name": "授权获取",
            "url": "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx0738856156f7323c&redirect_uri=http://israel.sinaapp.com/oauth2/&response_type=code&scope=snsapi_base&state=1#wechat_redirect"
        }
    ]
}

菜单的构成中,核心思想在于url是一个授权回调url,这样才能在菜单点击的时候使用oauth2.0授权获得openid

这样将生成两个菜单如下

当点击 授权获取的时候,将访问授权页面,页面将使用OAuth2.0的方式获得openid。

代码可以参考《微信公众平台开发最佳实践》第72页。

跳转后显示如下:

 

二、没有高级接口权限

对于没有高级接口权限的账号,就不能使用view事件获得OpenID,需要使用click事件来实现

实现原理就是获得接收消息中的FromUserName值,并且在url中构造openid的参数即可

在自定义菜单中响应代码如下

 1 private function receiveEvent($object)
 2 {
 3     $content = "";
 4     switch ($object->Event)
 5     {
 6         case "subscribe":
 7             $content[] = array("Title"=>"欢迎关注方倍工作室",  "Description"=>"", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958");
 8             break;
 9         case "CLICK":
10             switch ($object->EventKey)
11             {
12                 case "图文":
13                     $content[] = array("Title"=>"OpenID", "Description"=>"你的OpenID为:".$object->FromUserName, "PicUrl"=>"", "Url" =>"http://m.cnblogs.com/?u=txw1958&openid=".$object->FromUserName);
14                     break;
15             }
16             break;
17     }
18     if(is_array($content)){
19         $result = $this->transmitNews($object, $content);
20     }else{
21         $result = $this->transmitText($object, $content);
22     }
23     return $result;
24 }

运行后效果如下所示。

 

 

目录
相关文章
|
2月前
|
开发者
微信公众平台开发基本配置
微信公众平台开发基本配置
112 0
|
22天前
|
小程序 开发者
uniapp 获取微信的 openid(借助 uniCloud)
uniapp 获取微信的 openid(借助 uniCloud)
49 0
|
22天前
|
小程序 JavaScript
【微信小程序-原生开发】实用教程11 - 用户登录鉴权(含云函数的创建、删除、使用,通过云函数获取用户的openid)
【微信小程序-原生开发】实用教程11 - 用户登录鉴权(含云函数的创建、删除、使用,通过云函数获取用户的openid)
23 0
|
1月前
|
Java API
java进行微信公众号开发
java进行微信公众号开发
33 0
|
2月前
|
人工智能 Python
【Python + 微信】微信公众号开发避坑指南
【Python + 微信】微信公众号开发避坑指南
53 0
|
2月前
|
XML 安全 Java
如何开发微信公众号后台
如何开发微信公众号后台
|
2月前
|
安全 小程序 Java
java实现微信服务(公众)号用户关注时,获取openid,安全模式下的加密解密实现
java实现微信服务(公众)号用户关注时,获取openid,安全模式下的加密解密实现
|
2月前
|
移动开发 JavaScript
微信公众号H5开发,在微信浏览器打开H5,无法一键下载图片
微信公众号H5开发,在微信浏览器打开H5,无法一键下载图片
113 0
|
2月前
|
XML Go 数据格式
【微信公众号开发】基于golang的公众号开发——接入消息自动回复接口
【微信公众号开发】基于golang的公众号开发——接入消息自动回复接口
266 0
|
7月前
|
小程序 PHP 开发者
微信公众号开发(八)生成带参数二维码,以及将二维码下载至本地
微信的二维码真是个神奇的东西。在我们开发中,应用也是很多~ 用户扫描带场景值(参数)二维码时,可能推送以下两种事件:
144 1

热门文章

最新文章

相关实验场景

更多