消息推送----微信小程序,公众号

##微信公众号,和微信小程序是微信的两款单独的产品,各自拥有一套openid,用来发送消息
一.微信小程序发推送消息只有在以下情况:
1.微信支付回调;
2.提交form表单的时候;

微信小程序获取openid步骤(官网api文档都有):

	官网api文档地址:https://developers.weixin.qq.com/miniprogram/dev/api/
	1.调用接口wx.login() 获取临时登录凭证(code)会返回
	2.请求 https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
	参数说明:appid 小程序唯一标识    secret 小程序的 app secret
			js_code	登录时获取的 code  grant_type	填写为 authorization_code

微信公众号获取openid步骤(官网api文档都有):

	官网api文档地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432
	1.先获取公众号的accessToken(appid,secret填写微信公众号的,跟小程序不一样,切记)
	  https请求方式: GET
		https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
	2.获取用户的openid
	  微信公众号提供获取用户列表接口(即获取所有关注该微信公众号的用户信息)
	  请求地址https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID
	  如果想获取整个用户列表的openid,next_openid=即可,即https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=
	3.获取用户基本信息  
	  接口调用请求说明
		http请求方式: GET
		https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

ok,小程序的openid,公众号的openid都到手了(小满足),BUT, 要想打通小程序,公众号,光有各自的openid并没有什么用,因为两套产品,各自都只维护自己的openid,so,腾讯搞出了一套unionid机制,即腾讯旗下所有产品相对于用户来说,都存在一个唯一标识就是unionid,如何获取unionid?注册一个开发者账号,绑定公众号,小程序,即指定小程序,公众号在同一开发者下,这样在获取公众号openid,小程序openid都会返回unionid(真的是一样的,开心),这样数据库存储公众号,小程序的openid,unionid,通过反查出公众号的openid,就可以在公众号发模板消息了…(小程序触发事件,向公众号推送模板消息)
走一波,封装参数:

http请求方式: POST 
https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN

	POST数据
	{
       "touser":"OPENID",
       "template_id":"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY",
       "url":"http://weixin.qq.com/download",  
       "miniprogram":{
         "appid":"xiaochengxuappid12345",
         "pagepath":"index?foo=bar"
       },          
       "data":{
               "first": {
                   "value":"恭喜你购买成功!",
                   "color":"#173177"
               },
               "keyword1":{
                   "value":"巧克力",
                   "color":"#173177"
               },
               "keyword2": {
                   "value":"39.8元",
                   "color":"#173177"
               },
               "keyword3": {
                   "value":"2014年9月22日",
                   "color":"#173177"
               },
               "remark":{
                   "value":"欢迎再次购买!",
                   "color":"#173177"
               }
       }
   }
   这里的access_token是微信公众号的
   注意事项:
			  pagepath   不能用 / 开头 (小程序的跳转页面链接)
			  appid 使用小程序的appid  

java 对象封装(个人不建议使用map封装,建议采用对象封装)

	    import lombok.Getter;		
		import lombok.Setter;
		import java.util.Map;
		@Getter
		@Setter
		public class WechatTemplate {
		    private String touser;
		    private String template_id;
		    private String url;
		    private Map<String, TemplateData> data;
		    private MiniprogramData miniprogram;
		}

		@Getter
		@Setter
		public class TemplateData {
	    private String value;
	    private String color;
		}

		@Setter
		@Getter
		public class MiniprogramData {
		    private String appid;
		    private String pagepath;
		}
### 微信小程序集成公众号消息推送教程 #### 一、准备工作 确保已经拥有并配置好微信公众号以及小程序账号,在微信公众平台上完成相应设置。这包括但不限于获取AppID和AppSecret等必要参数,这些将在后续开发过程中频繁使用[^3]。 #### 二、引入官方组件 在页面中添加`<official-account>`标签用于展示关联的小程序入口,并通过事件绑定函数处理加载逻辑: ```html <!-- wxml 文件 --> <view> <!-- 关联已认证的服务号或订阅号 --> <official-account bindload="onOfficialAccountLoad"></official-account> </view> ``` ```javascript // js文件 Page({ onOfficialAccountLoad(e) { console.log('Official account loaded:', e.detail); } }); ``` 此部分操作允许用户从小程序内部访问指定的公众号资料页,从而促进两者之间的互动。 #### 三、服务器端对接口的支持 对于希望向关注者发送模板消息的情况,则需依赖于后端服务来调用微信API接口。这里推荐采用Spring Boot框架构建RESTful API作为中介层,负责接收来自前端请求并向微信服务器发起HTTP POST请求以触发具体的消息推送行为[^1]。 - **创建Controller类** ```java @RestController @RequestMapping("/wx") public class WxMessageController { @Autowired private WxMpService wxMpService; @PostMapping("/sendTemplateMsg") public ResponseEntity<String> sendTemplateMsg(@RequestBody Map<String, String> params){ try{ // 构建模板数据对象... WxMpTemplateMessage templateMessage = new WxMpTemplateMessage(); // 设置模板id和其他属性... boolean result = wxMpService.getTemplateMsgService().send(templateMessage); if(result){ return ResponseEntity.ok("Success"); }else{ return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Failed to send message."); } }catch(Exception ex){ log.error(ex.getMessage(),ex); return ResponseEntity.status(HttpStatus.BAD_REQUEST).build(); } } } ``` 上述代码片段展示了如何定义一个简单的控制器方法用来接受从前端传来的JSON格式的数据包,解析其中的信息填充到`WxMpTemplateMessage`实例里再经由MP SDK执行实际的通知动作。 请注意,以上仅为简化版示例,真实项目可能还需要考虑更多细节如安全性验证、错误重试机制等方面的设计。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值