您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

157 行
4.4KB

  1. package main
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "io/ioutil"
  6. "log"
  7. "net/http"
  8. "time"
  9. )
  10. func onSubscribe(in *InWechatMsg) {
  11. openID := in.header.FromUserName
  12. //check whether we have his own record in the CRM system
  13. info, found, err := crmFindLeadByOpenID(openID)
  14. if err != nil {
  15. log.Println(err)
  16. return
  17. }
  18. //existing user
  19. if found {
  20. crmLeadSetStatusNew(info.ID)
  21. sendGreeting4ExistingUser(in, info)
  22. } else { //new user
  23. //get user info from wechat
  24. crmCreateLeadByOpenID(openID)
  25. in.askUserFillupBasicInfo()
  26. }
  27. //some error happened
  28. }
  29. //WechatUserInfo response for wechat user info.
  30. type WechatUserInfo struct {
  31. Subscribe int32 `json:"subscribe"`
  32. OpenID string `json:"openid"`
  33. NickName string `json:"nickname"`
  34. Sex int32 `json:"sex"` //0 未知 1 男 2 女
  35. Language string `json:"language"`
  36. City string `json:"city"`
  37. Province string `json:"province"`
  38. Country string `json:"country"`
  39. Avatar string `json:"headimgurl"`
  40. SubscribeTime int32 `json:"subscribe_time"`
  41. UnionID string `json:"unionid"`
  42. Remark string `json:"remark"`
  43. GroupID int32 `json:"groupid"`
  44. TagIDList []int32 `json:"tagid_list"`
  45. }
  46. func (m *WechatUserInfo) getUserInfo(openID string, lang string) (err error) {
  47. url := m.getURL(openID, lang)
  48. resp, err := http.Get(url)
  49. if err != nil {
  50. *m = WechatUserInfo{}
  51. return err
  52. }
  53. b, err := ioutil.ReadAll(resp.Body)
  54. err = json.Unmarshal(b, m)
  55. return nil
  56. }
  57. //lang 返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语
  58. func (m *WechatUserInfo) getURL(openID, lang string) string {
  59. if lang != "zh_CN" && lang != "zh_TW" && lang != "en" {
  60. log.Printf("WechatUserInfo/getURL: Unknow Lang %s, change to zh_CN", lang)
  61. lang = "zh_CN"
  62. }
  63. atk, _ := GetAccessToken()
  64. u := fmt.Sprintf("https://api.weixin.qq.com/cgi-bin/user/info?access_token=%s&openid=%s&lang=%s", atk, openID, lang)
  65. return u
  66. }
  67. func (m *WechatUserInfo) save2CRM() {
  68. }
  69. func (in *InWechatMsg) askUserFillupBasicInfo() {
  70. first := "欢迎加入海外学子之家,这里凝聚着哈工大人在澳洲的,勤奋,努力和奋斗"
  71. url := "http://wechat.hitxy.org.au/profile_newly_register"
  72. url = ""
  73. remark := "您是首次加入本社区,请通过菜单 “会员信息/我的会员资料”,完善您的个人信息"
  74. communityName := "哈工大澳洲校友会"
  75. joinDate := time.Now().Format("2006-Jan-02")
  76. templateSendJoinCommunity(in.header.FromUserName, url, first, remark, communityName, joinDate)
  77. kfSendTxtAs(in.header.FromUserName, "系统会不断完善,如有问题和建议请及时联络我", "孙鹏")
  78. }
  79. func sendGreeting4ExistingUser(in *InWechatMsg, info crmdLead) {
  80. first := "欢迎" + info.Name + "返回澳洲校友会"
  81. //url := "http://wechat.hitxy.org.au/profile_newly_register"
  82. url := "http://192.168.1.39:4200/profile_newly_register"
  83. url = ""
  84. remark := "请通过菜单 “会员信息/我的会员资料”,更新您的个人信息"
  85. communityName := "哈工大澳洲校友会"
  86. joinDate := info.getCreatedAt().Format("2006-Jan-02")
  87. templateSendJoinCommunity(in.header.FromUserName, url, first, remark, communityName, joinDate)
  88. kfSendTxtAs(in.header.FromUserName, "系统会不断完善和改进,如有问题或有建议请及时联络我", "孙鹏")
  89. }
  90. func (m *WechatUserInfo) registerNewLeadWithInfo(openID string) (newuser crmdLead, err error) {
  91. u := crmdLead{}
  92. u.FirstName = "\u0020" //a visible space
  93. if m.NickName == "" {
  94. u.LastName = time.Now().Format(getCrmTimeLayout())
  95. } else {
  96. u.LastName = m.NickName
  97. }
  98. u.Password = "password"
  99. u.WechatHitxyID = openID
  100. u.Status = "New"
  101. u.AvatarID, _ = m.uploadAvatar()
  102. data, _ := json.Marshal(u)
  103. entity, err := crmCreateEntity("Lead", data)
  104. if err == nil {
  105. newuser = entity.(crmdLead)
  106. }
  107. return
  108. }
  109. func (m *WechatUserInfo) uploadAvatar() (avatarID string, err error) {
  110. tmpfile, _, err := saveURL(m.Avatar)
  111. if err != nil {
  112. return
  113. }
  114. attach, err := crmCreateAttachment(tmpfile)
  115. if err != nil {
  116. return
  117. }
  118. avatarID = attach.ID
  119. return
  120. }
  121. //when user left
  122. func onUnSubscribe(in *InWechatMsg) {
  123. info, found, err := crmFindLeadByOpenID(in.header.FromUserName)
  124. if err != nil {
  125. log.Printf("Error happened when trying to unsubscribe a user %s", in.header.FromUserName)
  126. log.Println(err)
  127. }
  128. if found == false {
  129. log.Printf("not found openid %s", in.header.FromUserName)
  130. return
  131. }
  132. //mark status
  133. newStatus := crmdLead{}
  134. newStatus.ID = info.ID
  135. newStatus.Status = "Dead"
  136. crmPatchLeadInfo(newStatus)
  137. }