PHP公众号开发给用户发微信消息提醒功能

简介: 该内容是一个关于如何在时间紧迫的情况下,通过微信客服消息接口实现用户资金到账或成员变动时发送微信通知的项目总结。

最近做的一个项目,当有用户有资金到账或者成员变动时需要给他发一条微信消息提示。针对这个,开始想使用模板消息,但是刚注册的公众号申请消息模板需要几天时间申请,在时间不足下选择了使用客服消息接口。


这里跳过网页授权和用户信息获取,请求接口的步骤,主要看获取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. 实现效果。

目录
相关文章
|
18天前
|
JSON 小程序 JavaScript
uni-app开发微信小程序的报错[渲染层错误]排查及解决
uni-app开发微信小程序的报错[渲染层错误]排查及解决
266 7
|
18天前
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
369 1
|
1天前
|
XML 安全 PHP
PHP与SOAP Web服务开发:基础与进阶教程
本文介绍了PHP与SOAP Web服务的基础和进阶知识,涵盖SOAP的基本概念、PHP中的SoapServer和SoapClient类的使用方法,以及服务端和客户端的开发示例。此外,还探讨了安全性、性能优化等高级主题,帮助开发者掌握更高效的Web服务开发技巧。
|
19天前
|
存储 自然语言处理 小程序
微信小程序多语言切换神器:简繁体切换功能完全指南
随着全球化的发展,支持多种语言的应用程序愈发重要。本文介绍了如何在微信小程序中实现简体与繁体字体之间的切换功能,以满足不同地区用户的需求。通过创建utils文件夹并编写相应的转换函数,开发者可以方便地实现语言切换,从而提升用户体验。文章中还附带了示例代码和效果图,帮助读者更好地理解和应用这一功能。
62 0
微信小程序多语言切换神器:简繁体切换功能完全指南
|
20天前
|
SQL 关系型数据库 MySQL
PHP与MySQL协同工作的艺术:开发高效动态网站
在这个后端技术迅速迭代的时代,PHP和MySQL的组合仍然是创建动态网站和应用的主流选择之一。本文将带领读者深入理解PHP后端逻辑与MySQL数据库之间的协同工作方式,包括数据的检索、插入、更新和删除操作。文章将通过一系列实用的示例和最佳实践,揭示如何充分利用这两种技术的优势,构建高效、安全且易于维护的动态网站。
|
22天前
|
缓存 小程序 索引
uni-app开发微信小程序时vant组件van-tabs的使用陷阱及解决方案
uni-app开发微信小程序时vant组件van-tabs的使用陷阱及解决方案
120 1
|
27天前
|
小程序 前端开发 数据安全/隐私保护
微信小程序全栈开发中的身份认证与授权机制
【10月更文挑战第3天】随着移动互联网的发展,微信小程序凭借便捷的用户体验和强大的社交传播能力,成为企业拓展业务的新渠道。本文探讨了小程序全栈开发中的身份认证与授权机制,包括手机号码验证、微信登录、第三方登录及角色权限控制等方法,并强调了安全性、用户体验和合规性的重要性,帮助开发者更好地理解和应用这一关键技术。
43 5
|
27天前
|
小程序 前端开发 JavaScript
微信小程序全栈开发中的PWA技术应用
【10月更文挑战第3天】微信小程序作为新兴应用形态,凭借便捷体验与社交传播能力,成为企业拓展业务的新渠道。本文探讨了微信小程序全栈开发中的PWA技术应用,包括离线访问、后台运行、桌面图标及原生体验等方面,助力开发者提升小程序性能与用户体验。PWA技术在不同平台的兼容性、性能优化及用户体验是实践中需注意的关键点。
48 5
|
23天前
|
小程序 JavaScript API
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机
这篇文章介绍了如何在uni-app和微信小程序中实现将图片保存到用户手机相册的功能。
355 0
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机
|
29天前
|
Java PHP
PHP作为广受青睐的服务器端脚本语言,在Web开发中占据重要地位。理解其垃圾回收机制有助于开发高效稳定的PHP应用。
【10月更文挑战第1天】PHP作为广受青睐的服务器端脚本语言,在Web开发中占据重要地位。其垃圾回收机制包括引用计数与循环垃圾回收,对提升应用性能和稳定性至关重要。本文通过具体案例分析,详细探讨PHP垃圾回收机制的工作原理,特别是如何解决循环引用问题。在PHP 8中,垃圾回收机制得到进一步优化,提高了效率和准确性。理解这些机制有助于开发高效稳定的PHP应用。
40 3