feat: 发送公众号文章消息

This commit is contained in:
hugy 2023-05-31 14:58:07 +08:00
parent 303ed1ade0
commit 59556cb703
6 changed files with 129 additions and 0 deletions

View File

@ -37,6 +37,9 @@
58.登录二维码
59.邀请入群
60.获取群/群成员详情
61.撤回消息
62.发送公众号消息
### 接口文档:
@ -1783,3 +1786,53 @@
``` javascript
{"code":1,"result":"OK"}
```
#### 62.发送公众号消息**
###### 接口功能
> 公众号文章分享/转发的功能
###### 接口地址
> [/api/?type=60](/api/?type=61)
###### HTTP请求方式
> POST JSON
###### 请求参数
|参数|必选|类型|说明|
|---|---|---|---|
|appname|string|消息xml中的appname|
|username|string|消息xml中的username|
|title|string|消息xml中的title文章的title|
|url|string|消息xml中的url文章的uerl|
|thumburl|string|消息xml中的thumburl缩略图|
|digest|string|消息xml中的digest|
|wxid|string|接收人wxid|
###### 返回字段
|返回字段|字段类型|说明 |
|---|---|---|
|code|int|返回状态,1成功, 非0失败|
|result|string|成功提示|
###### 接口示例
入参:
``` javascript
{
"appname": "电手",
"username": "gh_271633b4f577",
"title": "PC硬件、数码产品彻底反转搞机佬春天回来了",
"url": "http://mp.weixin.qq.com/s?__biz=Mzg3MzY2MjgxMg==&mid=2247712540&idx=1&sn=bd8e8b0d9f2753f3c34a2bfc01770510&chksm=ced16f2ff9a6e639cc9bb76631ff03487f86486f0f29fcf9f8bed754354cb20eda31cc894a56&scene=0&xtrack=1#rd",
"thumburl": "https://mmbiz.qpic.cn/sz_mmbiz_jpg/tpzwaqMCicQyEkBtLgibrKXVKD5gGUEtL00rJ2pxmpmmP9KgoBHiciamYhqZ0ff4kNlnPpnATqozxgRq4AtEzibo4iaw/640?wxtype=jpeg&wxfrom=0",
"digest": "这谁顶得住?",
"wxid": "filehelper"
}
```
响应:
``` javascript
{"code":0,"result":"OK"}
```

View File

@ -75,6 +75,7 @@ typedef enum HTTP_API_ROUTE {
WECHAT_INVITE_MEMBERS,
WECHAT_GET_MEMBER_PROFILE,
WECHAT_REVOKE_MSG,
WECHAT_FORWARD_PUBLIC_MSG,
} WECHAT_HTTP_APIS,
*PWECHAT_HTTP_APIS;

View File

@ -621,6 +621,19 @@ string Dispatch(struct mg_connection *c, struct mg_http_message *hm) {
ret = ret_data.dump();
break;
}
case WECHAT_FORWARD_PUBLIC_MSG:{
wstring wxid = GetWStringParam(j_param, "wxid");
wstring appname = GetWStringParam(j_param, "appname");
wstring username = GetWStringParam(j_param, "username");
wstring title = GetWStringParam(j_param, "title");
wstring url = GetWStringParam(j_param, "url");
wstring thumburl = GetWStringParam(j_param, "thumburl");
wstring digest = GetWStringParam(j_param, "digest");
int success = g_context.send_mgr->ForwardPublicMsg(WS2LPWS(wxid), WS2LPWS(title), WS2LPWS(url) , WS2LPWS(thumburl) ,WS2LPWS(username),WS2LPWS(appname),WS2LPWS(digest));
json ret_data = {{"code", success}, {"result", "OK"}};
ret = ret_data.dump();
break;
}
default:
json ret_data = {{"result", "ERROR"}, {"msg", "not support api"}};
ret = ret_data.dump();

View File

@ -235,4 +235,58 @@ int SendMessageMgr::ForwardMsg(wchar_t* wxid, unsigned long long msgid) {
}
return success;
}
int SendMessageMgr::ForwardPublicMsg(wchar_t* wxid, wchar_t* title, wchar_t* url, wchar_t* thumburl,wchar_t* senderId,wchar_t* senderName,wchar_t* digest) {
int success = -1;
char buff[0x238] = {0};
DWORD init_chat_msg_addr = base_addr_ + WX_INIT_CHAT_MSG_OFFSET;
DWORD app_msg_mgr_addr = base_addr_ + WX_APP_MSG_MGR_OFFSET;
DWORD new_item_addr = base_addr_ + NEW_MM_READ_ITEM_OFFSET;
DWORD free_item_2_addr = base_addr_ + FREE_MM_READ_ITEM_2_OFFSET;
DWORD forward_public_msg_addr = base_addr_ + FORWARD_PUBLIC_MSG_OFFSET;
__asm {
PUSHAD
PUSHFD
LEA ECX,buff
CALL new_item_addr
POPFD
POPAD
}
WeChatString to_user(wxid);
WeChatString wtitle(title);
WeChatString wurl(url);
WeChatString wthumburl(thumburl);
WeChatString wsender(senderId);
WeChatString wname(senderName);
WeChatString wdigest(digest);
memcpy(&buff[0x4], &wtitle, sizeof(wtitle));
memcpy(&buff[0x2c], &wurl, sizeof(wurl));
memcpy(&buff[0x6c], &wthumburl, sizeof(wthumburl));
memcpy(&buff[0x94], &wdigest, sizeof(wdigest));
memcpy(&buff[0x1A0], &wsender, sizeof(wsender));
memcpy(&buff[0x1B4], &wname, sizeof(wname));
__asm {
PUSHAD
PUSHFD
CALL app_msg_mgr_addr
LEA ECX,buff
PUSH ECX
SUB ESP,0x14
MOV EDI,EAX
MOV ECX,ESP
LEA EBX,to_user
PUSH EBX
CALL init_chat_msg_addr
MOV ECX,EDI
CALL forward_public_msg_addr
MOV success,EAX
ADD EBX,0x14
LEA ECX,buff
PUSH 0x0
CALL free_item_2_addr
POPFD
POPAD
}
return success;
}
} // namespace wxhelper

View File

@ -11,6 +11,7 @@ class SendMessageMgr:public BaseMgr {
int SendImage(wchar_t *wxid, wchar_t *image_path);
int SendFile(wchar_t *wxid, wchar_t *file_path);
int ForwardMsg(wchar_t *wxid, unsigned long long msgid);
int ForwardPublicMsg(wchar_t* wxid, wchar_t* title, wchar_t* url, wchar_t* thumburl,wchar_t* senderId,wchar_t* senderName,wchar_t* digest);
private:
};

View File

@ -188,6 +188,13 @@
// public msg forward
#define NEW_MM_READ_ITEM_OFFSET 0x76f0d0
#define FREE_MM_READ_ITEM_OFFSET 0x76e4d0
#define FREE_MM_READ_ITEM_2_OFFSET 0x76edf0
#define FORWARD_PUBLIC_MSG_OFFSET 0xb73de0
/*******************hook*********************************************/