利用微搭低代码平台快速搭建问卷系统

366 阅读2分钟

可爱鲸.png 可爱鲸官网:keaijing.com.cn/

项目简介

  • 利用微搭低代码平台搭建一个问卷小程序,主要实现微信支付和消息推送功能。
  • 微信支付利用微搭自带的接口可以快速实现。
  • 消息推送分为两种,利用小程序自带的服务通知和自己利用微搭的云函数来实现公众号推送。

微信支付

首先可以新建微搭现有的微信支付API,但是要提前准备好认证的小程序和商户号,如下图所示。

image-20230722093609421.png

image-20230722093512993.png

认证和授权之后就可以完成API的创建,如下图所示。 然后在使用的时候就可以调用API接口,传入相关参数之后,就可以轻松完成微信支付功能。

微信支付.png

image-20230722094229236.png

消息推送

  • 服务通知类型的消息推送。首先要在微信公众平台选择好要使用的推送模板。

image-20230722094810760.png

选用之后要创建一个消息的订阅,在适当的时候弹出订阅通知。

image-20230722095408465.png

要注意的是模板id要改成自己选择模板的对应id。

用户同意订阅之后,就可以在适当的时候(例如消息审核通过的时候)给用户推送服务通知。具体实现代码如下:

const cloud = require('wx-server-sdk')
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV,
})
​
module.exports = async function (params, context) {
  try {
    const result = await cloud.openapi({appid: context.env.currentAppId}).subscribeMessage.send({
        "touser": context.env.currentOpenId,
        "page": 'changePage',
        "lang": 'zh_CN',
        "data": {
          "thing1": {
            "value": params.thing1
          },
          "thing4": {
            "value": params.thing4
          },
          "time6": {
            "value": params.time6
          },
          "thing7": {
            "value": params.thing7
          }
        },
        "templateId": params.templateId,
        "miniprogramState": 'trial'
      })
    return result
  } catch (err) {
    return err
  }
};

需要注意的是,选择的一次性模板每次都要用户先同意才可以发送消息通知,长期模板只需要用户同意一次就可以完成推送,但是长期模板目前只支持一些特定行业,大家可以酌情选择。

  • 公众号消息推送

    由于公众号和小程序的数据是两个部门的,我们要利用公众号推送消息的时候就要使用公众号的消息模板,具体推送方式也是有区别的,要获取的公众号的APPID和APPSECRET以及当前微搭的环境,然后可以根据微信官方的文档请求公众号的一些信息进行推送。

image-20230722103602376.png

image-20230722103641452.png

'use strict';
​
const axios = require('axios');
​
const { init } = require("@cloudbase/node-sdk");
​
​
​
const app = init({
​
  env: "微搭环境"
​
});
​
​
​
const db = app.database();
​
const _ = db.command;
​
​
​
exports.main = async (event, context) => {
​
  console.log("Hello World");
​
  try {
​
•    const APPID = "";
​
•    const APPSECRET = "";
​
•    const tokenUrl = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${APPID}&secret=${APPSECRET}`;
​
•    console.log(111, tokenUrl);
​
​
​
•    const tokenResponse = await axios.get(tokenUrl);
​
•    if (tokenResponse.status === 200) {
​
•      const tokenData = tokenResponse.data;
​
•      console.log(222, tokenData);
​
​
​
•      const ACCESS_TOKEN = tokenData.access_token;
​
​
​
•      const userListUrl = `https://api.weixin.qq.com/cgi-bin/user/get?access_token=${ACCESS_TOKEN}&next_openid=`;
​
•      const userListResponse = await axios.get(userListUrl);
​
•      if (userListResponse.status === 200) {
​
•        const userListData = userListResponse.data;
​
•        const total = userListData.total;
​
•        const openidList = userListData.data.openid;
​
•        const nextOpenid = userListData.next_openid;
​
•        
​
•        console.log("Total users:", total);
​
•       // console.log("User IDs:", openidList);
​
​
​
•        for (const openid of openidList) {
​
•          const requestData = {
​
•            "touser": openid,
​
•            "template_id": "模板id",
​
•            "miniprogram": {
​
•              "appid": "wx5883cb3b0cb51b6b",
​
•              "page": "index"
​
•            },
​
•            "data": {
​
•              "first": {
​
•                "value": "通知"
​
•              },
​
•              "keyword1": {
​
•                "value": ""
​
•              },
​
•              "keyword2": {
​
•                "value": ""
​
•              },
​
•              "keyword3": {
​
•                "value": new Date().toLocaleDateString('zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit' })
​
•              },
​
•              "remark": {
​
•                "value": ""
​
•              }
​
•            }
​
•          };
​
​
​
•          const sendMessageUrl = `https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=${ACCESS_TOKEN}`;
​
•          const sendMessageResponse = await axios.post(sendMessageUrl, requestData);
​
•           if (sendMessageResponse.status === 200) {
​
•             console.log("Message sent successfully!"); 
​
•           }
​
•        }
​
•      }
​
•    }
​
  } catch (error) {
​
•    console.log(444, error);
​
•    return error;
​
  }
​
​
​
  return event;
​
};

以上信息有不熟悉的地方欢迎与我们可爱鲸联系。需要了解数字化信息,数字化转型也欢迎一起沟通交流。

可爱鲸官网:keaijing.com.cn/