Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

117 linhas
3.3KB

  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 := crmFindOpenID(openID)
  14. if err != nil {
  15. log.Println(err)
  16. return
  17. }
  18. //existing user
  19. if found {
  20. sendGreeting4ExistingUser(in, info)
  21. } else { //new user
  22. //get user info from wechat
  23. info := WechatUserInfo{}
  24. info.getUserInfo(openID, "zh_CN")
  25. info.registerNewUserWithInfo(in)
  26. in.askUserFillupBasicInfo()
  27. }
  28. //some error happened
  29. }
  30. //WechatUserInfo response for wechat user info.
  31. type WechatUserInfo struct {
  32. Subscribe int32 `json:"subscribe"`
  33. OpenID string `json:"openid"`
  34. NickName string `json:"nickname"`
  35. Sex int32 `json:"sex"` //0 未知 1 男 2 女
  36. Language string `json:"language"`
  37. City string `json:"city"`
  38. Province string `json:"province"`
  39. Country string `json:"country"`
  40. Avatar string `json:"headimgurl"`
  41. SubscribeTime int32 `json:"subscribe_time"`
  42. UnionID string `json:"unionid"`
  43. Remark string `json:"remark"`
  44. GroupID int32 `json:"groupid"`
  45. TagIDList []int32 `json:"tagid_list"`
  46. }
  47. func (m *WechatUserInfo) getUserInfo(openID string, lang string) (err error) {
  48. url := m.getURL(openID, lang)
  49. resp, err := http.Get(url)
  50. if err != nil {
  51. *m = WechatUserInfo{}
  52. return err
  53. }
  54. b, err := ioutil.ReadAll(resp.Body)
  55. err = json.Unmarshal(b, m)
  56. return nil
  57. }
  58. //lang 返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语
  59. func (m *WechatUserInfo) getURL(openID, lang string) string {
  60. if lang != "zh_CN" && lang != "zh_TW" && lang != "en" {
  61. log.Printf("WechatUserInfo/getURL: Unknow Lang %s, change to zh_CN", lang)
  62. lang = "zh_CN"
  63. }
  64. atk, _ := GetAccessToken()
  65. u := fmt.Sprintf("https://api.weixin.qq.com/cgi-bin/user/info?access_token=%s&openid=%s&lang=%s", atk, openID, lang)
  66. return u
  67. }
  68. func (m *WechatUserInfo) save2CRM() {
  69. }
  70. func (in *InWechatMsg) askUserFillupBasicInfo() {
  71. first := "欢迎加入海外学子之家,这里凝聚着哈工大人在澳洲的,勤奋,努力和奋斗"
  72. url := "http://wechat.hitxy.org.au/profile_newly_register"
  73. remark := "您是首次加入本社区,请点击详情完善您的个人资料"
  74. communityName := "哈工大澳洲校友会"
  75. joinDate := time.Now().Format("2006-Jan-02")
  76. templateSendJoinCommunity(in.header.FromUserName, url, first, remark, communityName, joinDate)
  77. }
  78. func sendGreeting4ExistingUser(in InWechatMsg, info crmLeadInfo) {
  79. first := "欢迎" + info.Name + "返回澳洲校友会"
  80. //url := "http://wechat.hitxy.org.au/profile_newly_register"
  81. url := "http://192.168.1.39:4200/profile_newly_register"
  82. remark := ""
  83. communityName := "哈工大澳洲校友会"
  84. joinDate := info.getCreatedAt().Format("2006-Jan-02")
  85. templateSendJoinCommunity(in.header.FromUserName, url, first, remark, communityName, joinDate)
  86. }
  87. func (m *WechatUserInfo) registerNewUserWithInfo(in InWechatMsg) {
  88. u := crmLeadInfo{}
  89. u.FirstName = "\u0020"
  90. u.LastName = m.NickName
  91. u.Password = "password"
  92. u.WechatHitxyID = in.header.FromUserName
  93. u.Status = "New"
  94. data, _ := json.Marshal(u)
  95. url := "https://c.hitxy.org.au/api/v1/Lead"
  96. headers := crmPrepareLeadUploadHTTPHeader()
  97. resp, err := postRAW(data, url, headers)
  98. log.Println(resp)
  99. log.Println(err)
  100. }