微信小程序通过微信服务号(公众号)发送模板消息

前期准备条件:开放平台微信认证、服务号微信认证、找到或生成对应模板 (做过事件推送则可省略大部分操作,将用户关注时的信息入库,openID)
整体逻辑:注册开微信放平台账号(要通过微信认证)、开发微信小程序(需要用户通过微信授权登录小程序保存用户的openID和unionID)、申请微信服务号(公众号并要通过微信认证),并将微信小程序和公众号绑定在同一开放平台下,因为同一开放平台下的同一微信用户的unionID相同,而微信小程序和公众号的openID不相同,发送的模板消息是根据公众号用户的openID发送。

以下示例我是通过小程序端(前端)实现的,仅作为调用方法的参考,后续应该迁移到服务端,如果项目基础已经具备:小程序用户已经用微信授权登录过并且保存用户的openID和unionID,首次获取公众号关注列表(可有可无,如果之前没人关注过就可省去),通过服务端监听公众号用户关注或取消关注并将公众号用户的openID和unionID保存,通过unionID将小程序用户和公众号用户关联起来,如果取消关注关联关系理应取消,不然发出去消息用户接收不到。
当小程序端产生需要发送模板消息的业务时,通过unionID找到公众号用户的openID按照示例直接发送即可。如有疑问可私信。

1.获取公众号access_token
文档地址
uni.request({
	url: 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=你的APPID&secret=你的APPsecret',
	method: 'GET',
	success: res => {
		console.log(res)
		let access_token = res.data.access_token
	},
	fail: res => {
		console.log(res);
	}
})
返回值
{
	"access_token":"ACCESS_TOKEN",
	"expires_in":7200
}
2.获取公众号关注者列表
文档地址
uni.request({
	url: 'https://api.weixin.qq.com/cgi-bin/user/get?next_openid=&access_token=' + access_token,
	method: 'GET',
	success: res => {
		console.log(res)
	},
	fail: res => {
		console.log(res);
	}
})
返回值
{
    "total":2,
    "count":2,
    "data":{
    "openid":["OPENID1","OPENID2"]},
    "next_openid":"NEXT_OPENID"
}
3.根据openid获取用户信息
文档地址
(1).获取1个用户信息
uni.request({
	url: "https://api.weixin.qq.com/cgi-bin/user/info?access_token=" + access_token + "&openid=用户openID" + "&lang=zh_CN",
	method: 'GET',
	success: res => {
		console.log(res)
	},
	fail: res => {
		console.log(res);
	}
})
返回值
{
    "subscribe": 1, 
    "openid": "", 
    "nickname": "", 
    "sex": 1, 
    "language": "", 
    "city": "", 
    "province": "", 
    "country": "", 
    "headimgurl":"头像",
    "subscribe_time": ,
    "unionid": " "
    "remark": "",
    "groupid": 0,
    "tagid_list":[],
    "subscribe_scene": "",
    "qr_scene": 98765,
    "qr_scene_str": ""
}
(2).获取多个用户信息
uni.request({
	url: "https://api.weixin.qq.com/cgi-bin/user/info/batchget?access_token=" + access_token,
	method: 'POST',
	header: {
		"Content-Type": "application/json"
	},
	data: {
		"user_list": [{
			"openid": "",
			"lang": "zh_CN"
		}]
	},
	success: res => {
		console.log(res)
	},
	fail: res => {
		console.log(res);
	}
})	
返回值
{
   "user_info_list": [
       {
           "subscribe": 1, 
           "openid": "", 
           "nickname": "", 
           "sex": 1, 
           "language": "", 
           "city": "", 
           "province": "", 
           "country": "", 
           "headimgurl": "",
          "subscribe_time": , 
           "unionid": "", 
           "remark": "", 

           "groupid": 0,
           "tagid_list":[128,2],
           "subscribe_scene": "",
           "qr_scene": 98765,
           "qr_scene_str": ""

      }, 
       {
           "subscribe": 0, 
           "openid": ""
       }
   ]
}
3.发送模板消息详情
文档地址
let sendMessage ="https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + access_token
uni.request({
	url: sendMessage,
	method: 'POST',
	data: {
		"touser": "接收人openID",
		"template_id": "模板id",
		"miniprogram": {
			"appid": "跳转小程序APPID",
			"pagepath": "跳转到小程序某一界面路径"
		},
		"data": {
			"first": {
				"value": "您有一条单据需要审批!",
				"color": "#173177"
			},
			"keyword1": {
				"value": "",
				"color": "#173177"
			},
			"keyword2": {
				"value": "",
				"color": "#173177"
			},
			"keyword3": {
				"value": "1000.00元",
				"color": "#173177"
			},
			"keyword4": {
				"value": "",
				"color": "#173177"
			},
			"keyword5": {
				"value": "2014-11-10",
				"color": "#173177"
			},
			"remark": {
				"value": "请尽快处理!",
				"color": "#173177"
			}
		}
	},
	success: res => {
		console.log(res);
	},
	fail: res => {}
});
返回值
{
    "errcode":0,
     "errmsg":"ok",
     "msgid":200228332
  }
### 如何在微信公众号中设置和使用模板消息 #### 获取必要的配置参数 为了能够成功发送模板消息,开者需要提前准备好一些基本的配置项。这些配置项包括`appid`、`appsecret`、`token`以及`asekey`等基础安全验证信息[^2]。 #### 获取用户的OpenID 当涉及到向特定用户推送通知时,则还需要知道目标接收者的唯一标识符——即OpenID。通常情况下,在用户首次关注并授权给公众号之后便可以获得此值;对于调试目的而言,也可以通过访问服务号管理界面下的用户列表来手动查找所需的OpenID[^3]。 #### 创建自定义模板或选用预设样式 微信公众平台提供了多种行业专属的消息模版供选择,同时也允许创建个性化的消息格式以满足不同场景的需求。一旦决定了要使用的具体形式后,就应当记录下对应的`template_id`以便后续调用[^1]。 #### 发送模板消息 最后一步便是实际执行发送操作了。这可以通过调用微信提供的API接口实现,下面给出了一段简单的Python代码示例用于展示如何构建这样一个请求: ```python import requests import json def send_template_message(access_token, openid, template_id): url = f"https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={access_token}" data = { "touser": openid, "template_id": template_id, "url": "", # 可选字段:点击后的跳转链接 "miniprogram": { "appid":"", # 小程序 App ID (可为空) "pagepath":"" # 跳转到小程序路径(可为空) }, "data":{ # 自定义数据部分 "first": { "value":"您好", "color":"#0000FF" } } } response = requests.post(url=url,json=data).json() return response ``` 上述函数接受三个必需参数:`access_token`(用于身份认证),`openid`(收件人的唯一识别码) 和 `template_id`(所选模板的信息编号)
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值