1. 程式人生 > >nodejs傳送小程式模板訊息

nodejs傳送小程式模板訊息

一、微信小程式模板訊息說明

傳送門

二、傳送模板訊息流程

自己實現的功能主要是發貨後給使用者傳送模板訊息的功能。首先在小程式後臺配置模板,然後,在使用者提交訂單的時候利用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端的本地,手機上測試無法呼叫介面,所以只能從手機上獲取後,然後寫死測試。

結果: