uni app开发微信公众号网页取用户信息

发布时间 2023-09-06 22:41:30作者: 牛腩
uni app开发微信公众号网页取用户信息
自己测试发现哪怕是用snsapi_base取得的code再取access_token,再用这个access_token去取用户信息也是可以取得的
<template>
    <view class="content">
        <image class="logo" src="/static/logo.png"></image>
        <view class="text-area">
            <text class="title">{{title}}</text>

        </view>

        <view>
         
            <!-- #ifdef WEB -->
            <button @click="weblogin">1.微信公众号网页登录取openid-snsapi_base</button>
            <button @click="weblogin_userinfo">1.1.微信公众号网页登录取openid-snsapi_userinfo</button>
            <button @click="weblogin2">2.通过code换取网页授权access_token</button>
            <button @click="weblogin3">3.拉取用户信息(需要上一步的Access_token和openid)</button>
            <!-- #endif -->
        </view>
        <view style="word-break: break-all;">{{res}}</view>
        <view>
            {{openid}}

        </view>
        <view>
            {{unionid}}
        </view>
    </view>
</template>

<script>
    export default {
        data() {
            return {
                appid: 'wx3306e665383896f2', //公众平台测试号
                appsecret: '8dafe865cf3751c779f45a5f0b91547b',
                title: '',
                openid: '',
                unionid: '',
                code: '',
                res: '',
                access_token: '',
            }
        },
        onLoad() {
            const code = this.getUrlCode('code');
            console.log("code:", code);
            if (code) {
                this.code = code;
                this.res = "取到的CODE:" + code;
            }
        },
        methods: {
            //网页的取openid
            weblogin: function() {
                // #ifdef H5

                var url = encodeURIComponent("http://wxweb.niunan.net/index.html");

                // 获取code 
                window.location.href =
                    `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${this.appid}&redirect_uri=${url}&response_type=code&scope=snsapi_base#wechat_redirect`

                // #endif
            },
            weblogin_userinfo: function() {
                // #ifdef H5

                var url = encodeURIComponent("http://wxweb.niunan.net/index.html");

                // 获取code 
                window.location.href =
                    `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${this.appid}&redirect_uri=${url}&response_type=code&scope=snsapi_userinfo#wechat_redirect`

                // #endif
            },
            weblogin2: function() {
                var that = this;
                if (this.code == '') {
                    this.res = "请先通过第一步取得code";
                } else {
                    //    var url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='+this.appid+'&secret='+this.appsecret+'&code='+this.code+'&grant_type=authorization_code';
                    //这里应该是到后端来获取上面那个url的内容再返回的,里面就有openid了
                    //    location.href = url;
                    var url = "http://wxweb.niunan.net/api/wx/getopenid?code=" + this.code;
                    uni.request({
                        url: url,
                        method: 'GET',
                        success: (res) => {
                            if (res.statusCode == 200) {
                                that.res = JSON.stringify(res.data);
                                that.openid = res.data.data.openid;
                                that.access_token = res.data.data.access_token;
                            }
                        }
                    })
                }
            },
            weblogin3: function() {
                var that = this;
                if (that.openid == '' && that.access_token == '') {
                    that.res = "openid或者access_token为空";
                } else {
                    var url = "http://wxweb.niunan.net/api/wx/getuserinfo?openid=" + that.openid + "&access_token=" + that
                        .access_token;
                        uni.request({
                            url: url,
                            method: 'GET',
                            success: (res) => {
                                if (res.statusCode == 200) {
                                    that.res = JSON.stringify(res.data); 
                                }
                            }
                        })
                }
            },
            // 截取code
            getUrlCode(name) {
                return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.href) ||
                [,
                    ''
                ])[1].replace(/\+/g, '%20')) || null
            },
             
        }
    }
</script>

<style>
    .content {
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
    }

    .logo {
        height: 200rpx;
        width: 200rpx;
        margin-top: 200rpx;
        margin-left: auto;
        margin-right: auto;
        margin-bottom: 50rpx;
    }

    .text-area {
        display: flex;
        justify-content: center;
    }

    .title {
        font-size: 36rpx;
        color: #8f8f94;
    }
</style>

 

.net7 后端
using AgileHttp;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

namespace wxweb.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class WXController : ControllerBase
    {
        [HttpGet("GetOpenId")]
        public ApiResult GetOpenId(string code) {
            try
            {
                string appid = "wx3306e665383896f2";
                string appsecret = "8dafe865cf3751c779f45a5f0b91547b";
                var url = $"https://api.weixin.qq.com/sns/oauth2/access_token?appid={appid}&secret={appsecret}&code={code}&grant_type=authorization_code";
                ResponseInfo response = HTTP.Send(url);
              string data  =  response.GetResponseContent();
                var m = Newtonsoft.Json.JsonConvert.DeserializeObject<RemoteClass>(data);
                return new ApiResult() { code=0,msg=data,data= m };
            }
            catch (Exception ex)
            {
                return new ApiResult() { code = 1, msg = ex.Message } ;
            }
        }
        [HttpGet("GetUserInfo")]
        public ApiResult GetUserInfo(string openid, string access_token) {
            try
            {
                string url = $"https://api.weixin.qq.com/sns/userinfo?access_token={access_token}&openid={openid}&lang=zh_CN";
                ResponseInfo response = HTTP.Send(url);
                string data = response.GetResponseContent();
             
                return new ApiResult() { code = 0, msg = "取到了用户信息", data = data };
            }
            catch (Exception ex)
            {
                return new ApiResult() { code = 1, msg = ex.Message };
            
            }
        }
    }

    public class ApiResult
    {
        public int code { set; get; }
        public string msg { set; get; }
        public object data { set; get; }
    }

    public class RemoteClass { 
        public string access_token { set; get; }
        public string openid { set; get; }
    }
}