1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- /**
- * Copyright (c) 2022 Yansen Zhang
- * wxcomponent is licensed under Mulan PSL v2.
- * You can use this software according to the terms and conditions of the Mulan PSL v2.
- * You may obtain a copy of Mulan PSL v2 at:
- * http://license.coscl.org.cn/MulanPSL2
- * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
- * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
- * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
- * See the Mulan PSL v2 for more details.
- **/
-
- package authorization
-
- import (
- "errors"
- "net/url"
- "strconv"
-
- "gitee.com/yansen_zh/wxcomponent/utils/request"
- )
-
- // BindComponentParam 构建授权链接入参
- type BindComponentParam struct {
- ComponentAppId string
- PreAuthCode string
-
- // RedirectUri 不需要转码
- RedirectUri string
- AuthType int
- BizAppId string
- }
-
- const (
- componentloginpage = "https://mp.weixin.qq.com/cgi-bin/componentloginpage"
- bindcomponent = "https://mp.weixin.qq.com/safe/bindcomponent"
- )
-
- // BindComponentByPC 构建PC端授权链接
- func BindComponentByPC(param BindComponentParam) (*url.URL, error) {
- return BindComponent("PC", param)
- }
-
- // BindComponentByH5 构建H5端授权链接
- func BindComponentByH5(param BindComponentParam) (*url.URL, error) {
- return BindComponent("H5", param)
- }
-
- // BindComponent 构建授权链接
- func BindComponent(client string, param BindComponentParam) (*url.URL, error) {
- isH5 := client == "H5"
-
- if param.ComponentAppId == "" {
- return nil, errors.New("构建授权链接 第三方平台的 appid 不能为空")
- }
-
- if param.PreAuthCode == "" {
- return nil, errors.New("构建授权链接 预授权码 不能为空")
- }
-
- if param.RedirectUri == "" {
- return nil, errors.New("构建授权链接 回调 URI 不能为空")
- }
-
- if param.AuthType < 1 || param.AuthType > 3 {
- param.AuthType = 3
- }
-
- queryParams := url.Values{}
- if isH5 {
- queryParams.Set("action", "bindcomponent")
- queryParams.Set("no_scan", "1")
- }
- queryParams.Set("component_appid", param.ComponentAppId)
- queryParams.Set("pre_auth_code", param.PreAuthCode)
- queryParams.Set("redirect_uri", param.RedirectUri)
- // auth_type、biz_appid 两个字段互斥
- if param.BizAppId != "" {
- queryParams.Set("biz_appid", param.BizAppId)
- } else {
- queryParams.Set("auth_type", strconv.Itoa(param.AuthType))
- }
-
- apiUrl := componentloginpage
- if isH5 {
- apiUrl = bindcomponent
- }
- u, err := request.ParseURL(apiUrl, &queryParams)
- if err != nil {
- return nil, err
- }
-
- if isH5 {
- u.Fragment = "wechat_redirect"
- }
-
- return u, nil
- }
|