最近开发在威信小程序让做一个微信消息的订阅,遇到一些坑,记录一下
需求是在提交表单后 通过提交成功后的回调唤起微信订阅框在进行消息订阅的是否开启
之前的方法,直接调用
self.$api.setVisit(params).then(res => {
if (res.data.code == 200) {
self.form.fappointid = res.data.msg
uni.showToast({
title: "预约成功",
icon: "success"
})
//调用订阅
self.sendSubscription()
}
})
}
微信订阅的方法
sendSubscription() {
let self = this
let fappdate = self.form.userTime.substring(0, 10);
let fapptime = self.form.userTime.substring(10);
return new Promise((resolve, reject) => {
wx.requestSubscribeMessage({
//此处填写刚才申请模板的模板ID
tmplIds: '此处是你的模板id',
success(res) {
resolve(res)
if (res.ommpLLnzY9ppmvhLLaYj1Ef1sUeWAAeqsmwl1BwFFOs ==
'accept') {
if (self.userData[0].fromUser) {
let params = {
fappointid: self.form.fappointid,
fappremind: self.form.fappremind,
fwechatid: self.userData[0].fromUser,
fisremind: '是',
}
console.log("params: ", params);
self.$api.editVisit(params).then(res => {
console.log("修改接口: ", res);
setTimeout(() => {
uni.navigateBack({
delta: 1
});
}, 8e2)
})
self.$api.getDyInfo(self.userData[0].fromUser).then(
response => {
console.log("response: ",
response);
})
}
}
},
fail(res) {
reject(res)
}
})
})
},
结果是无法唤起并提示错误 errMsg":"requestSubscribeMessage:fail can only be invoked by user TAP gesture
翻阅文档后发现是不支持回调,更多注意事项可自行查看:wx.requestSubscribeMessage(Object object) | 微信开放文档
后改为利用点击事件触发,附上代码可参考
self.$api.setVisit(params).then(res => {
if (res.data.code == 200) {
self.form.fappointid = res.data.msg
uni.showModal({
title: '温馨提示',
content: '为更好的促进您与商家的交流,服务号需要在您预约时向您发送消息',
confirmText: "同意",
cancelText: "拒绝",
success: function(res) {
if (res.confirm) {
//调用订阅消息
console.log('用户点击确定');
//调用订阅
self.sendSubscription()
} else if (res.cancel) {
console.log('用户点击取消');
///显示第二个弹说明一下
wx.showModal({
title: '温馨提示',
content: '拒绝后您将无法获取实时消息',
confirmText: "知道了",
showCancel: false,
success: function(res) {
//点击知道了的后续操作
//如跳转首页面
uni.showToast({
title: '预约成功',
icon: 'none',
success() {
setTimeout(() => {
uni.navigateBack({
delta: 1
});
},8e2)
}
})
}
});
}
}
});
}
})
至此 ,问题解决
如有更优的解决方案,可以交流