微信公众号推送消息笔记

根据业务需要,开发一个微信公众号的相关开发,根据相关开发和整理总结了一下相关的流程和需要,进行一些整理和总结分享给大家,最近都在加班和忙碌,博客已经很久未更新了,打气精神,再接再厉,申请、认证公众号的一系列流程就不在这里赘述了,主要进行的是技术的分享,要达到的效果如下图:

在这里插入图片描述

设置access_token

公众号的开发的所有操作的前提都是先设置access_token,在于验证操作的合法性,所需要的token在公众号后台的目录中获取:公众号-设置与开发-基本设置 设置和查看:

#POST https://api.weixin.qq.com/cgi-bin/token
{
    "grant_type": "client_credential",
    "appid": "开发者ID(AppID)",
    "secret": "开发者密码(AppSecret)"
}

返回的access_token,过期时间2个小时,Http url 返回结构如下:

{
    "access_token": "82_W8kdIcY2TDBJk6b1VAGEmA_X_DLQnCIi5oSZBxVQrn27VWL7kmUCJFVr8tjO0S6TKuHlqM6z23nzwf18W1gix3RHCw6uXKAXlD-pZEO7JcAV6Xgk3orZW0i2MFMNGQbAEARKU", 
    "expires_in": 7200
}

为了方便起见,公众号平台还开放了一个稳定版的access_token,参数略微有不同。

POST https://api.weixin.qq.com/cgi-bin/stable_token
{
    "grant_type": "client_credential",
    "appid": "开发者ID(AppID)",
    "secret": "开发者密码(AppSecret)",
    "force_refresh":true
}

自定义菜单

第一个疑惑是公众号里的底部菜单 是怎么搞出来的,在官方文档中获取到的,如果公众号后台没有设置可以根据自定义菜单来进行设置。

1、创建菜单,参数自己去官方文档上查阅

POST https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN

2、查询菜单接口,文档和调试工具给的有点不一样,我使用的是调试工具给出的url

GET https://api.weixin.qq.com/cgi-bin/menu/get?access_token=ACCESS_TOKEN

3、删除菜单

GET https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=ACCESS_TOKEN

事件拦截

在公众号的开发后台里会设置一个Url,每次在操作公众号时都会回调接口,用事件去调用和处理,操作公众号后,微信公众平台会请求到设置的接口上,公众号的openid 比较重要,是用来识别用户身份的唯一标识,openid即当前用户。

{
    "signature": "d43a23e838e2b580ca41babc78d5fe78b2993dea",
    "timestamp": "1721273358",
    "nonce": "1149757628",
    "openid": "odhkK64I1uXqoUQjt7QYx4O0yUvs"
}

用户进行相关操作时,回调接口会收到这样一份请求,都是用MsgType和Event去区分,下面是关注的回调:

{
    "ToUserName": "gh_d98fc9c8e089",
    "FromUserName": "用户openID",
    "CreateTime": "1721357413",
    "MsgType": "event",
    "Event": "subscribe",
    "EventKey": []
}

下面是点击菜单跳转的回调:

{
    "ToUserName": "gh_d98fc9c8e089",
    "FromUserName": "用户openID",
    "CreateTime": "1721381657",
    "MsgType": "event",
    "Event": "VIEW",
    "EventKey": "https:\/\/zhjy.rchang.cn\/api\/project_audit\/getOpenid?type=1",
    "MenuId": "421351906"
}

消息推送

消息能力是公众号中最核心的能力,我们这次主要分享2个,被动回复用户消息和模板推送能力。

被动回复用户消息

被动回复用户消息,把需要的参数拼接成xml格式的,我觉得主要是出于安全上的考虑作为出发点。

<xml>
  <ToUserName><![CDATA[toUser]]></ToUserName>
  <FromUserName><![CDATA[fromUser]]></FromUserName>
  <CreateTime>12345678</CreateTime>
  <MsgType><![CDATA[text]]></MsgType>
  <Content><![CDATA[你好]]></Content>
</xml>

在php代码里的实现即为:

protected function subscribe($params)
{
    $time = time();
    $content = "发送的文字内容";
    $send_msg = '<xml>
            <ToUserName><![CDATA['.$params['FromUserName'].']]></ToUserName>
            <FromUserName><![CDATA['.$params['ToUserName'].']]></FromUserName>
            <CreateTime>'.time().'</CreateTime>
            <MsgType><![CDATA[text]]></MsgType>
            <Content><![CDATA['.$content.']]></Content>
        </xml>';

    echo $send_msg;
    return false;
}
模板推送能力

