1、公众号云开发配置
进入云开发控制台
注意:一定是公众号的云开发控制台,与 共享环境的小程序 云开发控制台不是同一个!!!
小程序云环境共享
image.png注意:图中 "共享给我的" 环境如何为空,需要先去小程序后台去授权给此公众号,授权完成后这里显示出来即可
添加消息推送
image.pngimage.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
云调用能力—客服消息
网友评论