1. 背景
今天遇到了一个需求,就是我们在wordpress上发布了新的文章,能不能自动在我们的App上推送一个新的Push。
所以就在本机搭建了一个springBoot,然后通过docker 启动了 wordpress 的实例。来实现webhook的功能。
2. 部署 wordpress webhook 插件 WP Webhooks
我们下载了 WP Webhooks 插件。并激活就可以了。
3. 配置WP Webhooks 的接收URL
在wordpress上的用户动态,文章动态,都可以进行相应的订阅行为,比如我们就在文章发布后,向我们的服务器发一条更新信息。
但我们的服务器是 在 docker外的,那怎么访问docker外的网址呢?
4. docker内怎么访问主机的网址服务
通过 如下网址 即可访问,127.0.0.1 不可用了,localhost 也不可以用了。
http://host.docker.internal:80/monitor/webhook
5. 我们再看看wordpress webhook 发送的具体参数
接收代码如下:
@PostMapping("/webhook")
public @ResponseBody
List<MonitorInfo> webhook(@RequestBody() Map<String, Object> params) {
// 参数获取
logger.info("参数获取");
logger.info("参数列表如下 {}", params);
logger.info("基于参数拼装Push数据 并发送");
return monitorService.findAll();
}
写一篇测试文章如上,标题,图片,类目都包括了。
6. spring boot 接收实现 webhook请求
2022-06-23 10:08:40.005 INFO 27542 --- [p-nio-80-exec-1] hello.MonitorController : 参数获取
2022-06-23 10:08:40.006 INFO 27542 --- [p-nio-80-exec-1] hello.MonitorController : 参数列表如下 {post_id=11, post={ID=11, post_author=1, post_date=2022-06:08:32, post_date_gmt=2022-06-23 02:08:32, post_content=<!-- wp:paragraph -->
<p>pcx content </p>
<!-- /wp:paragraph -->
<!-- wp:image {"id":12,"sizeSlug":"large","linkDestination":"none"} -->
<figure class="wp-block-image size-large"><img src="http://127.0.0.1:8080/wp-content/uploads/2022/06/哼唱搜索-1024x508.png" alt="哼唱搜索" class="wp-image-12"/></figure>
<!-- /wp:image -->, post_title=pcx title, post_excerpt=, post_status=publish, comment_status=open, ping_status=open, post_password=, post_name=pcx-title-2, to_ping=, pinged=, post_modified=2022-06-23 10:08:32, post_modified_gmt=2022-06-23 02:08:32, post_content_filtered=, post_parent=0, guid=http://127.0.0.1:8080/?p=11, menu_order=0, post_type=post, post_mime_type=, comment_count=0, filter=raw}, post_meta={_edit_lock=[1655950091:1], wpwhpro_create_post_temp_status_ssevening=[draft], _pingme=[1], _encloseme=[1], _thumbnail_id=[12]}, post_thumbnail=http://127.0.0.1:8080/wp-content/uploads/2022/06/哼唱搜索.png, post_permalink=http://127.0.0.1:8080/?p=11, taxonomies={category={uncatezed={term_id=1, name=未分类, slug=uncategorized, term_group=0, term_taxonomy_id=1, taxonomy=category, description=, parent=0, count=4, filter=raw}}}}
2022-06-23 10:08:40.006 INFO 27542 --- [p-nio-80-exec-1] hello.MonitorController : 基于参数拼装Push数据 并发送
<==========---> 80% EXECUTING [19m 4s]
> :bootRun
可以看到,webhook 是通过 把整段 Json完整的Post过来的一种方式。和 我们日常认知的 POST 和 GET 请求有一些不同。这一点大家注意。
最后,wordpress 非常的强大,做SEO的推荐大家用一用
webhook 的架构图
赛文市场营销