You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mabbs/_posts/2021-03-23-wxpush.md

66 lines
5.4 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
layout: post
title: 亲自体验微信推送的制作感受
tags: [微信, 推送]
---
感谢大佬完成了最复杂的部分😂<!--more-->
# 起因
我在上个月写了一个[Server酱Mini测试号版](/2021/02/02/serverchan.html),在此之后有位叫做[guanzi008](https://github.com/guanzi008)大佬看到了我的文章并愿意给我提供一个有微信认证的公众号让我体验一下Server酱的实际制作过程对此我表示非常感谢把最复杂的事情做完了。像那个Server酱那个平台说过Ta唯一做的事情就是注册了一个有微信认证的公众号而已毕竟微信开放文档傻子都能看懂没什么技术难度。
正好这次有了这个机会,我就可以真正体验一下测试号和通过了微信认证的服务号之间到底有什么样的区别。
# 实际体验
我以前虽然没有微信认证的公众号,不过曾经有用过同学注册的一个个人的公众号,那个是真的废物,接口几乎全都不能用……现在有了微信认证的公众号之后发现虽然这个非常不错,功能基本上该有的都有了,不过有一些地方还是和测试号各有千秋。比如说测试号的监察要松的多,像模板消息根本没有限制,而且无论发什么东西都不用担心封号。而这个认证公众号的监察就要严的多,直接发违法消息肯定是别想了,就说模板消息还必须要用已有的模板,用没有的必须要通过审核。另外我感觉那个所谓的模板消息下线应该是烟雾弹,人家官方文档说的很清楚,**服务号订阅通知功能开启灰度测试,模板消息能力可正常使用**,所以不用太担心。
那个所谓的订阅通知的功能我已经试过了很烂要想推送必须要让用户同意而且是每一次也就是说用户同意一次才有一次的通知权所以说就很废物。倒是有一个长期订阅就是搞起来非常麻烦。还好模板消息目前来看是只要申请就可以使用。所以接下来我就完善了一下我之前在测试号上用的代码增加了Access Token缓存支持POST请求并且增加了摘要、HTML、Markdown等功能代码如下
```php
<?php
$appid='公众号APPID';
$secret='公众号Secret';
$userid=$_GET['userid'];
$template_id='模板ID';
$title=addslashes($_REQUEST['title']);
$summary=addslashes($_REQUEST['summary']);
$content=addslashes($_REQUEST['content']);
$addHTML="";
session_id('Storagepush');
session_start();
if(!$summary){
$summary=$content;
}
if(!json_decode(file_get_contents('https://api.weixin.qq.com/cgi-bin/get_api_domain_ip?access_token='.$_SESSION['access_token']),true)['ip_list']){
$_SESSION['access_token']=json_decode(file_get_contents('https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$secret),true)['access_token'];
}
if($_GET['type'] == "md"){
include_once("Parsedown.php");
$Parsedown = new Parsedown();
//$Parsedown->setSafeMode(true);
$content = $Parsedown->text($content);
$_GET['type'] = "html";
}
if($_GET['type'] == "html"){
$filename='html/'.md5(uniqid(mt_rand(), true)).'.html';
file_put_contents($filename, '<meta name="viewport" content="width=device-width, initial-scale=1"><title>'.$title.'</title><h1>'.$title.'</h1><hr>'.$content.'<hr><center>Powered By <a href="https://mabbs.github.io/">Mayx</a></center>');
$addHTML='"url":"https://'.$_SERVER['HTTP_HOST'].'/'.$filename.'", ';
}
echo file_get_contents('https://api.weixin.qq.com/cgi-bin/message/template/send?access_token='.$_SESSION['access_token'], false, stream_context_create(array('http' => array('method'=>'post','header'=>"Content-Type: application/json;charset=utf-8",'content'=>'{"touser":"'.$userid.'","template_id":"'.$template_id.'", '.$addHTML.'"data":{"first": {"value":"'.$title.'"}, "keyword1": {"value":"'.$summary.'"}, "keyword2": {"value":"'.date('Y-m-d H:i:s').'"}}}'))));
```
要想使用这个代码的话需要用到[Parsedown](https://github.com/erusev/parsedown)的库另外模板消息我用的是ID为`OPENTM207965242`的模板,如果有人想要用的话也建议用同一个模板。
另外对于用户的OPENID的获取……想用的话就自己想办法吧获取OPENID这种事情很简单。
从体验上来说应该是吊打Server酱那种垃圾而且还没有广告。理论上最大每日推送量是10w次当账号粉丝数超过10W/100W/1000W时模板消息的日调用上限会相应提升。不过这个不防滥用所以还是需要注意一点的。
# 使用文档
| 参数 | 是否必填 | 请求方法 | 内容 |
| - | - | - | - |
| userid | 是 | GET | 用户的OPENID |
| type | 否 | GET | html/md/空 |
| title | 否 | GET/POST | 标题 |
| summary | 否 | GET/POST | 摘要(不填默认为内容) |
| content | 否 | GET/POST | 内容 |
# 后续的改进
我目前用的公众号的所有人希望整一个像WxPusher的平台我大概看了一下那个东西果然还是个垃圾要推送必须用那个平台特有的API包括开源的那些乱七八糟的SDK也全部都是为那个所谓推送平台设计的另外模板的选择也是真的没什么品味体验实在是一般。所以目前似乎还没有一个像样的开源的微信推送平台那接下来就让我试试看吧我看看到底是为什么没有人愿意制作一个开源的微信推送平台吧