微信小程序(模板消息)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_14993375/article/details/100576464

formid用过一次,立即失效,如果formid不使用,7天内天可以用

步骤:
1、获取用户openid (api
2、获取access_token(api
3、提交时获取formid
4、发送模板消息 (api

小程序代码:

// index.wxml
<form report-submit bindsubmit="formSubmit">
  <label>
  选择日期:
  <picker mode="date" value="{{date}}" start="2019-09-01" end="2022-09-01" bindchange="bindDateChange">
    <view class="picker">
      当前选择: {{date}}
    </view>
  </picker>
  </label>
  <label>商品名称:<input style="border:1px solid red" type="text" name="name" /></label>
  {{formId}}
  <button form-type='submit'>提交</button>
</form>
// app.js
let AppID = 'wx8ee7bbc68ab9eba4'
let AppSecret = '0c3ed148008d18401b5531fdfae8081a'

App({
  onLaunch: function () {
    let _that = this
      wx.login({
        success: function (res) {
       	 // 登录时获取code可以换取openid和session_key
          let code = res.code
          wx.request({
            url: 'https://cff.mynatapp.cc/api/getOpenid',
            method: 'POST',
            data: {
              code: res.code
            },
            success(res) {
              let { session_key, openid, access_token } = res.data.data
              _that.globalData.session_key = session_key,
              _that.globalData.openid = openid,
              _that.globalData.access_token = access_token
              wx.setStorageSync('openid', openid)
            }
          })
        }
      })
  },
  globalData: {
    openid: null,
    session_key: null,
    access_token: null
  }
})
//index.js
//获取应用实例
const app = getApp()

Page({
  data: {
    date:'2019-09-10',
    formId:null,
    obj:null,
    openid: null,
    session_key: null,
    access_token: null
  },
  bindDateChange:function(e){
    this.setData({
      date: e.detail.value
    })
  },
  formSubmit:function(e){
    wx.request({
      url: 'https://cff.mynatapp.cc/api/sendMessage',
      method: 'POST',
      data: {
        access_token: app.globalData.access_token,
        openid: app.globalData.openid,
        formId: e.detail.formId  // 点击按钮获取formId
      },
      header: {
        'content-type': 'application/json' // 默认值
      },
      success(res) {
        console.log(res)
      }
    })
  }
})

nodejs(koa2)代码:

//  index.js
const router = require('koa-router')()
const request  = require('superagent')
router.prefix('/api/')
let AppID = 'wx8ee7bbc68ab9eba4'
let AppSecret = '0c3ed148008d18401b5531fdfae8081a'

router.post('/getOpenid',async (ctx, next) => {
  let code = ctx.request.body.code
  // 1、获取openid
  let aUrl=`https://api.weixin.qq.com/sns/jscode2session?appid=${AppID}&secret=${AppSecret}&js_code=${code}&grant_type=authorization_code`
  let aRes = await request.get(aUrl)

  // 2、获取access_token
  let bUrl=`https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${AppID}&secret=${AppSecret}`
  let bRes = await request.get(bUrl)

  let { session_key, openid} = JSON.parse(aRes.text)
  let { access_token , expires_in } = JSON.parse(bRes.text)

  ctx.body = { 
    code: '200', 
    data:{
      session_key,
      openid,
      access_token,
      expires_in
    },
    msg: '操作成功'
  }
})


router.post('/sendMessage', async (ctx, next) => {
  let access_token = ctx.request.body.access_token
  let openid = ctx.request.body.openid
  let formId = ctx.request.body.formId
  console.log(ctx.request.body)
  let requestData ={
    "touser": openid,
    "template_id": 'hfMGUjT-OOOD0PKpud6UD7uDA9vEx1Fz2_Fp0g7KWRk',
    "page": "index",
    "form_id": formId,
    "data": {
        "keyword1": {
            "value": "喵眼电影院"
        },
        "keyword2": {
            "value": "2019年10月19日 12:30"
        },
        "keyword3": {
            "value": "广州市海珠区新港中路397号"
        } ,
        "keyword4": {
            "value": "50元"
        },
        "keyword5": {
            "value": "取票通知成功,闪开,我要开始装逼了"
        }
    },
    "emphasis_keyword": "keyword1.DATA"
  }

// 4、发送模板消息
  let res = await request
        .post(`https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=${access_token}`)
        .send(requestData)
        .set('Accept', 'application/json')
      //  console.log(res)
  ctx.body = { 
    code: '200', 
    data: null, 
    msg: '操作成功'
  }
})

module.exports = router

遇到的坑:
1、手机预览,请求数据必须用https
在这里插入图片描述

2、formid用完就失效,如果多次使用,可以收集formid保存到数据库
参考

收集formid


猜你喜欢

转载自blog.csdn.net/qq_14993375/article/details/100576464