1. 程式人生 > 其它 >Node.js開發微信公眾號4 - 傳送模板

Node.js開發微信公眾號4 - 傳送模板

技術標籤:vuenodejswebsocketajaxpost

1.先要在後臺建立一個自定義模板

模板內容如下

{{first.DATA}}
姓名:{{keyword1.DATA}}
性別:{{keyword2.DATA}}
體溫:{{keyword3.DATA}}
{{remark.DATA}}

2.傳送模板服務,此服務需要請求攜帶使用者引數使用者自定義模板內容

router.post("/sendTemplateMsg", async (req, res, next) => {
  try {
    // 接受h5請求的使用者引數
    const infoData = req.body
    // 獲取access_token
    const { access_token } = await accessToken.fetchAccessToken()
    // 傳送模板
    await sendTemplateMsg(infoData, access_token)
    res.send({
      state: "success",
      msg: "模板訊息推送成功",
    })
  } catch (error) {
    console.log("模板訊息推送失敗:" + error)
    next(error)
  }
})

3.傳送模板核心程式碼,會根據對應使用者open_id 傳送對應使用者公眾號

const rp = require("request-promise-native") //傳送請求

class Template {
  constructor() {}
  sendTemplateMsg(userInfo, access_token) {
    const url = `https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=${access_token}`
    const requestData = {
      touser: userInfo.openid, //openid
      template_id: "xxx", //模板id
      url: userInfo.avatar, //跳轉url
      data: { //模板資料
        first: {
          value: "身份資訊",
          color: "#173177",
        },
        keyword1: {
          value: userInfo.nickname,
          color: "#1d1d1d",
        },
        keyword2: {
          value: userInfo.sex === 1 ? "男" : "女",
          color: "#1d1d1d",
        },
        keyword3: {
          value: userInfo.phone,
          color: "#1d1d1d",
        },
        remark: {
          value: userInfo.msg,
          color: "#173177",
        },
      },
    }

    const options = {
      url,
      method: "POST",
      json: true,
      headers: {
        "content-type": "application/json",
      },
      body: requestData,
    }

    return new Promise((resolve, reject) => {
      rp(options)
        .then(() => {
          console.log("傳送模板成功")
          resolve()
        })
        .catch((err) => {
          console.log(`傳送模板失敗: ${err}`)
          reject(err)
        })
    })
  }
}

const template = new Template()

module.exports = template