美文网首页
微信云开发—环境共享开发公众号关注被动回复事件+完整代码

微信云开发—环境共享开发公众号关注被动回复事件+完整代码

作者: superSK | 来源:发表于2024-05-08 16:01 被阅读0次

    1、公众号云开发配置

    进入云开发控制台

    注意:一定是公众号的云开发控制台,与 共享环境的小程序 云开发控制台不是同一个!!!

    image.png image.png

    小程序云环境共享

    image.png

    注意:图中 "共享给我的" 环境如何为空,需要先去小程序后台去授权给此公众号,授权完成后这里显示出来即可

    添加消息推送

    image.png
    image.png
    image.png

    2.完整代码,替换replace 为自己的Appid即可

    // 云函数入口文件
    const cloud = require('wx-server-sdk')
    
    //微信公众号开发:被动回复用户消息参数类型
    // https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Passive_user_reply_message.html
    
    
    cloud.init({
        env: cloud.DYNAMIC_CURRENT_ENV
    }) // 使用当前云环境
    
    const db = cloud.database({
        // doc单条查询不存在时,不报错
        throwOnNotFound: false,
    });
    
    
    //格式化日期
    function formatTime(date) {
        const year = date.getFullYear()
        const month = date.getMonth() + 1
        const day = date.getDate()
        const hour = date.getHours()
        const minute = date.getMinutes()
        const second = date.getSeconds()
    
        return `${[year, month, day].map(formatNumber).join('-')} ${[hour, minute, second].map(formatNumber).join(':')}`
    }
    
    const formatNumber = n => {
        n = n.toString()
        return n[1] ? n : `0${n}`
    }
    
    
    //<!--下载云存储图片-->
    let downLoad = async (fileID) => {
        const res = await cloud.downloadFile({
            fileID: fileID, // 图片的File ID
        })
        const buffer = res.fileContent
        // console.log(buffer)
        return buffer
    }
    
    //<!--把媒体文件上传到微信服务器-->
    let upload = async (Buffer) => {
        return await cloud.openapi({
            appid: 'xxxx' //公众号ID <replace>
        }).customerServiceMessage.uploadTempMedia({
            type: 'image',
            media: {
                contentType: 'image/png',
                value: Buffer
            }
        })
    }
    
    // 云函数入口函数
    exports.main = async (event, context) => {
        const wxContext = cloud.getWXContext()
    
        try {
    
            if (event.MsgType == 'event') {
    
                //当前时间
                let createTime = formatTime(new Date());
                //查询是否存在此公众号用户
                let publicInfo = await db.collection("public_user").where({
                    publicOpenId: wxContext.FROM_OPENID, //公众号用户ID
                }).get().catch(err => {
                    throw new Error(`查询公众号用户信息出错:${err.message}`)
                })
    
                //事件-关注/取消关注
                if (event.Event == 'subscribe') {
    
                    //===============小程序端先上传临时素材===============
                    //小程序卡片临时素材ID
                    let miniMediaId = 'xxxxxx';  //<replace>
                    //店长微信素材ID
                    let qiyeMediaId = 'xxxxxx'; //<replace>
    
    
                    //================有此用户================
                    if (publicInfo.data && publicInfo.data.length) {
                        //更新用户关注状态
                        await db.collection("public_user").doc(publicInfo.data[0]._id).update({
                            data: {
                                updateTime: createTime,
                                attentionStatus: true
                            }
                        })
    
                        //未领取过关注优惠券,发券入口
                        if (!publicInfo.data[0].receiveStatus) {
                            //关注有礼,跳转路径
                            let miniPath = `/packageB/receive/receive?publicOpenId=${wxContext.FROM_OPENID}&userUnionId=${wxContext.FROM_UNIONID}&source=1`;
                            console.info('关注用户的信息', miniPath);
                            //推送小程序送券卡片
                            await cloud.openapi({
                                appid: 'xxx' //公众号APPID <replace>
                            }).customerServiceMessage.send({
                                "touser": wxContext.FROM_OPENID,
                                "msgtype": "miniprogrampage",
                                "miniprogrampage": {
                                    "title": "关注送券,点击领取",
                                    'appid': 'xxx', //小程序APPID <replace>
                                    "pagepath": miniPath,
                                    "thumb_media_id": miniMediaId
                                }
                            })
                        }
                    } else {
                        //================无此用户================
                        //查询该用户是否为会员
                        let userInfo = await db.collection("user").where({
                            unionId: wxContext.FROM_UNIONID,
                            isMember: true
                        }).get().catch(err => {
                            throw new Error("查询用户信息失败" + err.message)
                        })
    
                        //新增公众号用户
                        let isMember = false;
                        let miniOpenId = null;
                        if (userInfo.data && userInfo.data.length) {
                            isMember = true;
                            miniOpenId = userInfo.data[0].openId;
                        }
                        await db.collection("public_user").add({
                            data: {
                                attentionStatus: true, //关注公众号
                                receiveStatus: false, //是否领取了关注券
                                isMember, //是否已经是会员
                                miniOpenId, //小程序ID
                                createTime: createTime, //创建时间
                                updateTime: createTime, //关注时间
                                publicOpenId: wxContext.FROM_OPENID, //公众号ID
                                unionId: wxContext.FROM_UNIONID, //用户联合ID
                            }
                        })
    
    
                        //关注有礼,跳转路径
                        let miniPath = `/packageB/receive/receive?publicOpenId=${wxContext.FROM_OPENID}&userUnionId=${wxContext.FROM_UNIONID}&source=1`;
                        console.info('关注用户的信息', miniPath);
                        //推送小程序送券卡片
                        await cloud.openapi({
                            appid: 'xxx' //公众号APPID <replace>
                        }).customerServiceMessage.send({
                            "touser": wxContext.FROM_OPENID,
                            "msgtype": "miniprogrampage",
                            "miniprogrampage": {
                                "title": "关注送券,点击领取",
                                'appid': 'xxx', //小程序APPID  <replace>
                                "pagepath": miniPath,
                                "thumb_media_id": miniMediaId
                            }
                        })
                    }
    
                    //引导添加店长企业微信
                    await cloud.openapi({
                        appid: 'xxx'. //公众号ID <replace>
                    }).customerServiceMessage.send({
                        "touser": wxContext.FROM_OPENID,
                        "msgtype": "text",
                        "text": {
                            "content": '长按识别添加店长微信,领取更多优惠券~'
                        }
                    })
    
                    //推送店长企业微信
                    await cloud.openapi({
                        appid: 'xxx' //公众号ID  <replace>
                    }).customerServiceMessage.send({
                        "touser": wxContext.FROM_OPENID,
                        "msgtype": "image",
                        "image": {
                            "media_id": qiyeMediaId
                        }
                    })
                    return 'success';
                }
    
                //取消关注
                if (event.Event == 'unsubscribe') {
                    //修改公众号用户表信息
                    if (publicInfo.data && publicInfo.data.length) {
                        await db.collection("public_user").doc(publicInfo.data[0]._id).update({
                            data: {
                                updateTime: createTime, //更新时间
                                attentionStatus: false //取消关注
                            }
                        }).catch(err => {
                            throw new Error("修改公众号用户信息失败" + err.message)
                        })
                    }
                }
            }
        } catch (err) {
            console.info(err)
        }
    }
    
    

    https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Service_Center_messages.html#7
    微信发送客服信息参考字段
    https://www.bookstack.cn/read/miniprogram-api-backend/18447f0a83799c93.md#%E5%8F%91%E9%80%81%E5%9B%BE%E7%89%87%E6%B6%88%E6%81%AF
    微信云调用客服接口使用
    https://developers.weixin.qq.com/community/business/doc/000e00b7e740e88d1ccaf94e05bc0d
    云调用能力—客服消息

    相关文章

      网友评论

          本文标题:微信云开发—环境共享开发公众号关注被动回复事件+完整代码

          本文链接:https://www.haomeiwen.com/subject/hffjfjtx.html