600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 微信小程序使用云函数实现客户下单后商家小程序接收订单状态通知(通过发送统一服务消

微信小程序使用云函数实现客户下单后商家小程序接收订单状态通知(通过发送统一服务消

时间:2019-08-01 14:13:03

相关推荐

微信小程序使用云函数实现客户下单后商家小程序接收订单状态通知(通过发送统一服务消

在做服务类小程序时,通常会遇到客户在客户端下单后,接单商家需要有新订单消息提醒的功能。由于小程序模板消息已下线无法使用,而小程序中的订阅消息需要手动订阅后才能触发,并且每次订阅只能触发一次(不管有没有勾选一直允许订阅消息,及时一直允许,也只有一次,只是不弹出授权框而已),再者客户点击下单,商家小程序无法获得订阅授权!因此最终选择的方案为统一服务消息uniformMessage.send。

注意:公众号模板消息,向认证后的服务号开放。所有服务号都可以在功能->添加功能插件处看到申请模板消息功能的入口,但只有认证后的服务号才可以申请模板消息的使用权限并获得该权限。同时,这公众号和小程序要相互关联了,且必须是同主体才行。接收公众号模板消息需要接收人关注此公众号!

由于是使用的微信自己的云函数调用,因此不需要先把小程序的openId转成unionid,再根据unionid得到公众号中对应用户的openId,直接在参数中传入需要接收订单通知的小程序的openId就可以了。

注意的坑,按照官方的示例无法成功发送消息,一直反馈{"errcode":40165,"errmsg":"invalid weapp pagepath hint: 经过测试后发现官方文档有误,此处参数应为page,而不是pagepath。即:page:"pages/index"

云函数代码:

const cloud = require('wx-server-sdk')cloud.init()exports.main = async (event, context) => {const wxContext = cloud.getWXContext()const openId = wxContext.OPENID//此处获取本小程序openId,如何获取商家openId看下文try {const result = await cloud.openapi.uniformMessage.send({touser: openId,//公众号appid,要求与小程序有绑定且同主体mpTemplateMsg: {appid: 'wx338663359e69861d',miniprogram: {//公众号模板消息所要跳转的小程序,小程序的必须与公众号具有绑定关系appid: 'wxc297xxxxxxx8754f',//小程序appidpage:"pages/index"//跳转的小程序的路径,注意此处文档中有误},data: {//公众号模板消息的数据first: {value: '恭喜你购买成功!',color: '#173177'},keyword1: {value: '巧克力',color: '#173177'},keyword2: {value: '39.8元',color: '#173177'},remark: {value: '欢迎再次购买!',color: '#173177'}},templateId: 'SuNIuh3Fmz4DmXnExxxxxxxI8qxxxxxxrF5qhX8''//公众号模板id}})return result} catch (err) {return err}}

以上代码实现了给自己小程序发送,那客户端和商家端两个小程序不同,云开发环境不同,即使同一个微信登录openId也不同,怎么办呢?如果是客户端需要给商家端发送消息,可以使用商家微信登录客户端,获取在客户端云环境中商家微信的openId,云函数中发送统一消息时接收openId使用该openId即可。

那么如果是无法获取商家在客户端云环境中的openId时怎么办呢?最早我使用不同云环境调用云函数,但发现调用uniformMessage.send统一模板消息时,只能将当前触发云函数的云环境中的openId转换为对应的公众号unionid,也就是A小程序使用A的云函数调用B小程序的发送模板消息的云函数时,发送目标openId只能是A小程序对应的openId,被调用的云函数的运行环境与调用它的环境保持一致!!因此,只能使用HTTP API调用的方式发送模板消息。

微信小程序使用云函数实现客户下单后商家小程序接收订单状态通知(通过发送统一服务消息uniformMessage.send实现)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。