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

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

作者: 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