component.go 1.6KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package controllers
  2. import (
  3. "encoding/base64"
  4. "io/ioutil"
  5. "wechat-conf/utils"
  6. "github.com/zjxpcyc/wechat/core"
  7. )
  8. const (
  9. INFOTYPE_TICKET = "component_verify_ticket"
  10. INFOTYPE_AUTHORIZED = "authorized"
  11. INFOTYPE_UNAUTHORIZED = "unauthorized"
  12. INFOTYPE_UPDATEAUTHORIZED = "updateauthorized"
  13. )
  14. // ComponentPush 第三方平台推送
  15. func (c *BaseController) ComponentPush() {
  16. r := c.Ctx.Request
  17. defer r.Body.Close()
  18. con, _ := ioutil.ReadAll(r.Body)
  19. // timestamp := c.GetString("timestamp")
  20. // nonce := c.GetString("nonce")
  21. // token := "testtoken"
  22. EncodingAESKey := "key"
  23. // appid := "appid"
  24. AESKey, err := base64.StdEncoding.DecodeString(EncodingAESKey + "=")
  25. if err != nil {
  26. utils.LogError("DecodeString失败:", err)
  27. }
  28. xp := &core.XMLParse{}
  29. // 解析xml
  30. val, err := xp.Parse(string(con))
  31. if err != nil {
  32. utils.LogError("xml解析失败:", err)
  33. }
  34. msgbyte, err := utils.AesDecrypt([]byte(val["Encrypt"]), AESKey)
  35. if err != nil {
  36. utils.LogError("解密失败:", err)
  37. }
  38. msg, err := xp.Parse(string(msgbyte))
  39. if err != nil {
  40. utils.LogError("msgxml解析失败:", err)
  41. }
  42. switch msg["InfoType"] {
  43. case INFOTYPE_TICKET:
  44. // 更新ticket
  45. utils.RefreshComponentTicket(msg["ComponentVerifyTicket"])
  46. break
  47. case INFOTYPE_AUTHORIZED:
  48. // 授权成功
  49. var cert = map[string]string{
  50. "appid": msg["AuthorizerAppid"],
  51. "authorization_code": msg["AuthorizationCode"],
  52. }
  53. wxclient := utils.WechatInit(cert)
  54. utils.AppendWxClient(wxclient)
  55. c.ResponseRaw([]byte("success"))
  56. break
  57. case INFOTYPE_UPDATEAUTHORIZED:
  58. // 授权更新
  59. break
  60. case INFOTYPE_UNAUTHORIZED:
  61. // 取消授权
  62. break
  63. }
  64. }