原创| 系统说明| 2019-10-10| 阅读 216 次 | 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();
}本频道需要登陆后才能评论,请登录