如何在企业微信上搭建一款活动报名 App

用户头像
Ceelog
关注
发布于: 2020 年 09 月 09 日

需求



公司内部活动报名,需要员工登录 & 发送报名通知



我们将在 fastwego/wxwork 的辅助下快速完成活动报名 App 的开发



技术原理



企业微信提供了 获取 员工信息 接口 和 发送消息 接口



所以,我们只需开发一个服务,员工完成登录后 记录 session,报名成功后 发送消息 即可



配置企业微信内部应用



  • 设置工作台应用主页



  • 可以在企业微信工作台看到入口



  • 点击进入主页



  • 点击登录 可以获取员工信息



  • 点击报名后,可以收到通知



主要代码:



var Corp *corporation.Corporation
var App *corporation.App
func init() {
// 加载配置文件
viper.SetConfigFile(".env")
_ = viper.ReadInConfig()
Corp = corporation.New(corporation.Config{
Corpid: viper.GetString("CorpId"),
})
App = Corp.NewApp(corporation.AppConfig{
AgentId: viper.GetString("AgentId"),
Secret: viper.GetString("Secret"),
})
fmt.Println(Corp, App)
}
func main() {
router := gin.New()
router.Use(gin.Logger(), gin.Recovery())
// Session
store := cookie.NewStore([]byte("secret"))
router.Use(sessions.Sessions("gosession", store))
router.GET("/", Index)
router.GET("/login", Login)
svr := &http.Server{
Addr: viper.GetString("LISTEN"),
Handler: router,
}
go func() {
err := svr.ListenAndServe()
if err != nil && err != http.ErrServerClosed {
log.Fatalln(err)
}
}()
quit := make(chan os.Signal)
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
<-quit
timeout := time.Duration(5) * time.Second
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()
if err := svr.Shutdown(ctx); err != nil {
log.Fatalln(err)
}
}
type User struct {
Userid string `json:"userid"`
Name string `json:"name"`
Avatar string `json:"avatar"`
Message string `json:"message"`
}
func Index(c *gin.Context) {
session := sessions.Default(c)
user := session.Get("user")
loginUser, ok := user.(User)
if !ok {
loginUser = User{}
}
join := c.Query("join")
if len(join) > 0 {
// 发送 报名信息
type Textcard struct {
Title string `json:"title"`
Description string `json:"description"`
URL string `json:"url"`
Btntxt string `json:"btntxt"`
}
textCard := struct {
Touser string `json:"touser"`
Msgtype string `json:"msgtype"`
Agentid string `json:"agentid"`
Textcard Textcard `json:"textcard"`
}{
Touser: loginUser.Userid,
Msgtype: "textcard",
Agentid: App.Config.AgentId,
}
textCard.Textcard = Textcard{Title: "报名成功", Description: "请来我办公室 <br> <div class='highlight'>记得带上吃饭的家伙 ~</div>", URL: viper.GetString("ServerUrl"), Btntxt: "好的"}
payload, err := json.Marshal(textCard)
fmt.Println(string(payload), err)
if err != nil {
return
}
resp, err := message.Send(App, payload)
fmt.Println(string(resp), err)
loginUser.Message = "报名成功~"
}
t1, err := template.ParseFiles("index.html")
if err != nil {
fmt.Println(err)
return
}
t1.Execute(c.Writer, loginUser)
}
func Login(c *gin.Context) {
code := c.Query("code")
// 跳转登录
if len(code) == 0 {
var redirectUri = viper.GetString("ServerUrl") + "/login"
link := oauth.GetAuthorizeUrl(viper.GetString("CorpId"), redirectUri, "STATE")
c.Redirect(302, link)
return
}
// 获取用户身份
accessToken, err := App.AccessToken.GetAccessTokenHandler(App)
userInfo, err := oauth.GetUserInfo(accessToken, code)
fmt.Println(userInfo, err)
if err != nil {
return
}
// 获取员工详细信息
params := url.Values{}
params.Add("userid", userInfo.UserID)
resp, err := contact.UserGet(App, params)
fmt.Println(string(resp), err)
if err != nil {
return
}
user := User{}
err = json.Unmarshal(resp, &user)
if err != nil {
fmt.Println(err)
return
}
// 记录 Session
gob.Register(User{})
session := sessions.Default(c)
session.Set("user", user)
fmt.Println(user)
err = session.Save()
if err != nil {
fmt.Println(err)
return
}
// 返回首页
c.Header("Content-Type", "text/html")
_, _ = c.Writer.WriteString(`<html"><head><meta http-equiv="refresh" content="0;URL='/'" /></head><body></body></html>`)
}



结语



恭喜你!在 fastwego/wxwork 的辅助下,5分钟内就完成了一款企业内部 App 开发



完整演示代码:https://github.com/fastwego/wxwork-demo



发布于: 2020 年 09 月 09 日 阅读数: 26
用户头像

Ceelog

关注

微信公众号 Ceelog 2017.10.18 加入

还未添加个人简介

评论

发布
暂无评论
如何在企业微信上搭建一款活动报名 App