package wxapi
import (
"crypto/sha1"
"encoding/json"
"encoding/xml"
"fmt"
"io"
"io/ioutil"
"log"
"net/http"
"sort"
"strings"
"bytes"
"github.com/gin-gonic/gin"
"github.com/tidwall/gjson"
)
var (
// APPID 公众号后台分配的APPID
APPID = "wx2fb1d677243ad93b"
// APPSECRET 公众号后台分配的APPSECRET
APPSECRET = "c020fd379deb51cc3320de00f4cc7079"
)
type token struct {
AccessToken string `json:"access_token"`
ExpiresIn int `json:"expires_in"`
}
// WxReceiveCommonMsg 接收普通消息
type WxReceiveCommonMsg struct {
ToUserName string //接收者 开发者 微信号
FromUserName string //发送者 发送方帐号(一个OpenID)
Content string //文本内容
CreateTime int64 //创建时间
MsgType string //消息类型
MsgId int64 //消息id
PicUrl string //图片url
MediaId string //媒体id
Event string //事件类型,VIEW
EventKey string //事件KEY值,设置的跳转URL
MenuId string
Format string
Recognition string
ThumbMediaId string //缩略图媒体ID
}
type WxCustomText struct{
Content string `json:"content"`
}
type WxCustomTextMsg struct{
ToUser string `json:"touser"`
MsgType string `json:"msgtype"`
Text WxCustomText `json:"text"`
}
func (msg *WxCustomTextMsg) ToJson() []byte {
body, err := json.Marshal(msg)
if err != nil {
panic(err)
}
return body
}
// WxReceiveFunc (接收到消息之后,会将消息交于这个函数处理)
var WxReceiveFunc func(msg WxReceiveCommonMsg) error
// WxMakeSign 计算签名
func WxMakeSign(token, timestamp, nonce string) string {
strs := []string{token, timestamp, nonce}
sort.Strings(strs)
sha := sha1.New()
io.WriteString(sha, strings.Join(strs, ""))
return fmt.Sprintf("%x", sha.Sum(nil))
}
// HandleWxLogin首次接入,成为开发者
func HandleWxLogin(c *gin.Context) {
fmt.Printf("==>HandleWxLogin\n")
echostr := c.DefaultQuery("echostr", "")
if echostr != "" {
fmt.Printf("==>echostr:%s\n", echostr)
c.String(200, "%s", echostr)
return
}
}
// WxGetAccessToken 获取微信accesstoken
func WxGetAccessToken() string {
url := fmt.Sprintf("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%v&secret=%v", APPID, APPSECRET)
resp, err := http.Get(url)
if err != nil {
fmt.Println("获取微信token失败", err)
return ""
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("微信token读取失败", err)
return ""
}
token := token{}
err = json.Unmarshal(body, &token)
if err != nil {
fmt.Println("微信token解析json失败", err)
return ""
}
return token.AccessToken
}
// WxGetUserList 获取关注者列表
func WxGetUserList(accessToken string) []gjson.Result {
url := "https://api.weixin.qq.com/cgi-bin/user/get?access_token=" + accessToken + "&next_openid="
resp, err := http.Get(url)
if err != nil {
fmt.Println("获取关注列表失败", err)
return nil
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("读取内容失败", err)
return nil
}
flist := gjson.Get(string(body), "data.openid").Array()
return flist
}
// WxPostTemplate 发送模板消息
func WxPostTemplate(accessToken string, reqdata string, fxurl string, templateid string, openid string) {
url := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
reqbody := "{\"touser\":\"" + openid + "\", \"template_id\":\"" + templateid + "\", \"url\":\"" + fxurl + "\", \"data\": " + reqdata + "}"
fmt.Printf("WxPostTemplate:%#v\n", reqbody)
resp, err := http.Post(url,
"application/x-www-form-urlencoded",
strings.NewReader(string(reqbody)))
if err != nil {
fmt.Println(err)
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(body))
}
// 客服回复接口
func WxPostCustomTextMsg(accessToken string, touser string, content string) {
url := "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=" + accessToken
req:=&WxCustomTextMsg{ToUser:touser,MsgType:"text",Text:WxCustomText{Content:content}}
jsonStr := req.ToJson()
//fmt.Printf("WxPostCustomTextMsg:%#v\n", jsonStr)
request ,_:= http.NewRequest("POST", url, bytes.NewBuffer(jsonStr))
request.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(request)
if err != nil {
fmt.Println(err)
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(body))
}
// ReceiveCommonMsg
func ReceiveCommonMsg(msgData []byte) (WxReceiveCommonMsg, error) {
fmt.Printf("received weixin msgData:\n%s\n", msgData)
msg := WxReceiveCommonMsg{}
err := xml.Unmarshal(msgData, &msg)
if WxReceiveFunc == nil {
return msg, err
}
err = WxReceiveFunc(msg)
return msg, err
}
// HandleWxPostRecv 处理微信公众号前端发起的消息事件
func HandleWxPostRecv(c *gin.Context) {
fmt.Printf("==>HandleWxPostRecv Enter\n")
data, err := c.GetRawData()
if err != nil {
log.Fatalln(err)
}
ReceiveCommonMsg(data)
}
// WxCreateMenu 创建菜单
func WxCreateMenu(accessToken, menustr string) (string, error) {
url := "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" + accessToken
fmt.Printf("WxCreateMenu:%s\n", menustr)
resp, err := http.Post(url,
"application/x-www-form-urlencoded",
strings.NewReader(menustr))
if err != nil {
fmt.Println(err)
return "", err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println(err)
return "", err
}
fmt.Println(string(body))
return string(body), nil
}
// WxDelMenu 删除菜单
func WxDelMenu(accessToken string) (string, error) {
url := "https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=" + accessToken
resp, err := http.Get(url)
if err != nil {
fmt.Println("删除菜单失败", err)
return "", err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("读取内容失败", err)
return "", err
}
fmt.Println(string(body))
return string(body), nil
}
// WxGetUserInfo 根据用户openid获取基本信息
func WxGetUserInfo(accessToken, openid string) (string, error) {
url := fmt.Sprintf("https://api.weixin.qq.com/cgi-bin/user/info?access_token=%s&openid=%s&lang=zh_CN", accessToken, openid)
resp, err := http.Get(url)
if err != nil {
fmt.Println("获取信息失败", err)
return "", err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("读取内容失败", err)
return "", err
}
fmt.Println(string(body))
return string(body), nil
}
func init() {
}
没有合适的资源?快使用搜索试试~ 我知道了~
替代chatGPT,很火的聊天插件BITO的api接口封装
共21个文件
go:15个
sum:1个
mod:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 2 下载量 83 浏览量
2023-06-17
16:35:48
上传
评论 1
收藏 5.84MB ZIP 举报
温馨提示
很火的BITO插件,逆向抓取了api接口,仅供学习研究用途。 终于有不限次数且完全免费的AI聊天接口啦,速度也是杠杠的。 提供项目完整源码,直接可运行,启动一个http接口服务。 基于golang的,不但封装了bito接口,还封装了微信公众号接入相关的接口。 详情参见博客介绍:https://blog.csdn.net/yyz_1987/article/details/131261125 下载资源提供技术支持。
资源推荐
资源详情
资源评论
收起资源包目录
weixin.zip (21个子文件)
weixin
log.log 3KB
go.mod 320B
CodeCfg.json 79B
go.sum 8KB
main2 11.47MB
main2.go 7KB
wxapi
wxapi.go 7KB
main2 - 副本.go 3KB
convert
textMsg.go 690B
chatReq.go 1KB
chatRes.go 643B
textRes.go 590B
apis
everysay.go 2KB
weather.go 2KB
exponent.go 4KB
chatapi
chatgpt.go.bak 992B
chatgpt.go 4KB
util
conv.go 1KB
http.go 5KB
conf
baseconf.go 2KB
codecfg.go 294B
共 21 条
- 1
资源评论
- stvliu2023-07-27超赞的资源,感谢资源主分享,大家一起进步!
- hujinglisson2024-01-01资源内容总结地很全面,值得借鉴,对我来说很有用,解决了我的燃眉之急。
特立独行的猫a
- 粉丝: 7w+
- 资源: 38
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 筷手引流工具.apk
- 论文(最终)_20240430235101.pdf
- 基于python编写的Keras深度学习框架开发,利用卷积神经网络CNN,快速识别图片并进行分类
- 最全空间计量实证方法(空间杜宾模型和检验以及结果解释文档).txt
- 5uonly.apk
- 蓝桥杯Python组的历年真题
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 前端开发技术实验报告:内含4四实验&实验报告
- Highlight Plus v20.0.1
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功