微信公众平台,网页授权及 40029 问题解决

1、跳转授权链接

https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxx&redirect_uri=xxx&response_type=code&scope=snsapi_userinfo&state=STATE&connect_redirect=1#wechat_redirect

&connect_redirect=1 这个参数,刚开始没有加,总是报 {‘errcode‘:40029,‘errmsg‘:‘invalid code, hints: [ req_id: 0407ns44 ]‘} 这个错误 ,调试时发现会访问两次,一次是301,页面重定向了,第二次跟第一次就差这个参数。加上后,不再报错。code 可以了。

二需要注意的是 redirect_uri = xxx 需要自己URL转码

2、获取用户信息,直接上代码。

<%@ WebHandler Language="C#" Class="getinfos" %>

using System;
using System.Web;
using Newtonsoft.Json.Linq;
using System.Net;
using System.IO;
using System.Text;

public class getinfos : IHttpHandler {

    public void ProcessRequest (HttpContext context) {
        //一切都从这里开始
        string code = context.Request["code"].ToString();

        context.Response.ContentType = "text/plain";
        context.Response.Write(GetInfos(code));
    }

    public bool IsReusable {
        get {
            return false;
        }
    }

    public string GetInfos(string _code)
    {
        //
        string _access_tokens = GetToken(_code);
        JObject json = JObject.Parse(_access_tokens);
        string access_token = json["access_token"].ToString();
        string refresh_token = json["refresh_token"].ToString();
        string openid = json["openid"].ToString();

        //
        string _infos = GetUserInfo(access_token, openid);
        JObject info = JObject.Parse(_infos);

        if (info["errcode"] != null)
        {
            _access_tokens = RefreshToken(refresh_token);
            json = JObject.Parse(_access_tokens);

            access_token = json["access_token"].ToString();
            openid = json["openid"].ToString();

            _infos = GetUserInfo(access_token, openid);
        }

        return _infos;
    }

    /// <summary>
    /// 用code 获取 Token
    /// </summary>
    private string GetToken(string _code)
    {
        if (_code.IndexOf("\"") > -1)
            _code = _code.Replace("\"", "");

        string URL = "https://api.weixin.qq.com/sns/oauth2/access_token";
        string RequestPara = "?appid=xxx";
        RequestPara += "&secret=xxx";
        RequestPara += "&code=" + _code;
        RequestPara += "&grant_type=authorization_code";

        string _access_tokens = GetData(URL, RequestPara);
        _access_tokens = _access_tokens.Replace("\"", "‘");

        return _access_tokens;
    }

    /// <summary>
    /// 获取用户信息
    /// </summary>
    private string GetUserInfo(string access_token, string openid)
    {
        if (access_token.IndexOf("\"") > -1)
            access_token = access_token.Replace("\"", "");

        if (openid.IndexOf("\"") > -1)
            openid = openid.Replace("\"", "");

        string I_URL = "https://api.weixin.qq.com/sns/userinfo";
        string I_RequestPara = "?access_token=" + access_token;
        I_RequestPara += "&openid=" + openid;
        I_RequestPara += "&lang=zh_CN";

        string _infos = GetData(I_URL, I_RequestPara);
        _infos = _infos.Replace("\"", "‘");

        return _infos;
    }

    /// <summary>
    /// 刷新 Token
    /// </summary>
    private string RefreshToken(string refresh_token)
    {
        if (refresh_token.IndexOf("\"") > -1)
            refresh_token = refresh_token.Replace("\"", "");

        string R_URL = "https://api.weixin.qq.com/sns/oauth2/refresh_token";
        string R_RequestPara = "?appid=xxx";
        R_RequestPara += "&grant_type=refresh_token";
        R_RequestPara += "&refresh_token=" + refresh_token;

        string _infos = GetData(R_URL, R_RequestPara);
        _infos = _infos.Replace("\"", "‘");

        return _infos;
    }

    /// <summary>
    /// 访问地址,并获取数据
    /// </summary>
    private string GetData(string URL, string RequestPara)
    {
        RequestPara = RequestPara.IndexOf(‘?‘) > -1 ? (RequestPara) : ("?" + RequestPara);

        WebRequest hr = HttpWebRequest.Create(URL + RequestPara);
        byte[] buf = System.Text.Encoding.GetEncoding("utf-8").GetBytes(RequestPara);
        hr.Method = "GET";

        System.Net.WebResponse response = hr.GetResponse();
        StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8"));
        string ReturnVal = reader.ReadToEnd();
        reader.Close();
        response.Close();

        return ReturnVal;
    }
}
时间: 2024-08-26 07:19:51

微信公众平台,网页授权及 40029 问题解决的相关文章

微信公众平台网页授权获取用户基本信息(VS.NET版)

一.前期准备工作 1.接口权限表点击修改[OAuth2.0网页授权].(读者可网上搜索什么是OAuth2.0) 注意:此处应填写与回调页面相同的域名. 2.编写正确的URL https://open.weixin.qq.com/connect/oauth2/authorize?appid=公众号APPID &redirect_uri= RedirectUri&response_type=code&scope=snsapi_userinfo&state=STATE#wecha

