|
|
@@ -0,0 +1,540 @@
|
|
|
+package apps
|
|
|
+
|
|
|
+import (
|
|
|
+ "fmt"
|
|
|
+ "fohow.com/apps/models/token_model"
|
|
|
+ "regexp"
|
|
|
+ "strings"
|
|
|
+ // "time"
|
|
|
+
|
|
|
+ "github.com/astaxie/beego"
|
|
|
+ "github.com/astaxie/beego/context"
|
|
|
+ "github.com/user_agent"
|
|
|
+ // "github.com/uuid"
|
|
|
+ // "fohow.com/apps/controllers/user_controller"
|
|
|
+ // "fohow.com/apps/models/balance_model"
|
|
|
+ "fohow.com/apps/models/channel_gzh_qrcode_model"
|
|
|
+ "fohow.com/apps/models/user_model"
|
|
|
+)
|
|
|
+
|
|
|
+const (
|
|
|
+ SessionUserKey = "uid"
|
|
|
+ SessionWxUserKey = "wxuid" //用于小程序
|
|
|
+ // SessionWxXcxUserKey = "wxxcxuid"
|
|
|
+ XcxSessionKey = "XcxSessionKey" // 小程序用于加密解密数据的key
|
|
|
+)
|
|
|
+
|
|
|
+var (
|
|
|
+ // 共用
|
|
|
+ ComNotAllow = []string{"notAllow", "权限不够,请联系管理员"}
|
|
|
+
|
|
|
+ BindFail = []string{"bindFail", "迁移失败,请联系管理员"}
|
|
|
+ HasBind = []string{"hasBind", "该会员编号已绑定会员"}
|
|
|
+ DailySignRepeat = []string{"dailySignRepeat", "已经领取过啦"}
|
|
|
+ RedisError = []string{"redisError", "redis初始化错误"}
|
|
|
+ RedisGetError = []string{"redisGetError", "redisGet错误"}
|
|
|
+ RedisJsonError = []string{"redisJsonError", "json转换错误"}
|
|
|
+ OrderRefundError = []string{"orderRefundError", "退款失败"}
|
|
|
+ OtherSNotAllow = []string{"othersNotAllow", "非店长无法在专区下单!"}
|
|
|
+ AlreadyShop = []string{"alreadyShop", "您已经是店主,请勿重复申请"}
|
|
|
+ AlreadyAgent = []string{"alreadyShop", "该会员已是代理,请勿重复申请"}
|
|
|
+
|
|
|
+ ShopNoRepit = []string{"shopNoRepit", "请勿重复申请"}
|
|
|
+ NoCart = []string{"noCart", "请选择您需要结算的产品"}
|
|
|
+ NoExist = []string{"noExist", "该记录不存在"}
|
|
|
+ ProductNotAllow = []string{"productNotAllow", "该商品无法购买"}
|
|
|
+ TokenError = []string{"tokenError", "生成令牌出错"}
|
|
|
+ HasOver = []string{"hasOver", "已结束"}
|
|
|
+ NoShopSale = []string{"noShopSale", "该商品非专区商品"}
|
|
|
+ HasPaied = []string{"hasPaied", "已支付"}
|
|
|
+ AccountError = []string{"accountError", "账户异常"}
|
|
|
+ GongZhongHaoNoExist = []string{"gongZhongHaoNoExist", "公众号不存在"}
|
|
|
+ Error = []string{"error", "未知错误"}
|
|
|
+ TypeError = []string{"error", "类型错误"}
|
|
|
+ CountError = []string{"countError", "数量错误"}
|
|
|
+ RegisterUserError = []string{"registerUserError", "注册会员错误"}
|
|
|
+ BindingWxPhoneError = []string{"bindingWxPhone", "绑定失败"}
|
|
|
+ XcxAuthorizeError = []string{"XcxAuthorizeError", "授权失败"}
|
|
|
+ PicVerifyCodeError = []string{"picVerifyCodeError", "图片验证码错误"}
|
|
|
+ WxUserInfoError = []string{"wxUserInfoError", "微信会员信息错误!"}
|
|
|
+ ChannelNotMatch = []string{"channelNotMatch", "渠道不匹配"}
|
|
|
+ ChanneloExist = []string{"channelNoExist", "渠道不存在"}
|
|
|
+ UploadFileError = []string{"uploadFileError", "上传文件失败!"}
|
|
|
+ UploadFileTypeInvalid = []string{"uploadFileTypeError", "上传文件类型错误!仅支持以下格式:doc|docx|pdf|ppt|pptx|zip"}
|
|
|
+ UploadImgTypeInvalid = []string{"uploadImgTypeError", "上传文件类型错误!仅支持以下格式:png|jpg|jpeg"}
|
|
|
+
|
|
|
+ // 登录相关
|
|
|
+ HasLogin = []string{"hasLogin", "已登录"}
|
|
|
+ HasLogout = []string{"hasLogout", "已登出"}
|
|
|
+ UserNeedLogin = []string{"userNeedLogin", "授权无效,需要用户登录"}
|
|
|
+ UserAuthorizeFailed = []string{"userAuthorizeFailed", "用户授权失败"}
|
|
|
+ UserNeedTel = []string{"userNeedTel", "需要用户绑定手机"}
|
|
|
+ UserTelNotMatch = []string{"userTelNotMatch", "手机号码不匹配,请使用当前登录用户的号码"}
|
|
|
+ WxUserNeedLogin = []string{"wxUserNeedLogin", "需要微信用户登录"}
|
|
|
+ NotWeixinClient = []string{"notWeixinClient", "不是微信客户端"}
|
|
|
+ SignupNotOpen = []string{"signupNotOpen", "注册暂未开放,敬请期待"}
|
|
|
+ ProductErrorType = []string{"productErrorType", "请您前往店铺专区下单"}
|
|
|
+
|
|
|
+ // 支付相关
|
|
|
+ PayWayNoMatch = []string{"payWayNoMatch", "请选择正确的支付方式"}
|
|
|
+ //请输入充值数额
|
|
|
+ RechargeCountWrong = []string{"rechargeCountWrong", "请输入充值数额"}
|
|
|
+ // 关注
|
|
|
+ WxUserNeedSubscribe = []string{"wxUserNeedSubscribe", "请先关注公众号"}
|
|
|
+ TGDKjNeedSub = []string{"TGDKjNeedSub", "请先进入公众号领取大刀"}
|
|
|
+
|
|
|
+ BlackUser = []string{"blackUser", "对不起,您已被拉黑"}
|
|
|
+ BlackUrl = []string{"blackUrl", "对不起,网址不允许访问"}
|
|
|
+ BlackOrder = []string{"blackOrder", "该订单作弊,已被拉黑"}
|
|
|
+
|
|
|
+ CreateOrderFail = []string{"createOrderFail", "创建订单失败"}
|
|
|
+
|
|
|
+ OnlyPlayInWeixin = []string{"onlyPlayInWeixin", "只能在微信客户端进行"}
|
|
|
+ OrderNotExist = []string{"orderNotExist", "订单不存在"}
|
|
|
+ OrderExist = []string{"orderExist", "订单已存在"}
|
|
|
+ DetailNotAllow = []string{"detailNotAllow", "评论内容不能为空"}
|
|
|
+ DetailHasCommend = []string{"detailHasCommend", "商品已评论"}
|
|
|
+
|
|
|
+ PayFail = []string{"payFail", "支付失败"}
|
|
|
+ ParamsError = []string{"paramsError", "参数错误"}
|
|
|
+ ValidParamsError = []string{"validateParamsError", "验证参数错误"}
|
|
|
+ ParamsRequired = []string{"paramsRequired", "缺少参数"}
|
|
|
+ ProductStockZero = []string{"productStockZero", "商品库存为零"}
|
|
|
+ ProductStockNotEnough = []string{"productStockNotEnough", "商品库存不足"}
|
|
|
+ ProductNotExist = []string{"productNotExist", "产品不存在"}
|
|
|
+ ProductNotApproved = []string{"productNotApproved", "产品还未上架"}
|
|
|
+ ProductOffSale = []string{"productOffSale", "产品已经下架"}
|
|
|
+ OverLimitCount = []string{"overLimitCount", "超过限购数量"}
|
|
|
+ SingleOverLimitCount = []string{"singleOverLimitCount", "超过限购数量"}
|
|
|
+ PurchasedReachLimit = []string{"purchasedReachLimit", "已购买总数已达到限购数量"}
|
|
|
+ OnlyDeliveryArea = []string{"onlyDeliveryArea", "产品不在限售区域内"}
|
|
|
+ RedirectTo = []string{"redirectTo", "302跳转"}
|
|
|
+ ReduceFail = []string{"reduceFail", "帮砍失败"}
|
|
|
+
|
|
|
+ UserNotExist = []string{"userNotExist", "用户不存在"}
|
|
|
+
|
|
|
+ AddressNotExist = []string{"addressNotExist", "地址不存在"}
|
|
|
+ UserAddressFull = []string{"userAddressFull", "最多添加5条地址"}
|
|
|
+ UploadUserHeadError = []string{"uploadUserHeadError", "上传头像错误"}
|
|
|
+ AddressNotMatch = []string{"addressNotMatch", "地址不匹配"}
|
|
|
+ NotUnPay = []string{"notUnPay", "无法支付,该订单已支付或者已过期"}
|
|
|
+ NotPayWayTime = []string{"notPayWayTime", "无法支付,促销期间只允许提货券支付"}
|
|
|
+
|
|
|
+ NotEnoughPay = []string{"notEnouphPay", "无法支付,提货券余额不足!"}
|
|
|
+ NotRightPayWay = []string{"notRightPayWay", "无法支付,该订单只支持微信支付"}
|
|
|
+ HasAlreadyPay = []string{"hasAlreadyPay", "该订单已支付过"}
|
|
|
+ NotPayInTime = []string{"notPayInTime", "没在规定时间内完成支付"}
|
|
|
+ PayWayNotAllow = []string{"payWayNotAllow", "暂不支持微信支付!"}
|
|
|
+ PayNoAuthed = []string{"payNoAuthed", "支付未授权"}
|
|
|
+ PhoneInvalid = []string{"phoneInvalid", "手机号码格式不正确"}
|
|
|
+ PhoneExist = []string{"phoneExist", "手机号码已被注册,请更换其他号码"}
|
|
|
+ SMSInvalid = []string{"smsInvalid", "短信验证码不正确"}
|
|
|
+ CodesSendTooOften = []string{"codesSendTooOften", "短信验证码发送过于频繁,请半小时后重试"}
|
|
|
+
|
|
|
+ WxMenusCreatedFailed = []string{"wxMenusCreatedFailed", "微信菜单创建失败"}
|
|
|
+ //小程序相关
|
|
|
+ XcxGetSessionKeyError = []string{"xcxGetSessionKeyError", "获取session key失败"}
|
|
|
+
|
|
|
+ RailAdminIPReduced = []string{"railsAdminIPReduced", "拒绝此IP访问,权限不够"}
|
|
|
+ TelCodesError = []string{"telCodeError", "验证码错误"}
|
|
|
+ TelCodesTypeError = []string{"telCodesTypeError", "验证码类型错误"}
|
|
|
+ PasswordError = []string{"passwordError", "密码错误"}
|
|
|
+ LoginPwdSameWithTradePwdError = []string{"loginPwdSameWithTradePwdError", "登录密码与交易密码不能相同,请重新设置"}
|
|
|
+ OrginalPasswordError = []string{"orginalPasswordError", "原始密码错误"}
|
|
|
+ TelCodesExpired = []string{"telCodeExpired", "验证码已过期"}
|
|
|
+ LoginPasswordError = []string{"loginPasswordError", "登录密码错误"}
|
|
|
+ TradePasswordError = []string{"tradePasswordError", "交易密码错误"}
|
|
|
+ TradePasswordEmptry = []string{"tradePasswordEmpty", "未设置交易密码"}
|
|
|
+ UpdatePasswordError = []string{"updatePasswordError", "更新密码出错"}
|
|
|
+ PasswordLengthError = []string{"passwordLengthError", "密码长度错误,需要6-20位"}
|
|
|
+ GetCaptchaError = []string{"getCaptchaError", "获取图片验证码错误"}
|
|
|
+
|
|
|
+ BindingBankCardEmpty = []string{"bindingBankCardEmpty", "绑定银行卡错误,请完善银行卡信息"}
|
|
|
+ BindingWxUserError = []string{"bindingWxUserError", "绑定微信错误,请重试"}
|
|
|
+ BindingUserTelError = []string{"bindingUserTelError", "绑定电话错误,请重试"}
|
|
|
+ BindingIdCardEmpty = []string{"bindingIdCardEmpty", "绑定身份证错误,请填写真实姓名及身份证号"}
|
|
|
+ UserHasBindIdCard = []string{"userHasBindIdCard", "该用户已绑定了身份证,请联系客服更改"}
|
|
|
+ BindingIdCardExist = []string{"bindingIdCardExist", "该身份证已被绑定,请更换其他身份证"}
|
|
|
+ BindingIdCardLengthError = []string{"bindingIdCardLengthError", "身份证位数不合法"}
|
|
|
+ BindingTelExisted = []string{"bindingTelExisted", "该号码已绑定了微信用户,请尝试其他号码"}
|
|
|
+ WxUserHasBindingTel = []string{"wxUserHasBindingTel", "该微信用户已经绑定了手机,请勿重复绑定"}
|
|
|
+ WxUserNotExist = []string{"wxUserNotExist", "微信用户不存在"}
|
|
|
+ WxUserNotRegistD5c = []string{"wxUserNotRegistD5c", "用户在第五创没有绑定手机号码"}
|
|
|
+ IdCardAgeNotBeAdult = []string{"idCardAgeNotBeAdult", "未满18岁,身份认证失败"}
|
|
|
+
|
|
|
+ // 工具tool相关
|
|
|
+ DownloadError = []string{"downloadError", "阿里云下载文件错误"}
|
|
|
+ ConvertToBase64Error = []string{"convertToBase64Error", "转base64错误"}
|
|
|
+ //资金账户相关
|
|
|
+ CentNotEnough = []string{"centNotEnough", "积分余额不足"}
|
|
|
+ BalanceNotExist = []string{"balanceNotExist", "资金明细不存在"}
|
|
|
+ BalanceNotEnough = []string{"balanceNotEnough", "余额不足"}
|
|
|
+ BalanceNotEnoughForCharge = []string{"balanceNotEnoughForCharge", "可提现余额不足支付手续费,无法提现"}
|
|
|
+ TakeCashAmountLessThanCharge = []string{"balanceAmountLessThanCharge", "提现金额需大于手续费金额"}
|
|
|
+ TakeCashAmountInvalid = []string{"takeCashAmountInvalid", "提现金额不合法,仅支持小数点后两位。如:88.88"}
|
|
|
+ RechargeAmountInvalid = []string{"RechargeAmountInvalid", "充值金额不合法,仅支持小数点后两位。如:88.88"}
|
|
|
+ BankCardNotFound = []string{"bankCardNotFound", "请先绑定银行卡"}
|
|
|
+ BankCardNoInvalid = []string{"bankCardNoInvalid", "银行卡号不合法,请重新输入"}
|
|
|
+ BankCardNotMatch = []string{"bankCardNotMatch", "银行卡号不匹配,请使用实名认证的本人银行卡绑定,如认证信息有误,请联系客服更改"}
|
|
|
+ BankCardHasNoRecordOnLianLianPay = []string{"bankCardHasNoRecordOnLianLianPay", "该银行卡在连连支付无记录,请先充值"}
|
|
|
+ BankCardCountLimit = []string{"bankCardCountLimit", "银行卡绑定数量限制"}
|
|
|
+ CanNotDeleteDefaultBankCard = []string{"canNotDeleteDefaultBankCard", "不能删除默认银行卡"}
|
|
|
+ BankCardHasBound = []string{"bankCardHasBound", "该银行卡已有绑定记录"}
|
|
|
+ BalanceToCashErr = []string{"balanceToCashErr", "余额转提货券失败"}
|
|
|
+
|
|
|
+ //春节红包
|
|
|
+ ActivityNotStart = []string{"activityNotStart", "活动尚未开始"}
|
|
|
+ ActivityIsEnd = []string{"activityIsEnd", "活动已经结束"}
|
|
|
+ HasGotLuckyMoney = []string{"hasGotLuckyMoney", "你已经拿过红包了"}
|
|
|
+
|
|
|
+ //商家
|
|
|
+ OrderNotBelongToCurrentUser = []string{"orderNotBelongToCurrentUser", "订单不属于当前用户。"}
|
|
|
+ OrderStatusNotSuit = []string{"orderStatusNotSuit", "只能处理待发货、待收货的订单"}
|
|
|
+ OrderAlreadyDispatch = []string{"orderAlreadyDispatch", "该订单已经被处理发货"}
|
|
|
+ OrderAlreadyRefund = []string{"orderAlreadyRefund", "该订单已经被处理退款"}
|
|
|
+ OrderRefundFaild = []string{"orderRefundFaild", "退款失败,请联系客服"}
|
|
|
+ CurrentMerIsNotSuperAdminMerchant = []string{"currentMerIsNotSuperAdminMerchant", "当前用户不是商家超级管理员"}
|
|
|
+ CurrentMerIsNotManageTheProduct = []string{"currentMerIsNotManageTheProduct", "当前用户不负责管理该商品"}
|
|
|
+ //移动讯兑
|
|
|
+ DataUnMarsha1Error = []string{"dataUnMarsha1Error", "数据解析错误"}
|
|
|
+
|
|
|
+ //项目
|
|
|
+ ProjectNoExist = []string{"projectNoExist", "项目不存在"}
|
|
|
+ ProjectInvestWayNoExist = []string{"projectInvestWayNoExist", "该资助方式不存在"}
|
|
|
+
|
|
|
+ //微信公众号登录
|
|
|
+ NetworkBusy = []string{"networkBusy", "对不起,网络繁忙,请稍后再试"}
|
|
|
+
|
|
|
+ //秒杀活动
|
|
|
+ SeckillNotStart = []string{"seckillNotStart", "秒杀活动尚未开始"}
|
|
|
+ SeckillIsEnd = []string{"seckillIsEnd", "秒杀活动已经结束"}
|
|
|
+ SeckillNotAllow = []string{"seckillNotAllow", "秒杀商品不允许加入购物车"}
|
|
|
+
|
|
|
+ OnlyNew = []string{"onlyNew", "仅限新人购买"}
|
|
|
+ OrderNotEnough = []string{"orderNotEnough", "订单金额不满足"}
|
|
|
+ HasPatched = []string{"hasPached", "已发放"}
|
|
|
+ WrongUserRank = []string{"wrongUserRank", "会员资格信息错误"}
|
|
|
+)
|
|
|
+
|
|
|
+type BaseController struct {
|
|
|
+ beego.Controller
|
|
|
+ OnlyCheckUserLoginAction []string
|
|
|
+ ExceptCheckUserLoginAction []string
|
|
|
+ OnlyCheckWxUserLoginAction []string
|
|
|
+ ExceptCheckWxUserLoginAction []string
|
|
|
+ UserNeedLoginAction []string
|
|
|
+}
|
|
|
+
|
|
|
+type Result struct {
|
|
|
+ Status int `json:"status"`
|
|
|
+ Result []interface{} `json:"result"`
|
|
|
+}
|
|
|
+
|
|
|
+// 定义正确结果集
|
|
|
+func (self *BaseController) FormatResult(result []interface{}) *Result {
|
|
|
+ return &Result{
|
|
|
+ Status: 200,
|
|
|
+ Result: result,
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (self *BaseController) GetCurrentUserId() int64 {
|
|
|
+ uId, _ := self.GetSession(SessionUserKey).(int64)
|
|
|
+ return uId
|
|
|
+}
|
|
|
+
|
|
|
+func (self *BaseController) GetCurrentUser(useCache bool) *user_model.User {
|
|
|
+ wxUser := self.GetCurrentWxUser(useCache)
|
|
|
+ if wxUser == nil {
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+ id := wxUser.UserId
|
|
|
+ if id <= 0 {
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+ u := user_model.GetUserById(id, useCache)
|
|
|
+ if u == nil {
|
|
|
+ beego.BeeLogger.Error("User Not Found, wx_uid=%d, uid=%d", wxUser.Id, id)
|
|
|
+ }
|
|
|
+ return u
|
|
|
+}
|
|
|
+
|
|
|
+func (self *BaseController) GetCurrentWxUser(useCache bool) *user_model.WxUser {
|
|
|
+ id := self.GetCurrentWxUserIdByToken()
|
|
|
+ if id <= 0 {
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+ u := user_model.GetWxUserById(id, useCache)
|
|
|
+ if u == nil {
|
|
|
+ beego.BeeLogger.Error("WxUser Not Found, id=%d", id)
|
|
|
+ }
|
|
|
+ return u
|
|
|
+}
|
|
|
+
|
|
|
+// 根据token解析userId
|
|
|
+func (self *BaseController) GetCurrentWxUserIdByToken() int64 {
|
|
|
+ return getCurrentUserIdByToken(self.Ctx)
|
|
|
+}
|
|
|
+
|
|
|
+// TODO校验是否微信客户端
|
|
|
+func getCurrentUserIdByToken(ctx *context.Context) int64 {
|
|
|
+ inputToken := ""
|
|
|
+ wxUserId := int64(0)
|
|
|
+ requestAuthordata := ctx.Request.Header.Get("Authorization")
|
|
|
+ if len(requestAuthordata) > 0 {
|
|
|
+ authorizationData := strings.SplitN(ctx.Request.Header.Get("Authorization"), " ", 2)
|
|
|
+ if len(authorizationData) > 1 {
|
|
|
+ inputToken = authorizationData[1]
|
|
|
+ token_user, err := token_model.ValidateToken(inputToken)
|
|
|
+ if err == nil {
|
|
|
+ wxUserId = token_user.Id
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return wxUserId
|
|
|
+}
|
|
|
+
|
|
|
+// sceneId, 关注场景id
|
|
|
+func (self *BaseController) CheckWxUserSubscribe(sceneId int64) {
|
|
|
+ beego.BeeLogger.Info("check wx_user subscribe")
|
|
|
+ ctx := self.Ctx
|
|
|
+ if !isWxClient(ctx) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ wxUserId, ok := ctx.Input.Session(SessionWxUserKey).(int64)
|
|
|
+ if ok {
|
|
|
+ wxUser := user_model.GetWxUserById(wxUserId, false)
|
|
|
+ if wxUser == nil {
|
|
|
+ beego.BeeLogger.Error("WxUser Not Found, id=%d", wxUserId)
|
|
|
+ } else {
|
|
|
+ if wxUser.Subscribe == 0 {
|
|
|
+ qrcode := channel_gzh_qrcode_model.GetBySceneId(sceneId, true)
|
|
|
+ if qrcode == nil {
|
|
|
+ //默认二维码
|
|
|
+ qrcode = channel_gzh_qrcode_model.GetBySceneId(25, true)
|
|
|
+ }
|
|
|
+ qrcodeUrl := qrcode.QrcodeImg
|
|
|
+ errCode := &ErrCode{
|
|
|
+ Code: WxUserNeedSubscribe[0],
|
|
|
+ Msg: WxUserNeedSubscribe[1],
|
|
|
+ Redirect: qrcodeUrl,
|
|
|
+ Data: nil,
|
|
|
+ }
|
|
|
+ ctx.Output.SetStatus(403)
|
|
|
+ ctx.Output.JSON(errCode, true, true)
|
|
|
+ self.StopRun()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ beego.BeeLogger.Error("WxUser Not Login")
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func checkWxUserLogin(ctx *context.Context) {
|
|
|
+ //beego.BeeLogger.Info("show the request : %s from UserAgent: %s", ctx.Input.URI(), ctx.Input.UserAgent())
|
|
|
+ //检测 token 是否合法
|
|
|
+ var inputToken string
|
|
|
+ //beego.BeeLogger.Warn("request authorizationData : %s", ctx.Request.Header.Get("Authorization"))
|
|
|
+ requestAuthordata := ctx.Request.Header.Get("Authorization")
|
|
|
+ if len(requestAuthordata) > 0 {
|
|
|
+ authorizationData := strings.SplitN(ctx.Request.Header.Get("Authorization"), " ", 2)
|
|
|
+ if len(authorizationData) != 2 {
|
|
|
+ errCode := &ErrCode{
|
|
|
+ Code: UserNeedLogin[0],
|
|
|
+ Msg: UserNeedLogin[1],
|
|
|
+ Redirect: "",
|
|
|
+ Data: nil,
|
|
|
+ }
|
|
|
+ //换成userNeedLogin
|
|
|
+ ctx.Output.SetStatus(403)
|
|
|
+ ctx.Output.JSON(errCode, true, true)
|
|
|
+ } else {
|
|
|
+ inputToken = authorizationData[1]
|
|
|
+ var wxUser *user_model.WxUser
|
|
|
+ user_token, err := token_model.ValidateToken(inputToken)
|
|
|
+ wxUser = user_model.GetWxUserById(user_token.Id, true)
|
|
|
+ if err != nil || wxUser == nil {
|
|
|
+ beego.BeeLogger.Warn("token error : %v", err)
|
|
|
+ // 验证 Token 无效
|
|
|
+ errCode := &ErrCode{
|
|
|
+ Code: UserNeedLogin[0],
|
|
|
+ Msg: UserNeedLogin[1],
|
|
|
+ Redirect: "",
|
|
|
+ Data: nil,
|
|
|
+ }
|
|
|
+ ctx.Output.SetStatus(403)
|
|
|
+ ctx.Output.JSON(errCode, true, true)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ errCode := &ErrCode{
|
|
|
+ Code: UserNeedLogin[0],
|
|
|
+ Msg: UserNeedLogin[1],
|
|
|
+ Redirect: "",
|
|
|
+ Data: nil,
|
|
|
+ }
|
|
|
+ ctx.Output.SetStatus(401)
|
|
|
+ ctx.Output.JSON(errCode, true, true)
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+// 检查来自大后台的请求是否为服务器IP
|
|
|
+func CheckIsInvokeFromRailsAdmin(ctx *context.Context) {
|
|
|
+ s := strings.Split(ctx.Request.RemoteAddr, ":")
|
|
|
+ ip := s[0]
|
|
|
+ beego.BeeLogger.Debug("railsadmin request ip is: %s", ip)
|
|
|
+ if ip != beego.AppConfig.String("RailsAdminAddr") {
|
|
|
+ errCode := &ErrCode{
|
|
|
+ Code: RailAdminIPReduced[0],
|
|
|
+ Msg: RailAdminIPReduced[1],
|
|
|
+ Redirect: "",
|
|
|
+ Data: nil,
|
|
|
+ }
|
|
|
+ ctx.Output.SetStatus(403)
|
|
|
+ ctx.Output.JSON(errCode, true, true)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (self *BaseController) Prepare() {
|
|
|
+ //beego.BeeLogger.Info("invote controller Prepare func")
|
|
|
+ needChkWxUserLogin := true
|
|
|
+ //needChkUserLogin := true
|
|
|
+ // needChkWxUserSubscribe := false
|
|
|
+ _, actionName := self.GetControllerAndAction()
|
|
|
+
|
|
|
+ if len(self.ExceptCheckWxUserLoginAction) > 0 {
|
|
|
+ for _, an := range self.ExceptCheckWxUserLoginAction {
|
|
|
+ if strings.ToLower(an) == "*" || strings.ToLower(an) == strings.ToLower(actionName) {
|
|
|
+ needChkWxUserLogin = false
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if needChkWxUserLogin {
|
|
|
+ checkWxUserLogin(self.Ctx)
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+type ErrCode struct {
|
|
|
+ Status int `json:"status"`
|
|
|
+ Code string `json:"err_code"`
|
|
|
+ Msg string `json:"err_msg"`
|
|
|
+ Redirect string `json:"redirect_to"`
|
|
|
+ Data map[string]string `json:"data"`
|
|
|
+}
|
|
|
+
|
|
|
+// 定义返回错误信息
|
|
|
+func (self *BaseController) ReturnError(status int, code []string, redirect string, data map[string]string) {
|
|
|
+ errCode := &ErrCode{
|
|
|
+ Status: status,
|
|
|
+ Code: code[0],
|
|
|
+ Msg: code[1],
|
|
|
+ Redirect: redirect,
|
|
|
+ Data: data,
|
|
|
+ }
|
|
|
+ // jsonErrCode, err := json.Marshal(errCode)
|
|
|
+ // if err != nil {
|
|
|
+ // beego.BeeLogger.Error("json encode error=[%s]", err)
|
|
|
+ // }
|
|
|
+ self.Ctx.Output.SetStatus(status)
|
|
|
+ // self.Ctx.Output.Header("Content-Type", "application/json; charset=utf-8")
|
|
|
+ self.Ctx.Output.JSON(errCode, true, true)
|
|
|
+ self.StopRun()
|
|
|
+ // self.ServeJson(status, string(jsonErrCode))
|
|
|
+}
|
|
|
+
|
|
|
+// TODO校验是否微信客户端
|
|
|
+func (self *BaseController) IsWxClient() bool {
|
|
|
+ return isWxClient(self.Ctx)
|
|
|
+}
|
|
|
+
|
|
|
+// TODO校验是否微信客户端
|
|
|
+func isWxClient(ctx *context.Context) bool {
|
|
|
+ agent := ctx.Input.UserAgent()
|
|
|
+ b := getRealBrowser(agent)
|
|
|
+ isWxClient := b == "wx"
|
|
|
+ return isWxClient
|
|
|
+}
|
|
|
+
|
|
|
+// 是否是手机端
|
|
|
+func (self *BaseController) IsMobile() bool {
|
|
|
+ ua := strings.ToLower(self.Ctx.Input.UserAgent())
|
|
|
+ if ua == "" {
|
|
|
+ return true
|
|
|
+ }
|
|
|
+ ok, _ := regexp.MatchString("iphone|nokia|sony|ericsson|mot|samsung|sgh|lg|philips|panasonic|alcatel|lenovo|cldc|midp|wap|mobile", ua)
|
|
|
+ return ok
|
|
|
+}
|
|
|
+
|
|
|
+// 是否是开发模式
|
|
|
+func (self *BaseController) IsDev() bool {
|
|
|
+ //return beego.BConfig.RunMode == beego.DEV
|
|
|
+ return beego.AppConfig.String("Env") != "production"
|
|
|
+}
|
|
|
+
|
|
|
+func getRealBrowser(ua string) string {
|
|
|
+ userAgent := user_agent.New(ua)
|
|
|
+ browser, _ := userAgent.Browser()
|
|
|
+ browser = strings.ToLower(browser)
|
|
|
+ if browser == "internet explorer" {
|
|
|
+ browser = "ie"
|
|
|
+ }
|
|
|
+ lowerUa := strings.ToLower(ua)
|
|
|
+ // beego.BeeLogger.Warning("ua=%s", lowerUa)
|
|
|
+ if strings.Contains(lowerUa, "micromessenger") {
|
|
|
+ browser = "wx"
|
|
|
+ }
|
|
|
+ if strings.Contains(lowerUa, "wechatdevtools") {
|
|
|
+ browser = "wx"
|
|
|
+ }
|
|
|
+ return browser
|
|
|
+}
|
|
|
+
|
|
|
+func (self *BaseController) GetFullImgUrl(img string) string {
|
|
|
+ if img == "" {
|
|
|
+ return ""
|
|
|
+ }
|
|
|
+ if strings.HasPrefix(img, "http://") || strings.HasPrefix(img, "https://") {
|
|
|
+ return img
|
|
|
+ } else {
|
|
|
+ return fmt.Sprintf("%s/%s", beego.AppConfig.String("AliCDNImgHost"), img)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (self *BaseController) GetCdnFullImgUrl(img string) string {
|
|
|
+ if img == "" {
|
|
|
+ return ""
|
|
|
+ }
|
|
|
+ if strings.HasPrefix(img, "http://") || strings.HasPrefix(img, "https://") {
|
|
|
+ return img
|
|
|
+ } else {
|
|
|
+ return fmt.Sprintf("%s/%s", beego.AppConfig.String("AliCDNImgHost"), img)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// ServeJSON sends a json response with encoding charset.
|
|
|
+func (c *BaseController) ServeResultJSON(encoding ...bool) {
|
|
|
+ from := c.GetString("source")
|
|
|
+ //beego.BeeLogger.Warn("from--%s", from)
|
|
|
+ type Result struct {
|
|
|
+ Result interface{} `json:"result"`
|
|
|
+ }
|
|
|
+ var (
|
|
|
+ hasIndent = true
|
|
|
+ hasEncoding = false
|
|
|
+ )
|
|
|
+ if beego.AppConfig.String("RunMode") == "prod" {
|
|
|
+ hasIndent = false
|
|
|
+ }
|
|
|
+ if len(encoding) > 0 && encoding[0] == true {
|
|
|
+ hasEncoding = true
|
|
|
+ }
|
|
|
+ if from == beego.AppConfig.String("SourceList") {
|
|
|
+ c.Data["json"] = &Result{Result: c.Data["json"]}
|
|
|
+ }
|
|
|
+ c.Ctx.Output.JSON(c.Data["json"], hasIndent, hasEncoding)
|
|
|
+}
|