原创| 系统说明| 一个月前| 阅读 184 次 | 0赞同 0反对
概述:板砖曾经做过一个地方门户网站,现在罗列一些曾经吸粉引流、提升活跃度的模块罗列出来,因为没有经理制作更多的模块,所以运营者可以根据自身情况拓展。
板砖博客微信功能是基于easywechat4.0开发的,在此也感谢easywechat产品团队的无私奉献。
板砖在制作微信模块的时候有3个特别需要注意的地方,其他的都是功能性逻辑问题:
1、公众号独立的服务器配置
2、跨域名借其他公众号获取openid
3、公众开放平台
如果您是运营人员而非技术人员,欢迎关注公众号“暂保密”体验功能;如果您是技术人员想看更多相关思路,请方位我的thinkphp博客:http://www.thinkphp.cn/member/article/p/1.html
首先来看看公众号独立的服务器配置,使用easywechat的部分网友在配置验证时会遇到经常不能够认证通过的情况,这种情况下板砖是这样处理的:
在确保功能稳定无误的情况下,直接返回echostr,不要尝试纠结一些小问题,否则会浪费很多时间。
然后是借用openid,很多时候运营方没有自己的服务号,这个时候通过订阅号回复获取openid的方式体验又很不好,因此板砖在tom插件中获得并改善了借用openid的方法:
<?php /* * tom微信借授权 */ $url = get_url(); $oauth_back_url = urldecode($_GET['oauth_back_url']); preg_match("#((http|https)://[^?]*/)tom_oauth.php#", $url, $urlmatches); if (is_array($urlmatches) && ! empty($urlmatches['0'])) { $url = str_replace($urlmatches['0'], $oauth_back_url, $url); } header('Location: ' . $url); function get_url() { $protocol = (! empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://"; $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; return $url;}//////////////////////////////////////////如果你想在自己的代码中实现这一方法,那么只需要判断是否需要即可,当然在板砖博客中已经集成if ($wxasnum == 1 || $wxasnum == 10000) { $redirecturl = 'xxx.php?oauth_back_url=' . urlencode($redirecturl); }
最后来说一下公众号开放平台的问题,其实公众平台核心问题就出在管理员授权和取消授权两个问题上,其余的操作部分和普通公众号服务器授权一致,因此开发者可以注意easywechat的授权与取消授权功能上。
/* * 第三方app的refreshtoken建名 */ private $key_refreshkey = CKEY_WX_REFRESHTOKEN; public function callback() { $openPlatform = Factory::openPlatform(config('openflat')); if (input('get.auth_code')) { $result = $openPlatform->handleAuthorize(input('get.auth_code')); // file_put_contents('/www/web/tlsc/web/public_html/inf.txt', json_encode($result)); $info = $result['authorization_info']; $data = [ 'access_token' => $info['authorizer_access_token'], 'refresh_token' => $info['authorizer_refresh_token'], 'authorization_info' => json_encode($result) ]; cache($this->key_refreshkey . $info['authorizer_appid'], $info['authorizer_refresh_token']); Db::name('op_app')->where('appid', $info['authorizer_appid'])->update($data); return redirect(url('admin/openflat/index')); } $server = $openPlatform->server; $message = $server->getMessage(); switch ($message['InfoType']) { case Guard::EVENT_AUTHORIZED: // 处理授权成功事件 $server->push(function ($message) { // $message 为微信推送的通知内容,不同事件不同内容,详看微信官方文档 // 获取授权公众号 AppId: $message['AuthorizerAppid'] // 获取 AuthCode:$message['AuthorizationCode'] // 然后进行业务处理,如存数据库等... $appid = $message['AuthorizerAppid']; $code = $message['AuthorizationCode']; Db::name('op_app')->where('appid', $appid) ->update([ 'authcode' => $code, 'status' => 'active' ]); }, Guard::EVENT_AUTHORIZED); break; case Guard::EVENT_UPDATE_AUTHORIZED: // 处理授权更新事件 $server->push(function ($message) { $appid = $message['AuthorizerAppid']; $code = $message['AuthorizationCode']; Db::name('op_app')->where('appid', $appid) ->update([ 'authcode' => $code ]); }, Guard::EVENT_UPDATE_AUTHORIZED); break; case Guard::EVENT_UNAUTHORIZED: // 处理授权取消事件 $server->push(function ($message) { $appid = $message['AuthorizerAppid']; Db::name('op_app')->where('appid', $appid) ->update([ 'status' => 'cancel' ]); }, Guard::EVENT_UNAUTHORIZED); break; } $server->serve()->send(); }
本频道需要登陆后才能评论,请登录