微信公众平台网页授权两次重定向跳转问题

在做微信公众平台网页授权时,发现每次请求授权链接 https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxx&redirect_uri=xxx&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect 时都会重定向链接redirect_uri都会自动请求两次,由于并发导致了一些问题, {"errcode":400

微信公众平台网页授权获取用户基本信息中授权回调域名设置的变动

在腾讯的微信公众平台开发者文档,网页授权获取用户基本信息这一节中写道”在微信公众号请求用户网页授权之前,开发者需要先到公众平台网站的我的服务页中配置授权回调域名.请注意,这里填写的域名不要加http://“,链接: http://mp.weixin.qq.com/wiki/index.php?title=%e7%bd%91%e9%a1%b5%e6%8e%88%e6%9d%83%e8%8e%b7%e5%8f%96%e7%94%a8%e6%88%b7%e5%9f%ba%e6%9c%ac%e4%bf%

微信公众平台网页获取用户OpenID方法

下面我们一起来看看关于微信公众平台网页获取用户OpenID方法,有需要了解的朋友可以一起来看看吧.用户点击微信自定义菜单view类型按钮后,微信客户端将会打开开发者在按钮中填写的url值 (即网页链接),达到打开网页的目的,但是view不能获取用户的openid,需要使用微信“网页授权获取用户基本信息”高级接口结合使用,获得用户的登入个人信息.具体方法1.配置网页授权回调域名,如 www.111cn.net2.模拟公众号的第三方网页,http://www.111cn.net/getcodeurl

微信公众平台网页开发实战--1.微信分享一个网页到朋友圈

对微信的JSSDK进行封装一下,创建一份类似的文件结构,增加index.html与shareApi.js文件,结构如图3.3所示. 图3.3  3.2节文件结构 另外,提醒读者一下,wxJSSDK.js文件的JSSDK环境配置中,需要更改一下配置参数,代码如下: 01 jsApiList: [ // 其他代码略 02 "onMenuShareTimeline", 03 "onMenuShareAppMessage", 04 "onMenuShareQQ&q

微信公众平台网页开发实战--2.从手机相册中选照片然后分享

通过对需求的了解,可以将其分解为: (1)微信端手机用户,可以使用微信的JSSDK. (2)选取图片,使用JSSDK的“chooseImage”,由于分享图片时本地地址无法分享,因此还需要JSSDK的“uploadImage”. (3)分享到朋友圈,需要JSSDK的“onMenuShareTimeline”. 综合起来,业务逻辑如图4.5所示. 图4.5  业务逻辑结构图 首先将JSSDK的环境复制一份到本节目录下,创建index.html文件.imageSharing.js文件,目录结构如图4

微信公众平台网页开发实战--3.利用JSSDK在网页中获取地理位置(HTML5+jQuery)

复制一份JSSDK环境,创建一份index.html文件,结构如图7.1所示. 图7.1  7.1节文件结构 在location.js中,封装“getLocation”接口,如下: 01 wxJSSDK.location = function(locationApi){ 02 if(wxJSSDK.isReady){ //wxJSSDK.isReady 查看微信JSSDK是否初始化完毕 03 if(locationApi){ 04 locationApi.getLocation && wx

微信公众号网页授权登录获取用户基本信息

发布时间:2018-10-24 技术:spring springboot,微信公众号 概述 微信公众号网页授权登录后微信获取用户基本信息,部署即可运行完整demo 详细 代码下载:http://www.demodashi.com/demo/14290.html 一.前言 (1)适合人群 1,JAVA服务端开发人员 2,初级人员开发人员 3,了解spring springboot + maven 3,了解公众号开发 (2)你需要准备什么? 1,积极主动学习 2,微信公众号开发基本流程 3,java

微信公众号网页授权获取用户基本信息

话不多说,根据官方文档需求说明,首先接口权限设置修改 先根据你的URL配置一下授权回调页域名 微信公众平台OAuth2.0授权的详细步骤如下 1)用户关注微信公众号. 2)微信公众号提供用户请求授权页面URL. 3)用户点击授权页面URL,将向服务器发送请求. 4)服务器询问用户是否同意授权给微信公众号(scope为snsapi_base时无此步骤). 5)用户同意(scope为snsapi_base时无此步骤). 6)服务器将code通过回调传给微信公众号. 7)微信公众号获得code. 8)

Django+wechatpy接入微信公众平台以及授权登录

确定Django环境可以正常运行,环境搭建见:Linux 搭建Nginx+uwsgi+Django环境 安装 wechatpy[cryptography] sudo pip3 install wechatpy[cryptography] 修改settings.py 接入微信公众号的连接去掉csrf验证,详情参考:解决Django+Vue前后端分离的跨域问题及关闭csrf验证的后半部分 在settings.py 加入微信公众号配置 AppID = '' AppSecret = '' Token =