package controllers import ( "encoding/base64" "io/ioutil" "wechat-conf/utils" "github.com/zjxpcyc/wechat/core" ) const ( INFOTYPE_TICKET = "component_verify_ticket" INFOTYPE_AUTHORIZED = "authorized" INFOTYPE_UNAUTHORIZED = "unauthorized" INFOTYPE_UPDATEAUTHORIZED = "updateauthorized" ) // ComponentPush 第三方平台推送 func (c *BaseController) ComponentPush() { r := c.Ctx.Request defer r.Body.Close() con, _ := ioutil.ReadAll(r.Body) // timestamp := c.GetString("timestamp") // nonce := c.GetString("nonce") // token := "testtoken" EncodingAESKey := "key" // appid := "appid" AESKey, err := base64.StdEncoding.DecodeString(EncodingAESKey + "=") if err != nil { utils.LogError("DecodeString失败:", err) } xp := &core.XMLParse{} // 解析xml val, err := xp.Parse(string(con)) if err != nil { utils.LogError("xml解析失败:", err) } msgbyte, err := utils.AesDecrypt([]byte(val["Encrypt"]), AESKey) if err != nil { utils.LogError("解密失败:", err) } msg, err := xp.Parse(string(msgbyte)) if err != nil { utils.LogError("msgxml解析失败:", err) } switch msg["InfoType"] { case INFOTYPE_TICKET: // 更新ticket utils.RefreshComponentTicket(msg["ComponentVerifyTicket"]) break case INFOTYPE_AUTHORIZED: // 授权成功 var cert = map[string]string{ "appid": msg["AuthorizerAppid"], "authorization_code": msg["AuthorizationCode"], } wxclient := utils.WechatInit(cert) utils.AppendWxClient(wxclient) break case INFOTYPE_UPDATEAUTHORIZED: // 授权更新 break case INFOTYPE_UNAUTHORIZED: // 取消授权 break } }