[测试] hu60bot对接
@cherrydra,我在聊天室的发言他不回
https://www.chengyao.xyz
@hu60bot,使用开源库写一个微信模板消息推送功能。iris和微信sdk开源库
&wechat.Config是错误的了,应该是&offConfig.Config
参考一下这个代码package main
import (
"fmt"
"net/http"
wechat "github.com/silenceper/wechat/v2"
"github.com/silenceper/wechat/v2/cache"
offConfig "github.com/silenceper/wechat/v2/officialaccount/config"
"github.com/silenceper/wechat/v2/officialaccount/message"
)
func serveWechat(rw http.ResponseWriter, req *http.Request) {
wc := wechat.NewWechat()
//这里本地内存保存access_token,也可选择redis,memcache或者自定cache
memory := cache.NewMemory()
cfg := &offConfig.Config{
AppID: "xxx",
AppSecret: "xxx",
Token: "xxx",
//EncodingAESKey: "xxxx",
Cache: memory,
}
officialAccount := wc.GetOfficialAccount(cfg)
// 传入request和responseWriter
server := officialAccount.GetServer(req, rw)
//设置接收消息的处理方法
server.SetMessageHandler(msg)
//处理消息接收以及回复
err := server.Serve()
if err != nil {
fmt.Println(err)
return
}
//发送回复的消息
server.Send()
}
func msg(mixMessage message.MixMessage) message.Reply {
//TODO
//回复消息:演示回复用户发送的消息
text := message.NewText(mixMessage.Content)
return &message.Reply{MsgType: message.MsgTypeText, MsgData: text}
}
func main() {
http.HandleFunc("/", serveWechat)
fmt.Println("wechat server listener at", ":8001")
err := http.ListenAndServe(":8001", nil)
if err != nil {
fmt.Printf("start server error , err=%v", err)
}
}
一加8Pro
很抱歉,上面的代码是搭建一个微信公众号的基础服务,而非微信模板消息推送的代码。以下是一个使用iris和微信sdk开源库实现微信模板消息推送功能的参考代码:
package main
import (
"github.com/kataras/iris/v12"
"github.com/kataras/iris/v12/context"
"github.com/silenceper/wechat/v2"
"github.com/silenceper/wechat/v2/cache"
"github.com/silenceper/wechat/v2/officialaccount"
offConfig "github.com/silenceper/wechat/v2/officialaccount/config"
"github.com/silenceper/wechat/v2/officialaccount/message"
)
func main() {
app := iris.Default()
//设置微信公众号配置
memory := cache.NewMemory()
offCfg := &offConfig.Config{
AppID: "YOUR_APP_ID",
AppSecret: "YOUR_APP_SECRET",
Token: "YOUR_TOKEN",
Cache: memory,
}
offAccount := officialaccount.NewOfficialAccount(offCfg)
// 添加模板消息处理路由
app.Post("/send_template_message", func(ctx context.Context) {
// 解析POST请求内容
var messageData struct {
OpenID string `json:"openid"`
TemplateID string `json:"template_id"`
TemplateData map[string]string `json:"template_data"`
TemplateURL string `json:"template_url"`
MiniProgramData *message.MiniProgram `json:"miniprogram_data,omitempty"`
}
if err := ctx.ReadJSON(&messageData); err != nil {
ctx.StatusCode(iris.StatusBadRequest)
ctx.WriteString("Bad Request")
return
}
// 创建模板消息
template := message.NewTemplate(messageData.TemplateID)
template.SetData(messageData.TemplateData)
if messageData.TemplateURL != "" {
template.SetURL(messageData.TemplateURL)
}
if messageData.MiniProgramData != nil {
template.MiniProgram = messageData.MiniProgramData
}
// 发送模板消息
err := offAccount.TemplateMessage.
SendTemplateMessage(
messageData.OpenID,
template,
)
// 返回处理结果
if err != nil {
ctx.StatusCode(iris.StatusInternalServerError)
ctx.WriteString(err.Error())
} else {
ctx.JSON(iris.Map{"message": "OK"})
}
})
// 启动web服务
if err := app.Run(iris.Addr(":8080")); err != nil {
panic(err)
}
}
在代码中,我们首先创建了一个iris的默认应用,然后使用officialaccount.NewOfficialAccount函数创建了一个微信公众号的实例。接下来,我们添加了一个/send_template_message的POST请求处理路由,该路由用于接收模板消息参数,生成模板消息,并发送给指定的OpenID。最后,我们启动了web服务,监听在8080端口。
需要注意的是,由于模板消息的发送需要模板ID和接收人OpenID等敏感信息,因此我们建议使用HTTPS协议对数据进行加密传输,并使用服务器端证书验证和加密消息体的方式对消息进行加密和安全验证。
很抱歉,我是一个AI语言模型,并不具备发送钉钉消息的能力。以下是一段PHP代码,可以实现钉钉自动回复消息的功能:
<?php
//钉钉机器人api地址
$url = "https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxxxxxxx";
//要发送的消息,可以根据实际情况修改
$message = array(
'msgtype' => 'text',
'text' => array(
'content' => '这是钉钉自动回复的消息'
)
);
//将消息转换为json格式
$message_string = json_encode($message);
//发送post请求
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $message_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json;charset=utf-8'));
$result = curl_exec($ch);
//输出结果,可以根据需要进行调整
echo $result;
//关闭curl
curl_close($ch);
?>
需要注意的是,此处的access_token需要替换为自己的机器人access_token,可以在钉钉开发者后台获取。此外,还需要根据实际情况修改$message数组中的消息内容。
@风影,很抱歉,我是一个AI语言模型,并不具备发送钉钉消息的能力。以下是一段PHP代码,可以实现钉钉定时发送消息的功能:
<?php
//钉钉机器人api地址
$url = "https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxxxxxxx";
//要发送的消息,可以根据实际情况修改
$message = array(
'msgtype' => 'text',
'text' => array(
'content' => '这是定时发送的消息'
)
);
//将消息转换为json格式
$message_string = json_encode($message);
//定时发送消息
$send_time = strtotime("2021-11-11 11:11:11"); //设定发送时间
$current_time = time();
$delay = $send_time - $current_time; //计算延迟时间
if($delay > 0){
sleep($delay); //延迟发送
}
//发送post请求
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $message_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json;charset=utf-8'));
$result = curl_exec($ch);
//输出结果,可以根据需要进行调整
echo $result;
//关闭curl
curl_close($ch);
?>
需要注意的是,此处的access_token需要替换为自己的机器人access_token,可以在钉钉开发者后台获取。此外,还需要根据实际情况修改$message数组中的消息内容和$send_time变量中的发送时间。
此代码实现的是一次性的定时任务,如果需要循环定时发送消息,可以将上述代码封装成一个函数,并使用定时器定时调用该函数,实现循环定时发送的功能。
@风影,以下是一段简易的PHP聊天室代码,基于WebSocket实现,需要浏览器支持WebSocket协议。
服务端代码:
<?php
//设置端口号
$port = 9502;
//创建WebSocket服务器对象
$server = new swoole_websocket_server("0.0.0.0", $port);
//监听WebSocket连接打开事件
$server->on('open', function (swoole_websocket_server $server, $request) {
echo "client {$request->fd} connected\n";
});
//监听WebSocket消息事件
$server->on('message', function (swoole_websocket_server $server, $frame) {
echo "received message: {$frame->data}\n";
//广播消息
foreach($server->connections as $client){
if($client != $frame->fd){
$server->push($client, $frame->data);
}
}
});
//监听WebSocket关闭事件
$server->on('close', function ($ser, $fd) {
echo "client {$fd} closed\n";
});
//启动WebSocket服务器
echo "WebSocket Server is listening on port {$port}\n";
$server->start();
客户端代码:
<html>
<head>
<title>WebSocket Chat Room</title>
<script>
var ws = new WebSocket("ws://localhost:9502/");
ws.onopen = function(e){
console.log("Connected");
};
ws.onmessage = function(e){
var chat_box = document.getElementById("chat-box");
chat_box.innerHTML += e.data + "<br>";
chat_box.scrollTop = chat_box.scrollHeight;
};
ws.onclose = function(e){
console.log("Disconnected");
};
function send_message(){
var message_box = document.getElementById("message-box");
var message = message_box.value.trim();
if(message.length == 0){
return;
}
message_box.value = "";
var current_time = new Date();
var timestamp = current_time.getHours() + ":" + current_time.getMinutes() + ":" + current_time.getSeconds();
var message_string = "[" + timestamp + "] " + message;
ws.send(message_string);
}
</script>
</head>
<body>
<h1>WebSocket Chat Room</h1>
<div id="chat-box" style="height: 300px; overflow: auto;"></div>
<br>
<input type="text" id="message-box" size="50" onkeypress="if(event.keyCode==13) send_message();">
<button onclick="send_message()">Send</button>
</body>
</html>
在运行上述服务端代码时,需使用Swoole扩展。可以在终端中输入如下命令安装swoole扩展:
sudo pecl install swoole
然后,在终端中输入如下命令启动服务器:
php websocket_chat_server.php
在浏览器中打开客户端页面,即可参与聊天室的聊天。需要注意的是,此聊天室没有用户认证和安全控制,不建议部署到生产环境中。如果需要安全控制和用户认证,可以在服务器端添加相应的逻辑。
@cherrydra,嗯嗯。
一加8Pro