微信公众号开发的一点自我小结,怕自己过后忘了,总结于此。
问:大侠,请教一下,如果那个公众号的自定义菜单已经授权给了第三方,如何处理授权获取code呢?
答:同一个公众号只能有一个控制后台,公众号后台:开发->基本配置->服务器配置->服务器地址,这里只能填一个地址!
公众号自定义菜单有两种方式,一种是直接在后台左边,根据微信提供的界面,自己编辑,适合做一些静态连接和展示,,另外一种就是通过后台程序来动态生成,动态生成肯定是在前面的服务器配置那里的后台程序来接管的,如果这里已经有一个第三方的地址了,除非修改他们的代码,让他们的代码里的菜单跳转地址,转到我们的后台程序里。
如何从公众号自定义菜单携带公众号访问者的信息(openid)进入自己的后台(这个就是OAuth认证),通过oauth_token换取access_token,这是微信开发的第二个难点,,第一个难点是如何让公众号跟我们自己的后台连接上,,第三个难点是微信的9大接口,需要用到jssdk开发,一般的公众号后台开发只需要PHP就可以了,但是jssdk就还需要学习js的用法。
扯远了,还是继续说OAuth认证拿code的问题,假设自定义菜单上的跳转链接是https://www.abc.com/wx/index.php,
这个index.php的内容如下:
<?php include_once("wx_appidpwd.php"); //把配置路径写入 wx_appidpwd.php文件里,这里就引用一下,便于统一修改部署 header('location:https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$appid.'&redirect_uri='.$myappurl.'oauth.php&response_type=code&scope=snsapi_userinfo&state=1&connect_redirect=1#wechat_redirect'); ?>
$myappurl里是再次跳转的路径, 比如$myappurl ='https://yoooko.s1.natapp.cc/wx/'; 拼接在一起就是 redirect_uri=https://yoooko.si1.natapp.cc/wx/oauth.php
oauth.php的内容如下:
<?php $code = $_GET['code']; $state = $_GET['state']; //$appid 都定义在 $appsecret 在wx_appidpwd.php文件里 include_once("wx_appidpwd.php"); if (empty($code)) $this->error('授权失败'); //获取oauth_token $token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$appid.'&secret='.$appsecret.'&code='.$code.'&grant_type=authorization_code'; $token = json_decode(file_get_contents($token_url)); if (isset($token->errcode)) { echo '<h1>错误:</h1>'.$token->errcode; echo '<br/><h2>错误信息:</h2>'.$token->errmsg; exit; } //通过oauth_token再获取access_token,注意:此access_token与基础的access_token不一样,所以此次必须再次获得,而不能从缓存里获取 $access_token_url = 'https://api.weixin.qq.com/sns/oauth2/refresh_token?appid='.$appid.'&grant_type=refresh_token&refresh_token='.$token->refresh_token; //转成对象 $access_token = json_decode(file_get_contents($access_token_url)); if (isset($access_token->errcode)) { echo '<h1>错误:</h1>'.$access_token->errcode; echo '<br/><h2>错误信息:</h2>'.$access_token->errmsg; exit; } //通过access_token再获取userinfo $user_info_url = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token->access_token.'&openid='.$access_token->openid.'&lang=zh_CN'; //转成对象 $user_info = json_decode(file_get_contents($user_info_url)); if (isset($user_info->errcode)) { echo '<h1>错误:</h1>'.$user_info->errcode; echo '<br/><h2>错误信息:</h2>'.$user_info->errmsg; exit; } $user_openid = $user_info->openid; //ok echo $openid; //打印用户信息 /* echo '<pre>'; print_r($user_info); echo '</pre>'; */
//其他的业务逻辑代码,比如登陆等等。。。
?>
这样我们就拿到了公众号访问者的信息了,包括openid之类的各种信息都有了,可以去做后面的登陆之类的业务逻辑了。
两年前做过微信公众号的开发,后来感觉受微信限制太多,然后知道了跨平台的H5,就去入坑H5+的App开发了,到做了一年半了,js成了自己的主要工作语言,完成了两个小产品,一个进销存软件的手机版,一个进销存软件的订货平台,,跨平台的好处是,只要写一次代码,安卓和苹果都能使用,而且手机的各种功能基本上都能调用,不受微信的限制,比如需要一条通知消息,微信公众号的订阅号和服务号都不能实现,必须要企业号才行,而App开发则需要通过第三方平台发送透传消息来实现,,如果一些更深入的应用,比如要用手机来做蓝牙打印,还需要去了解点Android和iOS原生开发的知识,甚至可能要开发自己的插件。
等我做完手里的这两个App,再来总结下H5+开发的一些体会,是为记。
下一篇: 云计算需突破重重挑战