nodejs傳送小程式模板訊息
阿新 • • 發佈:2019-02-09
一、微信小程式模板訊息說明
二、傳送模板訊息流程
自己實現的功能主要是發貨後給使用者傳送模板訊息的功能。首先在小程式後臺配置模板,然後,在使用者提交訂單的時候利用form表單,把formid和訂單資料傳給後端,然後後端一起儲存到資料庫訂單表中。發貨後,呼叫小程式傳送模板介面進行模板訊息下發就可以了。(這裡需要注意:formid有7天的有效時間,所以發貨通知需在7天之內進行通知,否則無效)
主要的nodejs程式碼:
/* * 小程式傳送模板訊息 * */ var express = require('express'); var app = express(); var request = require('request'); var appId = '自己的小程式appid'; var appSecret = '自己的小程式APPsecret'; app.get('/getformid',function(req,res){ //res.send('hello world!!!') var code = req.query.code; var formid = req.query.formid; console.log(formid) request('https://api.weixin.qq.com/sns/jscode2session?appid='+appId+'&secret='+appSecret+'&js_code='+code+'&grant_type=authorization_code',function(error,response,body){ if(!error && response.statusCode === 200){ //通過前端傳過來的code獲取openID console.log(body,'獲取openID返回的資訊') var bodyJson = JSON.parse(body); //獲取access_token request('https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='+appId+'&secret='+appSecret,function(error2,response2,body2){ if (!error2 && response2.statusCode == 200) { console.log(body2,'獲取access_token返回的資料') var bodyJson2 = JSON.parse(body2); var requestData = { touser: bodyJson.openid, //要通知的使用者的openID form_id: 1540380591153, //儲存的form_id,因為編輯器無法獲取到,只能真機測試才可以,所以只能從真機測試後拿過來寫死 template_id: "EVKZI7sq4vuEh_b0kmi--RiCC_ib_RAikRO_dadnmCU", //模板id data: { //要通知的模板資料 "keyword1": {"value":"2018-10-24"}, "keyword2": {"value":"順豐"}, "keyword3": {"value":"28orudfs0808uosdufou"}, "keyword4": {"value":"發貨通知成功,閃開,我要開始裝逼了"} } }; request({ //呼叫介面進行模板訊息傳送 url: 'https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token='+bodyJson2.access_token, method: 'POST', json: true, headers: { "content-type": "application/json", }, body: requestData, },function(error3,response3,body3){ if (!error3 && response3.statusCode == 200) { console.log(body3,'傳送訊息返回的引數') } }) } }) } }) }) var server = app.listen(8087,function(){ var host = server.address().address; var port = server.address().port; console.log('應用例項,訪問地址為http://%s:%s',host,port) })
這裡因為是自己做的一個demo,所以,前端還需要呼叫wx.login把code傳送到後端,然後後端通過呼叫微信的介面code2Session來獲取使用者的openID,然後通過呼叫getAccessToken介面,獲取到accesstoken後就可以呼叫傳送模板訊息介面sendTemplateMessage傳送訊息了。
這裡的formid寫死是因為,在編輯器上無法獲取到formid,會提示"the formId is a mock one",只能從真機上測試獲取,而自己的node檔案又是跑在pc端的本地,手機上測試無法呼叫介面,所以只能從手機上獲取後,然後寫死測試。
結果: