Forráskód Böngészése

添加微信登录统一入口

huangrf 5 éve
szülő
commit
2facb59dbe
3 módosított fájl, 79 hozzáadás és 4 törlés
  1. 54 0
      controllers/partial/SysPublicController.go
  2. 3 0
      light-apiengine.xml
  3. 22 4
      third/wx/wx.go

+ 54 - 0
controllers/partial/SysPublicController.go

@@ -67,6 +67,60 @@ func SysPublic_WxoauthParams(c *entitys.CtrlContext) {
 	}
 }
 
+
+
+// _WxLogin
+// @Title _WxLogin
+// @Description 获取微信oauth配置
+// @Param	body      false  "微信登录参数,必须包含code字段(微信临时令牌)"
+// @Success 200 {object} Account
+// @Failure 403 :id is empty
+func SysPublic_WxLogin(c *entitys.CtrlContext) {
+	body, err := ioutil.ReadAll(c.Ctx.Request.Body)
+	if err != nil{
+		fmt.Println("SysPublic_WxLogin 读取请求数据错误", err.Error())
+		c.Ctx.JSON(200, models.SysReturn{500, err.Error(), ""})
+		return
+	}
+	params := make(map[string]interface{})
+	err = json.Unmarshal(body, &params)
+	if err != nil{
+		fmt.Println("SysPublic_WxLogin unmarshal err", err.Error())
+		c.Ctx.JSON(200, models.SysReturn{500, err.Error(), ""})
+		return
+	}
+	code := ""
+	var v interface{} = nil
+	ok := false
+	if v, ok = params["code"]; !ok{
+		fmt.Println("SysPublic_WxLogin 不存在临时令牌code字段")
+		c.Ctx.JSON(200, models.SysReturn{500, "不存在临时令牌code字段", ""})
+		return
+	}
+	if code, ok = v.(string); !ok{
+		fmt.Println("临时令牌code字段不能转换为string")
+		c.Ctx.JSON(200, models.SysReturn{500, "临时令牌code字段不能转换为string", ""})
+		return
+	}
+	if code == ""{
+		fmt.Println("临时令牌code为空")
+		c.Ctx.JSON(200, models.SysReturn{500, "临时令牌code为空", ""})
+		return
+	}
+
+	// 获取微信信息
+	userInfo, err := wx.GetUserInfoByCode(code)
+	if err != nil {
+		fmt.Println("wx.GetUserInfoByCode 错误", err.Error())
+		c.Ctx.JSON(200, models.SysReturn{500, err.Error(), nil})
+		return
+	}
+
+	ret := wx.CallWxLoginCallbackHandler(c, body, userInfo)
+
+	c.Ctx.JSON(200, ret)
+}
+
 // _WxjssdkParams
 // @Title _WxjssdkParams
 // @Description 获取微信jssdk配置

+ 3 - 0
light-apiengine.xml

@@ -889,6 +889,9 @@
             <api name="wxoauth_params" desc="获取微信oauth配置" method="post">
                 <param name="body" desc="微信回调回传的参数"></param>
             </api>
+            <api name="wx_login" desc="获取微信oauth配置" method="post">
+                <param name="body" desc="微信登录参数,必须包含code字段(微信临时令牌)"></param>
+            </api>
             <api name="wxjssdk_params" desc="获取微信jssdk配置" method="get">
                 <param name="url" desc="当前页面url"></param>
             </api>

+ 22 - 4
third/wx/wx.go

@@ -17,15 +17,19 @@ import (
 	"strings"
 )
 
-var wxPayCallbackHandler func(result *pay.NotifyResult)models.SysReturn = nil
+// 微信回调处理器
+var _wxPayCallbackHandler func(result *pay.NotifyResult)models.SysReturn = nil
+// 微信通用登录回调处理器
+var _wxLoginCallbackHandler func(ctx *entitys.CtrlContext, body []byte, info *oauth.UserInfo)models.SysReturn = nil
 
 // 注册微信支付回调处理函数
 func RegisterWxPayCallbackHandler(handler func(result *pay.NotifyResult)models.SysReturn){
-	wxPayCallbackHandler = handler
+	_wxPayCallbackHandler = handler
 }
 
+// 调用微信支付回调处理函数
 func CallWxPayCallbackHandler(c *entitys.CtrlContext)models.SysReturn{
-	if wxPayCallbackHandler == nil{
+	if _wxPayCallbackHandler == nil{
 		return models.SysReturn{500, "微信支付回调处理函数为空", nil}
 	}
 	data, err := ioutil.ReadAll(c.Ctx.Request.Body)
@@ -50,7 +54,7 @@ func CallWxPayCallbackHandler(c *entitys.CtrlContext)models.SysReturn{
 			fmt.Println("*****************---->微信支付回调验证错误, ok is false")
 			return models.SysReturn{500, "", nil}
 		}
-		return wxPayCallbackHandler(&notifyRet)
+		return _wxPayCallbackHandler(&notifyRet)
 	}else{
 		fmt.Println("------------------>微信支付失败", notifyRet)
 		return models.SysReturn{500, "", ""}
@@ -58,6 +62,20 @@ func CallWxPayCallbackHandler(c *entitys.CtrlContext)models.SysReturn{
 
 }
 
+// 注册微信登录回调处理函数
+func RegisterWxLoginCallbackHandler(handler func(ctx *entitys.CtrlContext, body []byte, info *oauth.UserInfo)models.SysReturn){
+	_wxLoginCallbackHandler = handler
+}
+
+// 调用微信登录处理函数
+func CallWxLoginCallbackHandler(ctx *entitys.CtrlContext, body []byte, info *oauth.UserInfo)models.SysReturn{
+	if _wxLoginCallbackHandler == nil{
+		return models.SysReturn{500, "微信登录回调处理函数为空", nil}
+	}else{
+		return _wxLoginCallbackHandler(ctx, body, info)
+	}
+}
+
 // 扫码支付
 func PayNative(params *PayParams)(*pay.PayResult, error){
 	ip := utils.GetIP(params.Ctx)