ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2020-06-20 09:41:00  阅读:2431  来源: 互联网

标签:openId 微信 uniformMessage 程序 公众 消息 模板


在做服务类小程序时,通常会遇到客户在客户端下单后,接单商家需要有新订单消息提醒的功能。由于小程序模板消息已下线无法使用,而小程序中的订阅消息需要手动订阅后才能触发,并且每次订阅只能触发一次(不管有没有勾选一直允许订阅消息,及时一直允许,也只有一次,只是不弹出授权框而已),再者客户点击下单,商家小程序无法获得订阅授权!因此最终选择的方案为统一服务消息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',//小程序appid
            page:"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也不同,怎么办呢?解决方法很简单,在客户端A中使用云函数调用服务端B发送模板消息的云函数即可。在不同小程序间相互调用云环境的方法可参考我之前的教程:微信小程序不同小程序间调用云环境(多个不同小程序共享云数据)

注意,mpTemplateMsg中的参数touser必须为接收者微信在该云函数中的openId。(即:不能发送模板消息的是客户端小程序A,而A云函数touser参数传入的openId是商家端小程序B中接收消息者的openId)

标签:openId,微信,uniformMessage,程序,公众,消息,模板
来源: https://blog.csdn.net/zjgo007/article/details/106823239

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有