模版推送的两个关键是申请了模版,还有就是模版的data需要和模版中的一致,才能成功发送,模版设置和申请的后台位置在 广告与服务-模版消息

public function project_message()
{
	$touser = '发送人公众号openid';
	$template_id = '模版ID';
	$url = 'https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=' . $this->access_token;
	$details_url = '点开链接,需要跳转的详情url';
	$thing1 = '模版里定义的参数';
	$time2 = '模版里定义的参数';
	$const3 = '模版里定义的参数';
	$send_data = [
		'touser' => $touser,
		'template_id' => $template_id,
		'url' => $details_url,
		'data' => [
			'thing1' => ['value' => $thing1],
			'time2' => ['value' => $time2],
			'const3' => ['value' => $const3],
		]
	];

	$result = curl_json($url, $send_data);
}

错误及解决方式

1、公众号后台: 设置与开发-安全中心-IP白名单 把IP地址加入白名单即可。

{
    "errcode": 40164,
    "errmsg": "invalid ip xx.xx.xx.xx ipv6 ::ffff:xx.xx.xx.xx, not in whitelist rid: 6698ef60-27d10c40-100819f9"
}

2、模版参数不正确时,接口返回

{
    "errcode": 47003,
    "errmsg": "argument invalid! data.time5.value invalid rid: 669df26e-538a8a1a-15ab8ba4"
}

3、access_token不正确

{
    "errcode": 40001,
    "errmsg": "invalid credential, access_token is invalid or not latest, could get access_token by getStableAccessToken, more details at https://mmbizurl.cn/s/JtxxFh33r rid: 669df2f1-74be87a6-05e77d20"
}

4、access_token超过调用次数

{
    "errcode": 45009,
    "errmsg": "reach max api daily quota limit, could get access_token by getStableAccessToken, more details at https:\/\/mmbizurl.cn\/s\/JtxxFh33r rid: 669e5c4c-2bb4e05f-61d6917c"
}

文档参考

公众号开发文档首页: https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html

分享一个微信公众号的调试工具地址,特别好用 : https://mp.weixin.qq.com/debug/

### Vue 实现微信公众号推送消息 在Vue项目中集成微信公众号消息推送功能涉及多个方面的工作。为了成功实现这一目标,开发者需遵循特定流程和技术要点。 #### 准备工作 获取必要的凭证是第一步操作的关键所在。这包括申请一个微信公众号,并从中取得`AppID`和`AppSecret`两个重要参数[^2]。这些信息将在后续开发过程中频繁使用到,因此建议妥善保存。 #### 配置服务器端环境 由于微信官方并不直接支持前端发起请求来发送模板消息,所以通常情况下会采用通过后端服务作为中介的方式来进行处理。这意味着,在Vue应用之外还需要搭建一套能够接收来自前端指令并向微信公众平台发出HTTP POST请求的服务逻辑。可以考虑利用Node.js或其他任何适合构建RESTful API的技术栈来创建这样的中间层。 对于具体的接口设计而言,假设已经有一个基于Spring Boot框架建立起来的后台系统,则可以在其中定义如下形式的方法用于触发向指定用户发送通知: ```java @PostMapping("/sendTemplateMessage") public ResponseEntity<String> sendTemplateMessage(@RequestBody Map<String, String> params){ // 处理业务逻辑... } ``` 此部分的具体编码细节取决于所选用的语言及框架特性,请参照相应文档进行调整优化。 #### 前端调用示例 当上述准备工作完成后,便可在Vue组件内部编写相应的函数用来触发表单提交动作或是其他交互行为之后立即调用刚才提到的那个自定义API路径。下面给出了一段简单的JavaScript代码片段展示如何执行异步POST请求: ```javascript async function sendMessage() { try{ const response = await axios.post('/api/sendTemplateMessage',{ "touser": "OPENID", "template_id":"TEMPLATE_ID" }); console.log(response.data); }catch(error){ console.error('Error:', error); } } ``` 请注意替换实际环境中对应的URL地址以及传递给服务器的数据结构以匹配预期输入格式要求。 #### 关于模板消息本身的内容定制化 最后但同样重要的一步是要熟悉并掌握有关于设置个性化文案、链接跳转等功能的知识点。这部分内容可以直接参阅由腾讯公司提供的《[模板消息推送](https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Service_Center_messages.html)》指南中的说明[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

stark张宇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值