|
|
@@ -108,3 +108,82 @@ func (self *UserController) BindingWxPhone() {
|
|
|
self.ServeJSON()
|
|
|
|
|
|
}
|
|
|
+
|
|
|
+func (self *UserController) BindingWxPhoneNew() {
|
|
|
+
|
|
|
+ wxUser := self.GetCurrentWxUser(false)
|
|
|
+
|
|
|
+ //如果已经绑定了user,直接返回
|
|
|
+ if wxUser.UserId == 0 {
|
|
|
+ self.ReturnError(403, apps.UserNotExist, "", nil)
|
|
|
+ }
|
|
|
+
|
|
|
+ var tel string
|
|
|
+
|
|
|
+ sessionKey, _ := self.GetSession(apps.XcxSessionKey).(string)
|
|
|
+ if sessionKey == "" {
|
|
|
+ self.ReturnError(403, apps.UserNeedLogin, "", nil)
|
|
|
+ }
|
|
|
+
|
|
|
+ params := self.GetString("userinfo")
|
|
|
+ type Info struct {
|
|
|
+ Iv string `json:"iv"`
|
|
|
+ EncryptedData string `json:"encryptedData"`
|
|
|
+ }
|
|
|
+ info := new(Info)
|
|
|
+ err := json.Unmarshal([]byte(params), &info)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ beego.BeeLogger.Error("BindingWxPhone err: %s, info:%s", err, info)
|
|
|
+ self.ReturnError(403, apps.ParamsError, "", nil)
|
|
|
+ }
|
|
|
+
|
|
|
+ type WatermarkInfo struct {
|
|
|
+ Appid string `json:"appid"`
|
|
|
+ Timestamp string `json:"timestamp"`
|
|
|
+ }
|
|
|
+ type EncryptedData struct {
|
|
|
+ PhoneNumber string `json:"phoneNumber"`
|
|
|
+ PurePhoneNumber string `json:"purePhoneNumber"`
|
|
|
+ CountryCode string `json:"countryCode"`
|
|
|
+ Watermark *WatermarkInfo `json:"watermark"`
|
|
|
+ }
|
|
|
+ //phoneNumber String 用户绑定的手机号(国外手机号会有区号)
|
|
|
+ //purePhoneNumber String 没有区号的手机号
|
|
|
+ //countryCode String 区
|
|
|
+
|
|
|
+ pc := helpers.WxBizDataCrypt{AppID: beego.AppConfig.String("WxFohowXcxAppId"), SessionKey: sessionKey}
|
|
|
+ result, err := pc.Decrypt(info.EncryptedData, info.Iv, true) //第三个参数解释: 需要返回 JSON 数据类型时 使用 true, 需要返回 map 数据类型时 使用 false
|
|
|
+ if err != nil {
|
|
|
+ beego.BeeLogger.Error("xcx BindingWxPhone descrypt failed, err:%s", err)
|
|
|
+ self.ReturnError(403, apps.BindingWxPhoneError, "", nil)
|
|
|
+ }
|
|
|
+ encryptedData := &EncryptedData{}
|
|
|
+ json.Unmarshal([]byte(result.(string)), encryptedData)
|
|
|
+
|
|
|
+ if encryptedData.PurePhoneNumber == "" {
|
|
|
+ self.ReturnError(403, apps.BindingWxPhoneError, "", nil)
|
|
|
+ }
|
|
|
+
|
|
|
+ tel = encryptedData.PurePhoneNumber
|
|
|
+
|
|
|
+ user := user_model.GetByTel(tel, false)
|
|
|
+ if user != nil {
|
|
|
+ self.ReturnError(403, apps.BindingTelExisted, "", nil)
|
|
|
+ } else { //手机号未被注册
|
|
|
+ user = user_model.GetUserById(wxUser.UserId, false)
|
|
|
+ if user == nil {
|
|
|
+ self.ReturnError(403, apps.BindingUserTelError, "", nil)
|
|
|
+ }
|
|
|
+ user.Tel = tel
|
|
|
+ user.Save()
|
|
|
+ // 如果微信用户已绑定手机,则找出userId,并且赋值给session[userId]
|
|
|
+ if wxUser != nil && wxUser.UserId > 0 {
|
|
|
+ self.SetSession(apps.SessionWxUserKey, wxUser.Id)
|
|
|
+ self.SetSession(apps.SessionUserKey, wxUser.UserId)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ self.Data["json"] = user
|
|
|
+ self.ServeJSON()
|
|
|
+
|
|
|
+}
|