Просмотр исходного кода

Merge branch 'develop' of 192.168.3.17:zhanghongbo/qfw into develop

wangchuanjin 9 лет назад
Родитель
Сommit
14a28d9b73

+ 1 - 87
weixin/src/qfw/weixin/msgtxtchandler.go

@@ -1,13 +1,10 @@
 package weixin
 
 import (
-	"encoding/json"
 	"fmt"
-	"io/ioutil"
 	_ "log"
 	"math/rand"
-	"net"
-	"net/http"
+
 	"qfw/weixin/dao"
 	wf "qfw/weixinconfig"
 	"strconv"
@@ -15,28 +12,6 @@ import (
 	"time"
 )
 
-const (
-	APIKEY = "893b61852a7de8e3194194a0fe11917c"
-	APIURL = "http://www.tuling123.com/openapi/api"
-)
-
-var robotclient *http.Client
-
-//初始化图灵123 HttpClient加上超时
-func InitRobotHttpClient() {
-	robotclient = &http.Client{Transport: &http.Transport{
-		Dial: func(netw, addr string) (net.Conn, error) {
-			deadline := time.Now().Add(2 * time.Second)
-			c, err := net.DialTimeout(netw, addr, 2*time.Second)
-			if err != nil {
-				return nil, err
-			}
-			c.SetDeadline(deadline)
-			return c, nil
-		},
-	}}
-}
-
 //文本消息处理
 func MsgTxtHandler(w ResponseWriter, r *Request) {
 	openid := r.FromUserName
@@ -57,15 +32,9 @@ func MsgTxtHandler(w ResponseWriter, r *Request) {
 			processPIdentifyMsgTxt(us, w, r)
 		} else if us.Type == "oidentify" {
 			processOIdentifyMsgTxt(us, w, r)
-		} else if us.Type == "robot" { //聊天机器人
-			processRobotMsg(r.FromUserName, r.Content, w, r)
 		} else if us.Type == "wxadmin" {
 			processWxAdmin(openid, r.Content, w, r)
 		}
-	} else if r.Content == "小星" {
-		UserSession[r.FromUserName] = NewUserSession("robot")
-		w.ReplyText("嗨,小星来陪你解闷。有什么开心的,不开心的说说来,大伙乐呵乐呵。\n输入q或Q离开。")
-		return
 	} else if r.Content == "微信管理" && mids[openid] {
 		UserSession[r.FromUserName] = NewUserSession("wxadmin")
 		w.ReplyText("您已进入微信管理,请输入指令操作:\n1.查看抽奖模式(指令:f0)\n2.切换抽奖模式(指令:c*,*为数字。如c0(自动模式),c1(手动模式1),c2(手动模式2),c3(手动模式3))\n3.统计抽奖结果(tjr*,tjr120(最近两分钟),tjr120-1200(最近两分钟至最近20分钟之间的))\n4.统计新用户数(tju*)\n5.服务器情况监测(ser0)\n6服务管理(man*,man1重启主程序(man11关闭),man2重启微信,man3重启积分(man33关闭),man4重启微信认证(man44关闭))。\n输入q或Q离开。")
@@ -180,58 +149,3 @@ func processPIdentifyMsgTxt(us *usersession, w ResponseWriter, r *Request) {
 		w.ReplyOK()
 	}
 }
-
-//处理聊天机器人消息
-func processRobotMsg(userid string, content string, w ResponseWriter, r *Request) {
-	rurl := fmt.Sprintf("%s?key=%s&info=%s&userid=%s", APIURL, APIKEY, content, userid)
-	//log.Println("robot::", rurl)
-	resp, err1 := robotclient.Get(rurl)
-	if err1 != nil {
-		w.ReplyText("我386的大脑,实在理解不了你说的话啊。")
-		return
-	}
-	defer resp.Body.Close()
-	bs, err2 := ioutil.ReadAll(resp.Body)
-	if err2 != nil {
-		w.ReplyText("对不起,我理解不了你说的话。")
-		return
-	}
-	//log.Println("robot::", string(bs))
-	var tmp map[string]interface{}
-	err3 := json.Unmarshal(bs, &tmp)
-	if err3 != nil {
-		w.ReplyText("对不起,我理解不了你说的话。")
-		return
-	}
-	code, _ := tmp["code"].(float64)
-	if code == 100000 {
-		repl, _ := tmp["text"].(string)
-		w.ReplyText(repl)
-	} else if code == 308000 { //菜谱
-		l, _ := tmp["list"].([]interface{})
-		arts := []Article{}
-		for index, item := range l {
-			if index > 5 {
-				break
-			}
-			m := item.(map[string]interface{})
-			arts = append(arts, Article{Title: m["info"].(string), PicUrl: m["icon"].(string), Url: m["detailurl"].(string)})
-		}
-		w.ReplyNews(arts)
-	} else if code == 302000 { //新闻
-		l, _ := tmp["list"].([]interface{})
-		arts := []Article{}
-		for index, item := range l {
-			if index > 5 {
-				break
-			}
-			m := item.(map[string]interface{})
-			arts = append(arts, Article{Title: m["article"].(string), Url: m["detailurl"].(string)})
-		}
-		w.ReplyNews(arts)
-	} else {
-		w.ReplyText("对不起,我理解不了你说的话。")
-		return
-	}
-}
-

+ 90 - 14
weixin/src/qfw/weixin/subscribehandler.go

@@ -8,21 +8,87 @@ import (
 	"net/http"
 	"os"
 	"qfw/util"
-	wxutil "qfw/weixin/util"
 	"qfw/util/redis"
 	"qfw/weixin/dao"
+	wxutil "qfw/weixin/util"
 	"qfw/weixinconfig"
 	"strings"
 	"time"
 )
 
+//关注事件处理
+func SubscribeHandler(w ResponseWriter, r *Request) {
+	l1 := time.Now().Unix()
+	wxutil.SubscribeInc()
+	openid := r.FromUserName
+	log.Println("user data", w.GetUserData())
+	ret,_ := w.GetUserData().(map[string]interface{})
+	var unionid, bindweixin, userphoto string
+	if ret != nil {
+		unionid = ""
+		bindweixin = "qmx-" + fmt.Sprintf("%d%d", time.Now().Local().Unix(), rand.Intn(99))
+	} else {
+		unionid, _ = ret["unionid"].(string)
+		bindweixin, _ = ret["nickname"].(string)
+		//取得用户头像
+		headimgurl, _ := ret["headimgurl"].(string)
+		log.Println("download userface :", headimgurl)
+		userphoto = downloadUserFace(headimgurl)
+	}
+	l2 := time.Now().Unix()
+	_, flag := dao.AddUser(openid, unionid, bindweixin, userphoto)
+	l2 = time.Now().Unix()
+	log.Println(",Add user", l2-l1)
+	l1 = l2
+	//保存关注日志
+	var source string
+	if len(r.EventKey) > 8 {
+		source = r.EventKey[8:]
+	} else {
+		source = ""
+	}
+	if digitreg.MatchString(source) {
+		dao.SaveSubscribeLogs(openid, unionid, bindweixin, "wangzhan", "subscribe")
+		if flag == 1 {
+			w.ReplyText(WELCOME_MSG) // 有新人关注,返回欢迎消息
+			redis.Put("sso", "new_"+source, openid, 900)
+			//TODO 处理分享(邀请)类的二维码,记录邀请关系
+			if strings.HasPrefix(source, "32") {
+				go dao.SaveInviteLink(source, r.FromUserName, false)
+				//go dao.UpdateInviteUserCoupon(source)
+			}
+		} else {
+			w.ReplyText(OWELCOME_MSG) // 有旧人关注,返回欢迎消息
+			if strings.HasPrefix(source, "32") {
+				go dao.SaveInviteLink(source, r.FromUserName, true)
+			}
+		}
+		DoLogin(source, openid)
+	} else {
+		if flag == 1 {
+			w.ReplyText(WELCOME_MSG) // 有新人关注,返回欢迎消息
+		} else {
+			w.ReplyText(OWELCOME_MSG) // 有旧人关注,返回欢迎消息
+		}
+		dao.SaveSubscribeLogs(openid, unionid, bindweixin, source, "subscribe")
+	}
 
+	l2 = time.Now().Unix()
+	log.Println(",Do save userinfo", l2-l1)
+	l1 = l2
+}
 
 //关注事件处理
-func SubscribeHandler(w ResponseWriter, r *Request) {
+func SubscribeHandlerBak(w ResponseWriter, r *Request) {
+	l1 := time.Now().Unix()
 	wxutil.SubscribeInc()
 	openid := r.FromUserName
+	log.Println("user data", w.GetUserData())
 	ret, err := w.GetUserBaseInfo(openid)
+	//ret:=w.GetUserData()
+	l2 := time.Now().Unix()
+	log.Println(",Get user baseinfo", l2-l1, " s")
+	l1 = l2
 	var unionid, bindweixin, userphoto string
 	if err != nil {
 		unionid = ""
@@ -36,6 +102,9 @@ func SubscribeHandler(w ResponseWriter, r *Request) {
 		userphoto = downloadUserFace(headimgurl)
 	}
 	_, flag := dao.AddUser(openid, unionid, bindweixin, userphoto)
+	l2 = time.Now().Unix()
+	log.Println(",Add user", l2-l1)
+	l1 = l2
 	//保存关注日志
 	var source string
 	if len(r.EventKey) > 8 {
@@ -43,7 +112,7 @@ func SubscribeHandler(w ResponseWriter, r *Request) {
 	} else {
 		source = ""
 	}
-	log.Println("source::", source, "flag:::", flag)
+	//log.Println("source::", source, "flag:::", flag)
 	if digitreg.MatchString(source) {
 		dao.SaveSubscribeLogs(openid, unionid, bindweixin, "wangzhan", "subscribe")
 		if flag == 1 {
@@ -69,6 +138,10 @@ func SubscribeHandler(w ResponseWriter, r *Request) {
 		}
 		dao.SaveSubscribeLogs(openid, unionid, bindweixin, source, "subscribe")
 	}
+
+	l2 = time.Now().Unix()
+	log.Println(",Do save userinfo", l2-l1)
+	l1 = l2
 }
 
 //取消关注事件处理
@@ -112,18 +185,21 @@ func DoLogin(key string, openid string) {
 //下载微信用户头像
 func downloadUserFace(url string) string {
 	var filename string
-	util.Try(func() {
+	
 		tn := time.Now()
 		filename = fmt.Sprintf("/upload/%s/%s/%s/%s%d.jpg", tn.Format("2006"), tn.Format("01"), tn.Format("02"), tn.Format("20060102150405"), rand.Intn(9999)+1000)
-		fi, _ := os.OpenFile(weixinconfig.SysConfig.Imgpath+filename, os.O_CREATE|os.O_TRUNC|os.O_SYNC|os.O_RDWR, 0x666)
-		defer fi.Close()
-		resp, err := http.Get(url)
-		defer resp.Body.Close()
-		if err == nil {
-			io.Copy(fi, resp.Body)
-		} else {
-			log.Println("download userface err:", err.Error())
-		}
-	}, func(e interface{}) {})
+		go func() {
+			util.Try(func() {
+			fi, _ := os.OpenFile(weixinconfig.SysConfig.Imgpath+filename, os.O_CREATE|os.O_TRUNC|os.O_SYNC|os.O_RDWR, 0x666)
+			defer fi.Close()
+			resp, err := http.Get(url)
+			defer resp.Body.Close()
+			if err == nil {
+				io.Copy(fi, resp.Body)
+			} else {
+				log.Println("download userface err:", err.Error())
+			}
+			}, func(e interface{}) {})
+		}()
 	return filename
 }

+ 2 - 20
weixin/src/qfw/weixin/voicehandler.go

@@ -17,22 +17,7 @@ func MsgVoiceHandler(w ResponseWriter, r *Request) {
 		return
 	}
 	tmp := clear_voice_reg.ReplaceAllString(r.Recognition, "")
-	if v, ok := UserSession[r.FromUserName]; ok {
-		if v.Type == "robot" { //正在聊天
-			if len(chat_bye.FindStringIndex(tmp)) > 0 { //离开
-				delete(UserSession, r.FromUserName)
-				w.ReplyText("再见了小主人,记得想我呦。")
-				return
-			} else { //正常聊天
-				processRobotMsg(r.FromUserName, tmp, w, r)
-				return
-			}
-		}
-	} else if len(notify_xiaoxing.FindStringIndex(tmp)) > 0 {
-		UserSession[r.FromUserName] = NewUserSession("robot")
-		w.ReplyText("嗨,小星来陪你解闷。有什么开心的,不开心的说说来,大伙乐呵乐呵。\n输入q或Q离开。")
-		return
-	} else if k_index := keyword_voice_reg.FindStringIndex(tmp); len(k_index) == 2 {
+	if k_index := keyword_voice_reg.FindStringIndex(tmp); len(k_index) == 2 {
 		//不再会话中,也没有唤醒小星,并且在查企业
 		search := tmp[k_index[1]:]
 		ret, err := findEntprise(search)
@@ -48,10 +33,7 @@ func MsgVoiceHandler(w ResponseWriter, r *Request) {
 			}
 			w.ReplyNews(arts)
 		}
-	} else {
-		w.ReplyText("您说的是:" + tmp + ",小星无法识别。\n查询企业请说:\n搜索XX\n查询XX\n检索XX")
-		return
-	}
+	}  
 }
 
 //查询企业

+ 11 - 1
weixin/src/qfw/weixin/weixin.go

@@ -15,6 +15,11 @@ var WELCOME_MSG string
 var OWELCOME_MSG string
 var digitreg *regexp.Regexp = regexp.MustCompile("^\\d+$")
 
+var mids = map[string]bool{}
+var reg = regexp.MustCompile("^([a-z]+)(\\d.*)$")
+var subreg = regexp.MustCompile("^(\\d+)([smhd]{0,1})$")
+var DIR = ""
+
 func InitWeixinSdk() {
 	keyword_voice_reg, _ = regexp.Compile("查询|搜索|检索|看|找|查|搜")
 	clear_voice_reg, _ = regexp.Compile("!|!|\\s+")
@@ -23,6 +28,12 @@ func InitWeixinSdk() {
 	WELCOME_MSG = wf.SysConfig.WelcomeTip
 	OWELCOME_MSG = wf.SysConfig.OWelcomeTip
 
+	//
+	for _, v := range wf.SysConfig.Mids {
+		mids[v] = true
+	}
+	DIR = wf.SysConfig.Dir
+
 	// my-token 验证微信公众平台的Token
 	// app-id, app-secret用于高级API调用。
 	// 如果仅使用接收/回复消息,则可以不填写,使用下面语句
@@ -57,7 +68,6 @@ func InitWeixinSdk() {
 	http.HandleFunc("/"+wf.SysConfig.Appcontext+"/adv/", AdvHandle)
 
 	//执行其他一些初始化的动作
-	InitRobotHttpClient()
 	InitSSLClient()
 	util.StartSubscribeFilter(wf.SysConfig.SubscribeMonitorCyc, wf.SysConfig.SubscribeMonitorTimes)
 }

+ 131 - 146
weixin/src/qfw/weixin/wxadmin.go

@@ -4,171 +4,156 @@ import (
 	"fmt"
 	. "gopkg.in/mgo.v2/bson"
 	"io/ioutil"
+	"log"
 	"os/exec"
 	"qfw/util"
 	"qfw/util/mongodb"
 	"qfw/util/redis"
-	"qfw/weixinconfig"
-	"regexp"
 	"strconv"
 	"strings"
 	"time"
 )
 
-var mids = map[string]bool{}
-var reg = regexp.MustCompile("^([a-z]+)(\\d.*)$")
-var subreg = regexp.MustCompile("^(\\d+)([smhd]{0,1})$")
-var DIR = ""
-
-func init() {
-	for _, v := range weixinconfig.SysConfig.Mids {
-		mids[v] = true
-	}
-	DIR = weixinconfig.SysConfig.Dir
-}
-
 func processWxAdmin(openid, content string, w ResponseWriter, r *Request) {
-	/*
-		reg := regexp.MustCompile("^([a-z]+)(\\d.*)$")
-		reg2 := regexp.MustCompile("^(\\d+)([smhd])$")
-		s := reg.FindSubmatch([]byte("aaaaa23s-15s"))
-		s2 := strings.Split(string(s[2]), "-")
-		s2s := reg2.FindSubmatch([]byte(s2[0]))
-	*/
-	if openid != "" {
-		b, cmd, qleng, unit, var1, var2 := checkContent(content)
-		if b {
-			resStr := ""
-			switch cmd {
-			case "f":
-				//查看抽奖模式
-				resStr = getMode()
-			case "c":
-				//切换抽奖模式
-				if var1 >= 0 && var1 <= 3 {
-					br := redis.Put("other", "s_luckydraw_mode", fmt.Sprintf("%d", var1), 0)
-					if br {
-						resStr = "模式已切换:" + getMode()
-					}
-				}
-			case "tjr":
-				//数据库抽奖查看
-				var1, var2 = getTimes(qleng, unit, var1, var2)
-				qu1 := M{"$gte": var1}
-				if qleng == 2 { //取区间
-					qu1 = M{"$gte": var2, "$lte": var1}
-				} else {
-					w.ReplyText("指令异常,请重新输入。")
-					return
-				}
-				util.Try(func() {
-					sess := mongodb.GetMgoConn()
-					defer mongodb.DestoryMongoConn(sess)
-					var res []M
-					sess.DB("qfw").C("winningrecord").Pipe([]M{M{"$match": M{"l_timestamp": qu1}},
-						M{"$group": M{"_id": "$s_prize", "count": M{"$sum": 1}}}}).All(&res)
-					if res != nil && len(res) > 0 {
-						sum := 0
-						for _, v := range res {
-							resStr += "\n" + v["_id"].(string) + ":" + fmt.Sprintf("%x", v["count"])
-							sum += v["count"].(int)
-						}
-						resStr += "\n" + "总数:" + fmt.Sprintf("%d", sum)
-					}
-				}, func(e interface{}) {})
-			case "tju":
-				//新用户查看
-				var1, var2 = getTimes(qleng, unit, var1, var2)
-				qu1 := M{"$gte": var1}
-				if qleng == 2 { //取区间
-					qu1 = M{"$gte": var2, "$lte": var1}
-				} else {
-					w.ReplyText("指令异常,请重新输入。")
-					return
-				}
-				util.Try(func() {
-					sess := mongodb.GetMgoConn()
-					defer mongodb.DestoryMongoConn(sess)
-					var res []M
-					sess.DB("qfw").C("user").Pipe([]M{M{"$match": M{"l_registedate": qu1}},
-						M{"$group": M{"_id": "$black", "count": M{"$sum": 1}}}}).All(&res)
-					if res != nil && len(res) > 0 {
-						sum := 0
-						for _, v := range res {
-							resStr += "\n" + util.If(v["_id"] == nil, "黑名单用户", "正常用户").(string) + ":" + fmt.Sprintf("%x", v["count"])
-							sum += v["count"].(int)
+	util.Try(func() {
+
+		if openid != "" {
+			b, cmd, qleng, unit, var1, var2 := checkContent(content)
+			if b {
+				resStr := "无结果"
+				switch cmd {
+				case "f":
+					//查看抽奖模式
+					resStr = getMode()
+				case "c":
+					//切换抽奖模式
+					if var1 >= 0 && var1 <= 3 {
+						br := redis.Put("other", "s_luckydraw_mode", fmt.Sprintf("%d", var1), 0)
+						if br {
+							resStr = "模式已切换:" + getMode()
 						}
-						resStr += "\n" + "总数:" + fmt.Sprintf("%d", sum)
-					}
-				}, func(e interface{}) {})
-			case "ser":
-				//服务器实时统计情况
-				//各端口,及连接数
-				//总连接数
-				resStr = getServer()
-			case "man":
-				switch var1 {
-				case 1:
-					//重启core
-					cmdstr := getNewCmd(DIR, "core2016")
-					if len(cmdstr) > 0 {
-						execCmd(DIR, "core2016", cmdstr, true)
-					}
-					resStr = "重启主程序完成"
-				case 11:
-					//关闭core
-					cmdstr := getNewCmd(DIR, "core2016")
-					if len(cmdstr) > 0 {
-						execCmd(DIR, "core2016", cmdstr, false)
-					}
-					resStr = "关闭主程序完成"
-				case 2:
-					//重启weixin
-					cmdstr := getNewCmd(DIR+"/weixin", "weixin")
-					if len(cmdstr) > 0 {
-						execCmd(DIR+"/weixin", "weixin", cmdstr, true)
 					}
-					resStr = "重启微信程序完成"
-				case 22:
-				//不能关闭微信
-				case 3:
-					//重启积分
-					cmdstr := getNewCmd(DIR+"/credit", "credit")
-					if len(cmdstr) > 0 {
-						execCmd(DIR+"/credit", "credit", cmdstr, true)
+				case "tjr":
+					//数据库抽奖查看
+					var1, var2 = getTimes(qleng, unit, var1, var2)
+					qu1 := M{"$gte": var1}
+					if qleng == 2 { //取区间
+						qu1 = M{"$gte": var2, "$lte": var1}
+					} else {
+						w.ReplyText("指令异常,请重新输入。")
+						return
 					}
-					resStr = "重启积分程序完成"
-				case 33:
-					cmdstr := getNewCmd(DIR+"/credit", "credit")
-					if len(cmdstr) > 0 {
-						execCmd(DIR+"/credit", "credit", cmdstr, false)
-					}
-					resStr = "关闭积分程序完成"
-				//关闭积分
-				case 4:
-					//重启oauth
-					cmdstr := getNewCmd(DIR+"/proxy", "oauth")
-					if len(cmdstr) > 0 {
-						execCmd(DIR+"/proxy", "oauth", cmdstr, true)
+					util.Try(func() {
+						sess := mongodb.GetMgoConn()
+						defer mongodb.DestoryMongoConn(sess)
+						var res []M
+						sess.DB("qfw").C("winningrecord").Pipe([]M{M{"$match": M{"l_timestamp": qu1}},
+							M{"$group": M{"_id": "$s_prize", "count": M{"$sum": 1}}}}).All(&res)
+						if res != nil && len(res) > 0 {
+							sum := 0
+							for _, v := range res {
+								resStr += "\n" + v["_id"].(string) + ":" + fmt.Sprintf("%x", v["count"])
+								sum += v["count"].(int)
+							}
+							resStr += "\n" + "总数:" + fmt.Sprintf("%d", sum)
+						}
+					}, func(e interface{}) {})
+				case "tju":
+					//新用户查看
+					var1, var2 = getTimes(qleng, unit, var1, var2)
+					qu1 := M{"$gte": var1}
+					if qleng == 2 { //取区间
+						qu1 = M{"$gte": var2, "$lte": var1}
+					} else {
+						w.ReplyText("指令异常,请重新输入。")
+						return
 					}
-					resStr = "重启微信程认证序完成"
-				case 44:
-					//关闭oauth
-					cmdstr := getNewCmd(DIR+"/proxy", "oauth")
-					if len(cmdstr) > 0 {
-						execCmd(DIR+"/proxy", "oauth", cmdstr, false)
+					util.Try(func() {
+						sess := mongodb.GetMgoConn()
+						defer mongodb.DestoryMongoConn(sess)
+						var res []M
+						sess.DB("qfw").C("user").Pipe([]M{M{"$match": M{"l_registedate": qu1}},
+							M{"$group": M{"_id": "$black", "count": M{"$sum": 1}}}}).All(&res)
+						if res != nil && len(res) > 0 {
+							sum := 0
+							for _, v := range res {
+								resStr += "\n" + util.If(v["_id"] == nil, "黑名单用户", "正常用户").(string) + ":" + fmt.Sprintf("%x", v["count"])
+								sum += v["count"].(int)
+							}
+							resStr += "\n" + "总数:" + fmt.Sprintf("%d", sum)
+						}
+					}, func(e interface{}) {})
+				case "ser":
+					//服务器实时统计情况
+					//各端口,及连接数
+					//总连接数
+					resStr = getServer()
+				case "man":
+					switch var1 {
+					case 1:
+						//重启core
+						cmdstr := getNewCmd(DIR, "core2016")
+						if len(cmdstr) > 0 {
+							execCmd(DIR, "core2016", cmdstr, true)
+						}
+						resStr = "重启主程序完成"
+					case 11:
+						//关闭core
+						cmdstr := getNewCmd(DIR, "core2016")
+						if len(cmdstr) > 0 {
+							execCmd(DIR, "core2016", cmdstr, false)
+						}
+						resStr = "关闭主程序完成"
+					case 2:
+						//重启weixin
+						cmdstr := getNewCmd(DIR+"/weixin", "weixin")
+						if len(cmdstr) > 0 {
+							execCmd(DIR+"/weixin", "weixin", cmdstr, true)
+						}
+						resStr = "重启微信程序完成"
+					case 22:
+						//不能关闭微信
+						break
+					case 3:
+						//重启积分
+						cmdstr := getNewCmd(DIR+"/credit", "credit")
+						if len(cmdstr) > 0 {
+							execCmd(DIR+"/credit", "credit", cmdstr, true)
+						}
+						resStr = "重启积分程序完成"
+					case 33:
+						cmdstr := getNewCmd(DIR+"/credit", "credit")
+						if len(cmdstr) > 0 {
+							execCmd(DIR+"/credit", "credit", cmdstr, false)
+						}
+						resStr = "关闭积分程序完成"
+					//关闭积分
+					case 4:
+						//重启oauth
+						cmdstr := getNewCmd(DIR+"/proxy", "oauth")
+						if len(cmdstr) > 0 {
+							execCmd(DIR+"/proxy", "oauth", cmdstr, true)
+						}
+						resStr = "重启微信程认证序完成"
+					case 44:
+						//关闭oauth
+						cmdstr := getNewCmd(DIR+"/proxy", "oauth")
+						if len(cmdstr) > 0 {
+							execCmd(DIR+"/proxy", "oauth", cmdstr, false)
+						}
+						resStr = "关闭微信程认证序完成"
 					}
-					resStr = "关闭微信程认证序完成"
 				}
+				log.Println("res str", resStr)
+				w.ReplyText(resStr)
+			} else {
+				w.ReplyText("指令不存在,请重新输入。")
 			}
-			w.ReplyText(resStr)
 		} else {
-			w.ReplyText("指令不存在,请重新输入。")
+			w.ReplyText("用户信息不存在,请重新进入。")
+			delete(UserSession, openid)
 		}
-	} else {
-		w.ReplyText("用户信息不存在,请重新进入。")
-		delete(UserSession, openid)
-	}
+	}, func(e interface{}) {})
 }
 
 func getNewCmd(dir, substr string) string {