All Projects → esap → Wechat

esap / Wechat

Licence: mit
微信SDK的golang实现,短小精悍,同时兼容【企业号/服务号/订阅号/小程序】

Programming Languages

go
31211 projects - #10 most used programming language

Projects that are alternatives of or similar to Wechat

Wx Miniprogram Boilerplate
基于Gulp微信小程序开发工作流,支持less样式编写,支持ESLint代码检查等功能
Stars: ✭ 122 (-63.03%)
Mutual labels:  miniapp, wechat
Qiniu Wxapp Sdk
qiniu SDK based on wxapp
Stars: ✭ 638 (+93.33%)
Mutual labels:  miniapp, wechat
Vscode Miniapp Helper
微信小程序开发助手 for VSCode
Stars: ✭ 137 (-58.48%)
Mutual labels:  miniapp, wechat
Miniapp
微信小程序服务端 SDK (for Golang)
Stars: ✭ 815 (+146.97%)
Mutual labels:  miniapp, wechat
Wept
微信小程序多端实时运行工具
Stars: ✭ 2,671 (+709.39%)
Mutual labels:  miniapp, wechat
Omnipay Wechatpay
(微信支付)WeChatPay driver for the Omnipay PHP payment processing library
Stars: ✭ 300 (-9.09%)
Mutual labels:  wechat
Gopay
golang支付:微信公众号,微信app,微信小程序,微信企业支付,支付宝网页版,支付宝app,支付宝企业支付
Stars: ✭ 313 (-5.15%)
Mutual labels:  wechat
Crmeb
🔥🔥🔥 CRMEB打通版v4免费开源商城系统,uni-app+thinkphp6框架商城,系统可商用;包含小程序商城、H5商城、公众号商城、PC商城,支持分销、拼团、砍价、秒杀、优惠券、积分、会员等级、小程序直播、可视化设置,前后端分离,方便二开,更有详细使用文档、接口文档、数据字典、二开文档/视频教程,欢迎大家提出宝贵意见和建议
Stars: ✭ 3,447 (+944.55%)
Mutual labels:  wechat
Laravel Socialite
Social OAuth Authentication for Laravel 5. drivers: facebook, github, google, linkedin, weibo, qq, wechat and douban
Stars: ✭ 296 (-10.3%)
Mutual labels:  wechat
Vux
Mobile UI Components based on Vue & WeUI
Stars: ✭ 17,573 (+5225.15%)
Mutual labels:  wechat
Tnwx
TNWX: TypeScript + Node.js + WeiXin 微信系开发脚手架,支持微信公众号、微信支付、微信小游戏、微信小程序、企业微信/企业号。最最最重要的是能快速的集成至任何 Node.js 框架(Express、Nest、Egg、Koa 等)
Stars: ✭ 319 (-3.33%)
Mutual labels:  wechat
Falconmessenger
🌟🌟🌟🌟🌟 Falcon Messenger is a Fast and Beautiful cloud-based messaging app. With iOS and IPadOS Support. Available on the App Store.
Stars: ✭ 310 (-6.06%)
Mutual labels:  wechat
Antirecall
Anti-Recall/Anti-Delete for Telegram, WeChat, and QQ(针对Telegram, QQ和微信的防撤回)
Stars: ✭ 300 (-9.09%)
Mutual labels:  wechat
Wemall
wemall7 开源版本 (不含商城)
Stars: ✭ 315 (-4.55%)
Mutual labels:  wechat
Nami
专为小程序而生的服务端开发容器
Stars: ✭ 299 (-9.39%)
Mutual labels:  wechat
Vbot
💬The best wechat robot base on web api!
Stars: ✭ 3,301 (+900.3%)
Mutual labels:  wechat
Voterobot
微信朋友圈投票活动的“刷票”案例分析。
Stars: ✭ 297 (-10%)
Mutual labels:  wechat
We Swiper
✨ 微信小程序触摸内容滑动解决方案we-swiper
Stars: ✭ 311 (-5.76%)
Mutual labels:  wechat
Youxiang
获取淘宝优惠券、京东优惠券、拼多多(多多客)优惠券、苏宁易购优惠券、唯品会优惠券,通过接入淘宝联盟、京东联盟、拼多多(多多进宝)、苏宁联盟(苏宁推客)、唯品会及其对应的开放平台,获取优惠商品图片和对应商品信息,利用微信机器人推送到指定群聊。
Stars: ✭ 313 (-5.15%)
Mutual labels:  wechat
Docs
Java知识总结:MySQL实战45讲,多线程和JVM知识总结,,SpringBoot,SpringCloud,Storm系列,微信小程序开发,ELK,《JAVA核心技术36讲笔记》,《深入理解JVM虚拟机笔记》,《高性能MySQL笔记》,《数据结构与算法》等等
Stars: ✭ 308 (-6.67%)
Mutual labels:  wechat

