微信遮罩php代码怎么用
时间 : 2023-04-26 05:02:02声明: : 文章内容来自网络,不保证准确性,请自行甄别信息有效性
微信遮罩是指在微信公众号中,让文章的一部分内容只对已关注公众号的用户可见,未关注公众号的用户看到的是遮罩提示。为了实现这个功能,需要在公众号后台添加相应的事件和代码。
以下是实现微信遮罩的PHP代码:
```php
<?php
// 验证token
$we***Obj = new we***Callbackapi();
if (isset($_REQUEST['echostr'])) {
$we***Obj->valid();
} else {
// 第一步:获取用户关注状态
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
if (!$postStr) {
echo '';
exit;
}
// 第二步:获取用户openid
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$keyword = trim($postObj->Content);
$msgType = trim($postObj->MsgType);
$time = time();
// 第三步:处理用户消息事件
if ($msgType == 'event') {
$event = $postObj->Event;
if ($event == 'subscribe') {
// 关注事件
$contentStr = '欢迎关注我的公众号!请回复"你想看的内容",即可获得权限,查看内容。';
$msgType = 'text';
$resultStr = $we***Obj->responseMsg($fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}
} else {
// 第四步: 处理普通消息事件
if ($keyword == '你想看的内容') {
// 第五步: 判断用户是否关注公众号
$url = "https://api.weixin.qq.com/cgi-bin/user/info?openid={$fromUsername}&access_token=";// 获取用户基本信息
$access_token = $we***Obj->get_access_token();// 获取access_token
$url = $url . $access_token;
$res = $we***Obj->http_curl($url, 'get');// get请求
$subscribe_info = json_decode($res, true);// 将json数据转换成数组
$subscribe = isset($subscribe_info['subscribe']) ? $subscribe_info['subscribe'] : 0;
if (!$subscribe) {
// 用户未关注
$msgType = 'text';
$contentStr = '抱歉,您需要关注公众号才能查看内容。';
$resultStr = $we***Obj->responseMsg($fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
} else {
// 用户已关注
$msgType = 'text';
$contentStr = '恭喜您,您已获得查看权限!以下是您想看的内容......';
$resultStr = $we***Obj->responseMsg($fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}
} else {
$msgType = 'text';
$contentStr = '欢迎关注我的公众号!请回复"你想看的内容",即可获得权限,查看内容。';
$resultStr = $we***Obj->responseMsg($fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}
}
exit;
}
// 微信回调api
class we***Callbackapi
{
public function valid()
{
// 原样返回echostr参数
$echoStr = $_REQUEST["echostr"];
if ($this->checkSignature()) {
echo $echoStr;
exit;
}
}
// 验证签名
private function checkSignature()
{
$signature = $_REQUEST["signature"];
$timestamp = $_REQUEST["timestamp"];
$nonce = $_REQUEST["nonce"];
$token = 'your_token';
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode($tmpArr);
$tmpStr = sha1($tmpStr);
if ($tmpStr == $signature) {
return true;
} else {
return false;
}
}
// 回应消息
public function responseMsg($fromUsername, $toUsername, $time, $msgType, $contentStr)
{
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
return $resultStr;
}
// 获取access_token
public function get_access_token()
{
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);// 本机redis服务
$redis->auth('your_redis_password');// 密码验证
if ($redis->exists('access_token')) {// 如果缓存中存在access_token,返回缓存数据
$access_token = $redis->get('access_token');
} else {// 如果缓存中不存在access_token,请求微信API
$appid = 'your_appid';// 公众号appid
$appsecret = 'your_appsecret';// 公众号appsecret
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$appsecret}";
$res = $this->http_curl($url, 'get');
$res = json_decode($res, true);
$access_token = $res['access_token'];
$redis->set('access_token', $access_token, 7000);// 缓存access_token,有效期7000秒
}
return $access_token;
}
// http请求封装方法
public function http_curl($url, $method, $post_data = null)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
if ($method == "post") {
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
}
$output = curl_exec($ch);
curl_close($ch);
return $output;
}
}
需要替换代码中的三个值:
- $token为你的公众号Token值
- $appid为你的公众号appid
- $appsecret为你的公众号appsecret
添加完代码后,在公众号后台设置自定义菜单或者关键词回复,即可实现微信遮罩功能。
微信遮罩效果是指在微信公众号内部分内容需要用户进行登陆 或者授权才可以查看,常常用于保护敏感信息,这个功能经常在很多微信公众号中使用。
下面,我们将介绍如何利用php代码实现微信遮罩效果,具体的实现步骤如下:
1. 首先需要获取用户的微信授权信息,可以通过OAuth2.0方式进行授权。这个过程需要公众号开发者获取微信提供的授权码,将授权码换取access_token和openid。
2. 登录之后,需要判断用户的openid,如果用户openid存在就认为用户已经完成授权,可以查看内容,否则需要引导用户进行授权。
3. 如果没有授权,我们需要显示一个提示弹窗,引导用户进行授权。可以使用微信提供的授权接口进行引导,将弹窗放在”我”页或引导页上。
4. 登录之后,我们需要将用户的登录信息存储到session中,并刷新页面。
5. 在页面中需要进行判断,如果用户已经完成了授权,则可以显示具体的内容,否则显示遮罩层。
6. 在php代码中实现遮罩层,可以使用CSS来实现,具体的实现会使用到position、z-index、background-color等元素和属性。主要实现的原理就是通过设置深色的透明层来遮罩原页面,使得无法看到原页面的内容。
7. 遮罩层实现的基本代码如下:
<div id="mask_layer" style="display:none;left:0; top:0;position:fixed!important; position:absolute;top:0;left:0;z-index:99998;filter:alpha(opacity=60);-moz-opacity:0.6;-khtml-opacity: 0.6;opacity: 0.6;background-color: #000;width:100%;height:100%;text-align:center;">
<div style="width: 200px;height: 150px;margin: 0 auto;margin-top:200px;background: #fff;border-radius: 10px;border: 1px solid #ccc;padding:20px;">
<h3>温馨提示</h3>
<p>请授权后查看后面的内容
<a href="授权地址" class="btn">立即授权</a>
</div>
</div>
在具体的引用页面中,需要根据授权状态动态地决定是否展示遮罩层,以下是实现代码:
<?php
session_start();
if (isset($_SESSION["openid"])) {
// 显示具体内容
} else {
// 显示遮罩层
?>
<div id="mask_layer" style="display:block;">
<h3>温馨提示</h3>
<p>请授权后查看后面的内容
<a href="授权地址" class="btn">立即授权</a>
</div>
<?php } ?>
以上就是php实现微信遮罩效果的基本流程和代码实现,希望对你有所帮助。
上一篇
php表单里的时间怎么写
下一篇
合肥php培训机构怎么样
https/SSL证书广告优选IDC>>
推荐主题模板更多>>
推荐文章