PHP公众号开发给用户发微信消息提醒功能
2019-07-02 16:45 北桥苏 阅读(5644) 评论(0) 编辑 收藏 举报最近做的一个项目,当有用户有资金到账或者成员变动时需要给他发一条微信消息提示。针对这个,开始想使用模板消息,但是刚注册的公众号申请消息模板需要几天时间申请,在时间不足下选择了使用客服消息接口,微信文档地址: https://mp.weixin.qq.com/wiki。
这里跳过网页授权和用户信息获取,请求接口的步骤,主要看获取access_token,发布客服消息,验证是否关注公众号等接口。
1. 获取access_token。
// 获取access_token
public function getAccessToken($weid) {
$appID = "wxfaddfdfdfd6cf6fc3569"; // 服务号appID
$appSecret = "071bebfdfdofdfd23687bf53d63a"; // 服务号appSerect
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appID&secret=$appSecret";
$content = ihttp_get($url); // 自定义请求函数
if(is_error($content)) {
return error('-1', '获取微信公众号授权失败, 请稍后重试!错误详情: ' . $content['message']);
}
if (empty($content['content'])) {
return error('-1', 'AccessToken获取失败,请检查appid和appsecret的值是否与微信公众平台一致!');
}
$token = @json_decode($content['content'], true);
if ($token['errcode'] == '40164') {
return error(-1, $this->errorCode($token['errcode'], $token['errmsg']));
}
if(empty($token) || !is_array($token) || empty($token['access_token']) || empty($token['expires_in'])) {
$errorinfo = substr($content['meta'], strpos($content['meta'], '{'));
$errorinfo = @json_decode($errorinfo, true);
return error('-1', '获取微信公众号授权失败, 请稍后重试! 公众平台返回原始数据为: 错误代码-' . $errorinfo['errcode'] . ',错误信息-' . $errorinfo['errmsg']);
}
$record = array();
$record['token'] = $token['access_token'];
$record['expire'] = TIMESTAMP + $token['expires_in'] - 200;
$cachekey = cache_system_key('accesstoken', array('acid' => $weid));
cache_write($cachekey, $record);
return $record['token'];
}
2. 判断是否关注公众号。
// 判断当前用户是否关注公众号
public public function isSubscribe($weid,$userid) {
// 获取当前用户信息
$userinfo = pdo_get('hcface_users',array('uid'=>$userid));
//return $userinfo;
if(empty($userinfo)) {
return false;
}
// 获取access_token
$accessToken = $this->getAccessToken($weid);
// 是否关注接口
$url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$accessToken."&openid=".$userinfo['openid']."&lang=zh_CN";
$res = ihttp_request($url);
if(is_error($res)) {
return false;
}
if($res['code'] != '200') {
return false;
}
$result = @json_decode($res['content'],true);
if($result['subscribe'] == 1) {
$updateData = [];
// 判断当前用户头像和昵称是否更换
if($userinfo['avatar'] != $result['headimgurl']) {
$updateData['avatar'] = $result['headimgurl'];
}
if($userinfo['nickname'] != $result['nickname']) {
$updateData['avatar'] = $result['nickname'];
}
if(!empty($updateData)) {
pdo_update('hcface_users',$updateData,array('uid'=>$userid));
}
}
$userInfoData = [
"subscribe" => $result['subscribe'],
"user_openid" => $userinfo['openid'],
"nickname" => $userinfo['nickname'],
];
return $userInfoData;
}
3. 发送客服消息。
public function solPushMsg($openid, $content, $wid) {
// 获取access_token
$accessToken = $this->getAccessToken($wid);
$data = array(
'touser' => $openid, // 用户openID
'msgtype' => 'text',
'text' => [
'content' => $content, // 内容
],
);
$url = 'https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token='.$accessToken;
$res = ihttp_request($url,json_encode($data,JSON_UNESCAPED_UNICODE)); // json_encode第二个参数必须带上,不然发出的消息可能是unicode编码的
if(is_error($res)) {
return false;
}
if($res['code'] != '200') {
return false;
}
return @json_decode($res['content'],true);
}
4. 微信接口返回的是一个数组。
5. 实现效果。
公众号
个人网站:www.zerofc.cn
公众号:ZEROFC_DEV
QQ交流群:515937120
QQ:2652364582
头条号:1637769351151619
B站:286666708
大鱼号:北桥苏
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律