WeChat SDK

Build Status Go Report Card GoDoc

微信SDK的golang实现,短小精悍,同时兼容【企业微信/服务号/订阅号/小程序】

快速开始

5行代码,链式消息,快速开启微信API示例:

package main

import (
	"net/http"

	"github.com/esap/wechat" // 微信SDK包
)

func main() {
	wechat.Debug = true
	
	cfg := &wechat.WxConfig{
		Token:          "yourToken",
		AppId:          "yourAppID",
		Secret:         "yourSecret",
		EncodingAESKey: "yourEncodingAesKey",
	}

	app := wechat.New(cfg)
	app.SendText("@all", "Hello,World!")
	
	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		app.VerifyURL(w, r).NewText("客服消息1").Send().NewText("客服消息2").Send().NewText("查询OK").Reply()
	})
	
	http.ListenAndServe(":9090", nil)
}

配置方式

	// 创建公众号实例(服务号/订阅号/小程序) 不带aesKey则为明文模式
	cfg := &wechat.WxConfig{
		Token:          "yourToken",
		AppId:          "yourAppID",
		Secret:         "yourSecret",
	}

	// 创建公众号实例(服务号/订阅号/小程序)
	cfg := &wechat.WxConfig{
		Token:          "yourToken",
		AppId:          "yourAppID",
		Secret:         "yourSecret",
		EncodingAESKey: "yourEncodingAesKey",
	}

	// 创建企业微信实例
	cfg := &wechat.WxConfig{
		Token:          "yourToken",
		AppId:          "yourCorpID",
		AgentId:        "yourAgentId",
		Secret:         "yourSecret",
		EncodingAESKey: "yourEncodingAesKey",
		AppType:        1,
	}

定制 HTTP client

import "github.com/esap/wechat/util"

func myCustomHTTPClient() *http.Client {
	// 配置适合自己部署环境的 HTTP client, 例如超时, 代理(可能需要认证)等
	tr := &http.Transport{
		MaxIdleConns:       10,
		IdleConnTimeout:    30 * time.Second,
		DisableCompression: true,
	}
	return &http.Client{Transport: tr}
}

util.SetHTTPClientFactory(myCustomHTTPClient)

主动推送消息

用户关注后,企业微信可以主动推送消息,服务号需要用户48小时内进入过。

	app.SendText(to, msg)
	app.SendImage(to, mediaId)
	app.SendVoice(to, mediaId)
	app.SendFile(to, mediaId)
	app.SendVideo(to, mediaId, title, desc)
	app.SendTextcard(to, title, desc, url)
	app.SendMusic(to, mediaId, title, desc, musicUrl, qhMusicUrl)
	app.SendNews(to, arts...)
	app.SendMpNews(to, arts...)
	app.SendMpNewsId(to, mediaId)
	app.SendMarkDown(to, content)

消息回调

  • 通常将app.VerifyURL(http.ResponseWriter, *http.Request)嵌入http handler

