Explorar o código

Merge branch 'develop' into feature/#1001

* develop:
  测试分享信息
  测试分享信息
  测试分享信息
  更改订单类型 + 更新订单逻辑
  更改订单类型 + 更新订单逻辑
  新增用户信息更新接口 + 授权接口改造
  测试授权保存信息
  判断银行卡改为true
abiao %!s(int64=5) %!d(string=hai) anos
pai
achega
202ae08dbf

+ 9 - 0
go/gopath/src/fohow.com/apps/controllers/order_controller/cart_controller.go

@@ -8,6 +8,7 @@ import (
 	"github.com/astaxie/beego"
 	"strconv"
 	"strings"
+	"time"
 )
 
 //加入购物车
@@ -33,6 +34,14 @@ func (self *OrderController) CreateCart() {
 			self.ReturnError(403, apps.OnlyNew, "", nil)
 		}
 	}
+	//秒杀商品不允许加入购物车
+	if product.SeckilShowPrice > 0 {
+		now := time.Now()
+		if now.Unix() >= product.SeckillStart.Unix() && now.Unix() <= product.SeckillEnd.Unix() {
+			self.ReturnError(403, apps.SeckillNotAllow, "", nil)
+		}
+	}
+
 	cart := new(order_model.Cart).Create(wxUId, uId, product.Id, count)
 	result := false
 	if cart != nil {

+ 4 - 2
go/gopath/src/fohow.com/apps/controllers/order_controller/order_controller.go

@@ -45,6 +45,7 @@ func (self *OrderController) Create() {
 	//if user.IsBlackUser == 1 {
 	//	self.ReturnError(403, apps.AccountError, "", nil)
 	//}
+	orderType := order_model.ORDER_TYPE_NORMAL
 	//秒杀逻辑: 判断是否处于秒杀时间段内
 	if product.SeckilShowPrice > 0 {
 		now := time.Now()
@@ -53,6 +54,7 @@ func (self *OrderController) Create() {
 		} else if now.Unix() > product.SeckillEnd.Unix() {
 			self.ReturnError(403, apps.SeckillIsEnd, "", nil)
 		}
+		orderType = order_model.ORDER_TYPE_SEKILL
 	}
 	totalPrice := product.Price * count
 	//小兔微信,测试微信支付
@@ -65,7 +67,7 @@ func (self *OrderController) Create() {
 	}
 
 	order := new(order_model.Order).CreateNew(wxUId, uId,
-		totalPrice, freight, order_model.SOURCE_XCX)
+		totalPrice, freight, orderType, order_model.SOURCE_XCX)
 	if order == nil {
 		self.ReturnError(403, apps.CreateOrderFail, "", nil)
 	}
@@ -115,7 +117,7 @@ func (self *OrderController) MultipleCreate() {
 	totalPrice := int64(0)
 	//创建订单
 	order := new(order_model.Order).CreateNew(wxUId, uId,
-		totalPrice, int64(0), order_model.SOURCE_XCX)
+		totalPrice, int64(0), order_model.ORDER_TYPE_NORMAL, order_model.SOURCE_XCX)
 	if order == nil {
 		self.ReturnError(403, apps.CreateOrderFail, "", nil)
 	}

+ 4 - 1
go/gopath/src/fohow.com/apps/controllers/pay_controller/after_pay_controller.go

@@ -300,7 +300,10 @@ func (self *PayController) wxPayExchangeAsync() {
 
 	//go notice()
 	wxUser := user_model.GetWxUserById(order.WxUserId, true)
-	go newSendInviterBenefit(wxUser, order.OrderId, user_model.SOURCE_PRODUCT_BENEFIT)
+	if order.OrderType == order_model.ORDER_TYPE_NORMAL {
+		go newSendInviterBenefit(wxUser, order.OrderId, user_model.SOURCE_PRODUCT_BENEFIT)
+	}
+
 	//发放赠品
 	productId := int64(0)
 	if beego.AppConfig.String("RunMode") == "dev" {

+ 4 - 0
go/gopath/src/fohow.com/apps/controllers/pay_controller/pay_exchange_controller.go

@@ -56,6 +56,10 @@ func (self *PayController) payExchange(oId, payWay, tradPwd, returnUrl, source s
 		self.ReturnError(403, apps.NotUnPay, "", nil)
 	}
 	SaleNumsMap := make(map[int64]int64)
+	//支付方式判断
+	if order.OrderType == order_model.ORDER_TYPE_SEKILL && payWay == pay_model.PAYWAY_BALANCE {
+		self.ReturnError(403, apps.NotRightPayWay, "", nil)
+	}
 
 	//获取购物商品明细
 	buy_price_total := int64(0)

+ 95 - 3
go/gopath/src/fohow.com/apps/controllers/permit_controller/permit_controller.go

@@ -106,11 +106,18 @@ func (self *PermitController) XcxAuthorize() {
 	}
 	wxUser := user_model.GetWxUserByUnionid(encryptedData.UnionId, false)
 	ip := self.Ctx.Input.IP()
-	//注册会员
-	user := user_model.Create("", ip)
+	var user *user_model.User
+	if wxUser != nil && wxUser.UserId > 0 {
+		//查找已注册会员
+		user = user_model.GetUserById(wxUser.UserId, false)
+	} else {
+		//注册会员
+		user = user_model.Create("", ip)
+	}
 	if user == nil {
 		self.ReturnError(403, apps.RegisterUserError, "", nil)
 	}
+
 	if wxUser != nil {
 		wxUser.Openid = encryptedData.OpenId
 	} else {
@@ -149,7 +156,92 @@ func (self *PermitController) XcxAuthorize() {
 	wxUser.Country = info.UserInfo.Country
 	// beego.BeeLogger.Warn("XcxAuthorize wxUser before save() Nickname:%s, Sex:%s, City:%s, Province:%s, Country:%s ", wxUser.Nickname, wxUser.Sex, wxUser.City, wxUser.Province, wxUser.Country)
 	wxUser.Save()
-	// beego.BeeLogger.Warn("XcxAuthorize wxUser after save() Nickname:%s, Sex:%s, City:%s, Province:%s, Country:%s ", wxUser.Nickname, wxUser.Sex, wxUser.City, wxUser.Province, wxUser.Country)
+	beego.BeeLogger.Warn("XcxAuthorize wxUser after save() Nickname:%s, Sex:%s, City:%s, Province:%s, Country:%s ", wxUser.Nickname, wxUser.Sex, wxUser.City, wxUser.Province, wxUser.Country)
+	wxUser.UploadHead(info.UserInfo.AvatarUrl)
+
+	if wxUser != nil {
+		self.SetSession(apps.SessionWxUserKey, wxUser.Id)
+	}
+	// 如果微信用户已绑定手机,则找出userId,并且赋值给session[userId]
+	if wxUser != nil && wxUser.UserId > 0 {
+		user := user_model.GetUserById(wxUser.UserId, false)
+		user.CopyWxUserHead(wxUser.Head)
+		self.SetSession(apps.SessionUserKey, wxUser.UserId)
+	}
+	self.Data["json"] = encryptedData
+	self.ServeJSON()
+}
+
+//小程序授权
+func (self *PermitController) SaveWxuserInfo() {
+	params := self.GetString("userinfo")
+	type UserInfo struct {
+		NickName  string `json:"nickName"`  // 用户的昵称
+		Gender    int64  `json:"gender"`    // 用户的性别, 值为1时是男性, 值为2时是女性, 值为0时是未知
+		Language  string `json:"language"`  // 用户的语言, zh_CN, zh_TW, en
+		City      string `json:"city"`      // 用户所在城市
+		Province  string `json:"province"`  // 用户所在省份
+		Country   string `json:"country"`   // 用户所在国家
+		AvatarUrl string `json:"avatarUrl"` // 头像
+	}
+	type Info struct {
+		ErrMsg        string    `json:"errMsg"`
+		RawData       string    `json:"rawData"`
+		Signature     string    `json:"signature"`
+		Iv            string    `json:"iv"`
+		EncryptedData string    `json:"encryptedData"`
+		UserInfo      *UserInfo `json:"userInfo"`
+	}
+	info := new(Info)
+	err := json.Unmarshal([]byte(params), &info)
+
+	if err != nil {
+		beego.BeeLogger.Error("XcxAuthorize err: %s, info:%s", err, info)
+		self.ReturnError(403, apps.ParamsError, "", nil)
+	}
+
+	sessionKey, _ := self.GetSession(apps.XcxSessionKey).(string)
+	// beego.BeeLogger.Warn("sessionKey:%s", sessionKey)
+	type EncryptedData struct {
+		UnionId string `json:"unionId"`
+		OpenId  string `json:"openId"`
+	}
+
+	if sessionKey == "" {
+		self.ReturnError(403, apps.UserNeedLogin, "", nil)
+	}
+
+	pc := helpers.WxBizDataCrypt{AppID: beego.AppConfig.String("WxFohowXcxAppId"), SessionKey: sessionKey}
+	// beego.BeeLogger.Warn("EncryptedData:%s", info.EncryptedData)
+	// beego.BeeLogger.Warn("Iv:%s", info.Iv)
+	result, err := pc.Decrypt(info.EncryptedData, info.Iv, true) //第三个参数解释: 需要返回 JSON 数据类型时 使用 true, 需要返回 map 数据类型时 使用 false
+	if err != nil {
+		beego.BeeLogger.Error("xcx XcxAuthorize descrypt failed, err:%s", err)
+		self.ReturnError(403, apps.XcxAuthorizeError, "", nil)
+	}
+	encryptedData := &EncryptedData{}
+	json.Unmarshal([]byte(result.(string)), encryptedData)
+	if encryptedData.UnionId == "" || encryptedData.OpenId == "" {
+		self.ReturnError(403, apps.UserAuthorizeFailed, "", nil)
+	}
+	wxUser := user_model.GetWxUserByUnionid(encryptedData.UnionId, false)
+	if wxUser == nil {
+		self.ReturnError(403, apps.WxUserInfoError, "", nil)
+	}
+
+	if wxUser != nil {
+		wxUser.Openid = encryptedData.OpenId
+	}
+
+	//wxUser.UserId = user.Id
+	wxUser.Nickname = info.UserInfo.NickName
+	wxUser.Sex = info.UserInfo.Gender
+	wxUser.City = info.UserInfo.City
+	wxUser.Province = info.UserInfo.Province
+	wxUser.Country = info.UserInfo.Country
+	// beego.BeeLogger.Warn("XcxAuthorize wxUser before save() Nickname:%s, Sex:%s, City:%s, Province:%s, Country:%s ", wxUser.Nickname, wxUser.Sex, wxUser.City, wxUser.Province, wxUser.Country)
+	wxUser.Save()
+	beego.BeeLogger.Warn("XcxAuthorize wxUser after save() Nickname:%s, Sex:%s, City:%s, Province:%s, Country:%s ", wxUser.Nickname, wxUser.Sex, wxUser.City, wxUser.Province, wxUser.Country)
 	wxUser.UploadHead(info.UserInfo.AvatarUrl)
 
 	if wxUser != nil {

+ 1 - 1
go/gopath/src/fohow.com/apps/controllers/user_controller/user_controller.go

@@ -357,7 +357,7 @@ func (self *UserController) GetBankInfo() {
 	}
 	user := self.GetCurrentUser(useCache)
 	if user != nil {
-		user.HasBank = false
+		user.HasBank = true
 		if user.BankAccount != "" && user.AccountName != "" {
 			user.HasBank = true
 		}

+ 3 - 11
go/gopath/src/fohow.com/apps/init.go

@@ -40,7 +40,7 @@ var (
 	BindingWxPhoneError   = []string{"bindingWxPhone", "绑定失败"}
 	XcxAuthorizeError     = []string{"XcxAuthorizeError", "授权失败"}
 	PicVerifyCodeError    = []string{"picVerifyCodeError", "图片验证码错误"}
-	NotOpen               = []string{"notOpen", "暂未开放~带来不便,敬请原谅!"}
+	WxUserInfoError       = []string{"wxUserInfoError", "微信会员信息错误!"}
 	ChannelNotMatch       = []string{"channelNotMatch", "渠道不匹配"}
 	ChanneloExist         = []string{"channelNoExist", "渠道不存在"}
 	UploadFileError       = []string{"uploadFileError", "上传文件失败!"}
@@ -96,6 +96,7 @@ var (
 	UploadUserHeadError = []string{"uploadUserHeadError", "上传头像错误"}
 	AddressNotMatch     = []string{"addressNotMatch", "地址不匹配"}
 	NotUnPay            = []string{"notUnPay", "无法支付,该订单已支付或者已过期"}
+	NotRightPayWay      = []string{"notRightPayWay", "无法支付,该订单只支持微信支付"}
 	HasAlreadyPay       = []string{"hasAlreadyPay", "该订单已支付过"}
 	NotPayInTime        = []string{"notPayInTime", "没在规定时间内完成支付"}
 	PayWayNotAllow      = []string{"payWayNotAllow", "不支持该支付方式"}
@@ -177,19 +178,10 @@ var (
 	//微信公众号登录
 	NetworkBusy = []string{"networkBusy", "对不起,网络繁忙,请稍后再试"}
 
-	//销售专题抽奖
-	OverOpenTime                    = []string{"overOpenTime", "开奖时间已经结束"}
-	ProductIdNotSuit                = []string{"productIdNotSuit", "商品与专题配置的商品不一样"}
-	UserSaleProductNotSupportRefund = []string{"productNotSupportRefund", "代销商品暂不支持退款, 请联系客服"}
-
-	//付费课程
-	CourseCodeNoExist    = []string{"courseCodeNoExist", "优惠码不存在"}
-	CourseCodeHasUsed    = []string{"courseCodeHasUsed", "优惠码已使用"}
-	CourseCodeHasExpired = []string{"courseCodeHasExpired", "优惠码已过期"}
-
 	//秒杀活动
 	SeckillNotStart = []string{"seckillNotStart", "秒杀活动尚未开始"}
 	SeckillIsEnd    = []string{"seckillIsEnd", "秒杀活动已经结束"}
+	SeckillNotAllow = []string{"seckillNotAllow", "秒杀商品不允许加入购物车"}
 
 	OnlyNew = []string{"onlyNew", "仅限新人购买"}
 )

+ 6 - 11
go/gopath/src/fohow.com/apps/models/order_model/order.go

@@ -40,11 +40,8 @@ const (
 	OPERATE_CANCEL  = "cancel"  //取消订单
 
 	//订单类型 0:普通订单, 1:代销订单, 2:自用订单
-	ORDER_TYPE_NORMAL = 0
-	ORDER_TYPE_SALE   = 1
-	ORDER_TYPE_SELF   = 2
-	ORDER_COW_BUY     = 3
-	ORDER_COW_CHANGE  = 4
+	ORDER_TYPE_NORMAL = int64(0)
+	ORDER_TYPE_SEKILL = int64(1)
 
 	FREIGHT_LIMIT   = int64(9900)
 	FREIGHT         = int64(500)
@@ -64,9 +61,7 @@ var STATUS_CN_TEXT = map[string]string{
 
 var ORDER_TYPE_CN_TEXT = map[int64]string{
 	ORDER_TYPE_NORMAL: "普通",
-	ORDER_TYPE_SALE:   "代销",
-	ORDER_COW_BUY:     "牛就对了(购买)",
-	ORDER_COW_CHANGE:  "牛就对了(兑奖)",
+	ORDER_TYPE_SEKILL: "秒杀",
 }
 
 type Order struct {
@@ -133,7 +128,7 @@ func (self *Order) Create(wxUserId, uId, count, totalPrice, buyPrice int64, sour
 }
 
 //新创建订单
-func (self *Order) CreateNew(wxUserId, uId, totalPrice, freight int64, source string) *Order {
+func (self *Order) CreateNew(wxUserId, uId, totalPrice, freight, orderType int64, source string) *Order {
 	var oId string
 	oId = createOrderId(ORDER_ID_PREFIX_EX)
 	order := &Order{
@@ -145,6 +140,7 @@ func (self *Order) CreateNew(wxUserId, uId, totalPrice, freight int64, source st
 		PayWay:     PAY_WAY_BALANCE,
 		Status:     STATUS_UNPAY,
 		Source:     source,
+		OrderType:  orderType,
 	}
 	id, err := orm.NewOrm().Insert(order)
 	if err != nil {
@@ -282,7 +278,7 @@ func GetUserSaleOrders() (orders []*Order) {
 		WHERE
 			order_type = %d And status in ("%s","%s");
 	`
-	sql = fmt.Sprintf(sql, ORDER_TYPE_SALE, STATUS_DISPATCH, STATUS_PROCESSING)
+	sql = fmt.Sprintf(sql, STATUS_DISPATCH, STATUS_PROCESSING)
 
 	if _, err := orm.NewOrm().Raw(sql).QueryRows(&orders); err != nil {
 		return nil
@@ -606,7 +602,6 @@ func GetTypeSaleFinishedOrders() (orders []*Order) {
 	order := new(Order)
 	qs := orm.NewOrm().QueryTable(order)
 	qs = qs.Filter("status__in", STATUS_COMPLETE, STATUS_REFUNDED)
-	qs = qs.Filter("order_type", ORDER_TYPE_SALE)
 
 	if _, err := qs.All(&orders); err != nil {
 		beego.BeeLogger.Debug("GetTypeSaleFinishedOrders err=[%s]", err)

+ 2 - 1
go/gopath/src/fohow.com/routers/routes.go

@@ -59,7 +59,8 @@ func init() {
 	beego.Router("/xcx/login", &permit_controller.PermitController{}, "get:XcxLogin")
 	// 小程序授权
 	beego.Router("/xcx/authorize", &permit_controller.PermitController{}, "post:XcxAuthorize")
-
+	//小程序重新保存用户信息
+	beego.Router("/xcx/save_wx_user/info", &permit_controller.PermitController{}, "post:SaveWxuserInfo")
 	// beego.Router("/login", &permit_controller.PermitController{}, "get:Login")
 	//---------------公众号登录相关--------------------------------
 	beego.Router("/login/mp", &permit_controller.PermitController{}, "get:WxMpLogin")