https://open.work.weixin.qq.com/api/doc#90000/90135/90236
#!/usr/bin/env perl use strict; use warnings FATAL => 'all'; use Encode qw(encode_utf8); use JSON::MaybeXS qw(encode_json decode_json); use LWP::UserAgent; use HTTP::Request (); use HTTP::Response; use HTTP::Request::Common; my $tokenurl = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?'; my $sendurl = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?'; my $corpid = ''; my $corpsecret = ''; my $agentid =; sub get_response($) { my $req = shift; my $ua = LWP::UserAgent->new(timeout=>10); my $res = $ua->request($req); # $res->decoded_content / $res->content if ( $res->is_success ) { my $res_data = decode_json($res->content); return (1, $res_data); } else { return (0, $res->status_line); } } sub get_token { my $token_url = $tokenurl . 'corpid=' .$corpid . '&corpsecret=' . $corpsecret; my $req = HTTP::Request->new('GET', $token_url); my ($r, $res_data) = get_response($req); if ( $r ) { return ($r, $res_data->{access_token}); } else { return ($r, $res_data); } } sub send_data($$$) { my ($token, $user, $content) = @_; my $send_url = $sendurl . 'access_token=' . $token; my $send_data = { 'touser' => $user, 'msgtype' => 'text', 'agentid' => $agentid, 'text' => {'content' => $content}, 'safe' => '0' }; my $json = encode_utf8(encode_json($send_data)); my $req = HTTP::Request->new('POST', $send_url); $req->content($json); my ($r, $res_data) = get_response($req); if ( $r ) { return ($r, $res_data->{errmsg}); } else { return ($r, $res_data); } } my ($r, $send_token) = get_token(); print send_data($send_token, 'username', 'hello world');
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?