该函数返回*wechat.Context基本对象,其中的Msg为用户消息:

	// 混合用户消息,业务判断的主体
	WxMsg struct {
		XMLName      xml.Name `xml:"xml"`
		ToUserName  
		FromUserName
		CreateTime  64
		MsgId       64
		MsgType     
		Content       // text
		AgentID          // corp
		PicUrl        // image
		MediaId       // image/voice/video/shortvideo
		Format        // voice
		Recognition   // voice
		ThumbMediaId  // video
		LocationX    float32 `xml:"Latitude"`  // location
		LocationY    float32 `xml:"Longitude"` // location
		Precision    float32 // LOCATION
		Scale            // location
		Label         // location
		Title         // link
		Description   // link
		Url           // link
		Event         // event
		EventKey      // event
		SessionFrom   // event|user_enter_tempsession
		Ticket      
		FileKey     
		FileMd5     
		FileTotalLen

		ScanCodeInfo struct {
			ScanType  
			ScanResult
		}
	}

  • 如果使用其他web框架,例如echo/gin/beego等,则把VerifyURL()放入controller或handler
// echo示例 公众号回调接口
func wxApiPost(c echo.Context) error {
	ctx := app.VerifyURL(c.Response().Writer, c.Request())
	
	// TODO: 这里是其他业务操作

	return nil
}

回调回复消息

回调回复消息有两种方式:

  • 被动回复,采用XML格式编码返回(Reply);

  • 客服消息,采用json格式编码返回(Send);

  • 两种方式都可先调用*wechat.Context对象的New方法创建消息,然后调用Reply()或Send()。

  • 支持链式调用,但Reply()只有第一次有效。

	ctx.NewText("正在查询中...").Reply()
	ctx.NewText("客服消息1").Send().NewText("客服消息2").Send()
  • 被动回复可直接调用Reply(),表示已收到,然后调用客服消息。

文本消息

	ctx.NewText("content")

图片/语言/文件消息

	// mediaID 可通过素材管理-上上传多媒体文件获得
	ctx.NewImage("mediaID")
	ctx.NewVoice("mediaID")
	
	// 仅企业号支持
	ctx.NewFile("mediaID")

视频消息

	ctx.NewVideo("mediaID", "title", "description")

音乐消息

	ctx.NewMusic("thumbMediaID","title", "description", "musicURL", "hqMusicURL")

图文消息

	// 先创建三个文章
	art1 := wechat.NewArticle("拥抱AI,享受工作",
		"来自村长的ESAP系统最新技术分享",
		"http://ylin.wang/img/esap18-1.png",
		"http://ylin.wang/2017/07/13/esap18/")
	art2 := wechat.NewArticle("用企业微信代替pda实现扫描入库",
		"来自村长的ESAP系统最新技术分享",
		"http://ylin.wang/img/esap17-2.png",
		"http://ylin.wang/2017/06/23/esap17/")
	art3 := wechat.NewArticle("大道至简的哲学",
		"来自村长的工作日志",
		"http://ylin.wang/img/golang.jpg",
		"http://ylin.wang/2017/01/29/log7/")
	// 打包成新闻
	ctx.NewNews(art1, art2, art3)

模板消息

相关issue

	tlpdata := map[string]struct {
		Value `json:"value"`
		Color `json:"color"`
	}{
		"first": {Value: "我是渣渣涛", Color: "#173177"},
		"keyword1": {Value: "这是一个你从没有玩过的全新游戏", Color: "#173177"},
		"keyword2": {Value: "只要你跟着我一起试玩一下", Color: "#173177"},
		"keyword3": {Value: "你就会爱上这款游戏", Color: "#4B1515"},
		"remark":   {Value: "是兄弟就来砍我", Color: "#071D42"},
	}
	ctx.SendTemplate(
		ctx.Msg.FromUserName,
		"tempid", // 模板ID
		c.Request.Host, // 跳转url
		ctx.AppId, // 跳转小程序,比url优先
		"", // 小程序页面
		tlpdata,
	)

退出

在多微信 app 的情况下, 修改了微信的配置之后, 需要动态地调整微信配置, 这时候需要结束老的实例, 可以调用实例的 Stop 方法.

app.Stop() // Stop 可多次调用

app.AddMsg(app.NewText("zhengzhou", "这条消息不会被发出, 因为在 Stop 方法后, 后台发送消息的 goroutine 已经退出"))  

License

MIT

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].