C# 微信公众号

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;namespace Web
{
    public partial class Test : System.Web.UI.Page
    {
        //用户id
        public string openid = "";

        //公众号信息部分
        public string appid = ConfigurationManager.AppSettings["AppId"];
        public string appsecret = ConfigurationManager.AppSettings["AppSecret"];

        public string redirect_uri = HttpUtility.UrlEncode("需返回的URL");

        #region 显示页面
        public string accesstoken;
        public string nickname;
        public string sex;
        public string headimgurl;
        public string province;
        public string country;
        public string language;
        public string city;

        public string privilege = "";

        public string errorMsg = "";
        public string errorUrl = "";
        #endregion

        protected void Page_Load(object sender, EventArgs e)
        {
            // 微信官方文档
            // https://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html
            // /* *微信认证获取openid部分: *临时认证code */
            string code = Request["code"];
            if (string.IsNullOrEmpty(code))
            {
                //判断session不存在
                if (Session["openid"] == null)
                {
                    //认证第一步:重定向跳转至认证网址
                    // 1.snsapi_base 不弹出授权页面,直接跳转,只能获取用户openid
                    string urlbase = string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_base&state=123#wechat_redirect", appid, redirect_uri);
                    // 2.snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息)
                    string usrinfo = string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect", appid, redirect_uri);

                    Response.Redirect(urlbase);
                }
                //判断session存在
                else
                {
                    //跳转到前端页面.aspx
                    Response.Redirect(Request.Url.ToString());
                }
                return;
            }
            //第三步 获得openid
            string url = string.Format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code", appid, appsecret, code);
            string result = HttpHelper.GetResponse(url);
            Log.Instance.SaveLog(result);
            JObject outputObj = JObject.Parse(result);
            if (outputObj["errmsg"] != null)
            {
                errorMsg = outputObj["errmsg"].ToString();
                errorUrl = url;
                return;
            }
            accesstoken = outputObj["access_token"].ToString();
            openid = outputObj["openid"].ToString();

            GetUserInfo(openid);//通过基础接口获取数据, 不弹出授权页面
            GetUserInfo(accesstoken, openid);//通过授权页面获取信息, 会弹出确认页面,需要第一步传入userinfo
        }

        /// <summary>
        /// 通过基础接口获取用户信息
        /// </summary>
        public void GetUserInfo( string openid )
        {
            //第一步 获取基础支持access_token
            string url = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", appid, appsecret);
            string result = HttpHelper.GetResponse(url);
            Log.Instance.SaveLog(result);
            JObject outputObj = JObject.Parse(result);
            if (outputObj["errmsg"] != null)
            {
                errorMsg = outputObj["errmsg"].ToString();
                errorUrl = url;
                return;
            }
            string token = outputObj["access_token"].ToString();

            //第二步 获取用户基本信息
            url = string.Format("https://api.weixin.qq.com/cgi-bin/user/info?access_token={0}&openid={1}", token, openid);
            result = HttpHelper.GetResponse(url);
            Log.Instance.SaveLog(result);
            outputObj = JObject.Parse(result);
            if (outputObj["errmsg"] != null)
            {
                errorMsg = outputObj["errmsg"].ToString();
                errorUrl = url;
                return;
            }

            //以下是第四步获得的信息:
            nickname = outputObj["nickname"].ToString(); //昵称
            sex = outputObj["sex"].ToString()=="1"?"男":"女"; //性别什么的
            headimgurl = outputObj["headimgurl"].ToString(); //头像url
            province = outputObj["province"].ToString();
            country = outputObj["country"].ToString(); ;
            language = outputObj["language"].ToString(); ;
            city = outputObj["city"].ToString(); ;
            //将获得的用户信息填入到session中
            Session["openid"] = outputObj["openid"];
        }

        /// <summary>
        /// 通过网页授权方式获取用户信息
        /// </summary>
        public void GetUserInfo(string token, string openid)
        {
            //微信认证部分:第四步 获得更多信息
            string url = string.Format("https://api.weixin.qq.com/sns/userinfo?access_token={0}&openid={1}&lang=zh_CN", accesstoken, openid);
            string result = HttpHelper.GetResponse(url);
            Log.Instance.SaveLog(result);
            JObject outputObj = JObject.Parse(result);//将json转为数组

            if (outputObj["errmsg"] != null)
            {
                errorMsg = outputObj["errmsg"].ToString();
                errorUrl = url;
                return;
            }

            //以下是第四步获得的信息:
            nickname = outputObj["nickname"].ToString(); //昵称
            sex = outputObj["sex"].ToString(); //性别什么的
            headimgurl = outputObj["headimgurl"].ToString(); //头像url
            province = outputObj["province"].ToString(); ;
            country = outputObj["country"].ToString(); ;
            language = outputObj["language"].ToString(); ;
            city = outputObj["city"].ToString(); ;
            //将获得的用户信息填入到session中
            Session["openid"] = outputObj["openid"];
            //转向回入口
            //OpenAccess();
        }

    }

}
时间: 2024-10-25 15:33:17

C# 微信公众号的相关文章

微信公众号可通过现金红包接口发放微信支付现金红包(附开发教程)

农历新年将至,支付宝红包打了一仗,微信在朋友圈屏蔽了它的分享,但单防守还不行,进攻才是最好的防守.昨日,微信支付现金红包接口正式开放,只需开通微信支付,即可接入现金红包.微信公众号也可以发放现金红包了! 通过现金红包接口,公众号开发者可以策划相关运营活动,向用户发放微信支付现金红包,更好的达到品牌推广及回馈用户的效果. 1.商户调用接口时,通过指定发送对象以及发送金额的方式发放红包,这样的方式,允许商户灵活的应用于各种各样丰富的活动场景 2.领取到红包后,用户的资金直接进入微信零钱,避免繁复的领

微信公众号中添加外部链接地址的图文教程

2017-9-18,长沙,有点闷,有点热. 本教程教大家如何在微信公众号中,添加外部的链接,网络有很多教程,但由于表述不太清楚,出个教程吧.最终实现在微信后台管理平台"原文链接"处插入外部链接,用户点击发布好的图文文章底部左下角的"阅读原文",就可以跳转到您添加的外部链接页面中去. 第1步. 使用微信公众管理帐号登陆微信管理后台 > 素材管理 > 图文消息 >  新建图文消息或者编辑文章都可以,如下图所示: 第2步. 之后,将页面向下拉,看到底部&

微信公众号相关文章推荐

1. Java 微信开发: http://wiki.jikexueyuan.com/project/java-wechat/ 2. 一小时玩转微信公众号:公司内网 - 学习技能 - 通用技能 - 一小时玩转微信公众号

微信公众号告警

微信公众号告警 首先在配置文件里修改AlertScriptsPath [[email protected] alertscripts]# vim /usr/local/zabbix/etc/zabbix_server.conf AlertScriptsPath=/usr/local/zabbix/alertscripts (1)先注册一个企业号.然后扫码登录: 地址:https://qy.weixin.qq.com/cgi-bin/loginpage (注册过程就不一一展示了非常简单) (2)之

从微信官方获取微信公众号名片:http://open.weixin.qq.com/qr/code/?username=haihongruanjian

从微信官方获取微信公众号名片:http://open.weixin.qq.com/qr/code/?username=haihongruanjian 个人的号,不知道怎么获取.

微信公众号推广

1,利用软文推广宣传微信公众号  大家是做什么行业的,就可以写这方面的一些文章,最好是图文并茂的.大家可以写一些经验,知识,技巧类的文章吸引用户观看.然后就可以在文章中引导用户关注公众号的信息.写好文章后,发布在各大和自己行业相关的网站,论坛都可以,也可以到一些平台去投稿. 优质内容对于运营公众号来说真的有点难度.不过,还是有方法的.如果大家想找优质的内容,就要多关注同行业的公众号,看他们有好的内容如果允许就可以转载过来,最好留下别人的版权信息.大家也可以利用搜狗微信搜索,寻找和自己内容相关的优

好用不需多说的微信公众号实用技巧,一起来叨叨!

至此军训之际,太阳大大当空照,火热的阳光真是好! 小编的心情也是非常的好,想一想那么多嗮黑了,饿瘦了的小学妹们,终于可以显的我好白好白啦(不是白胖白胖)! 白白瘦瘦的我现在比较容易紧张,一紧张我就...喜欢装逼... 装逼我就想到了微信,想到了微信就忍不住和大家叨叨几个超级牛逼的技巧(⊙o⊙) 牛逼的技巧一:图文封面图的获取 不知道大家是否知道如何获取,如果这个图文的封面图比较的符合你的气质,这个时候你就需要下面这样子做了 首先,在电脑上的浏览器打开文章,右键点击查看源代码 然后,点击[Ctrl

《初识Java微信公众号开发》 学习中遇到的困难

前一段时间无聊的时候,在慕课网上自学了一点点微信公众号开发(受学姐威胁). 慕课网教程的地址:http://www.imooc.com/learn/368 毕竟是免费的课程,不可能讲的那么详细.所以我吧我遇到的问题跟大家分享一下. 这是我照着课程敲的代码(IDE是Eclipse): https://github.com/Zuosy/WeiXin 发到github上面了. 为了这个,我还专门到廖大的网站上学了一遍Git. 廖大的Git教程传送们:https://www.liaoxuefeng.co

2017-9月微信公众号支付-Java详解

微信支付源代码 在此之前,先C麻瓜藤N遍,MD官方文档一半正确一半错误.言归正传, 微信支付整体流程:微信授权登录商户的公众号--微信支付的公众号配置--统一下单--微信js调起支付页面--输入密码支付--支付成功,异步回调URL处理商户的相应业务 一.业务场景: 先看一下支付的业务场景:用户使用微信登录商户页面,点击支付按钮,调起微信支付,选择付款卡号,输入密码,完成支付,如图: 场景十分简单,不过步骤比较多,稍不注意就掉坑里了. 二.微信公众号支付的配置准备: 1)调用公众号支付,首先你得有

微微信.NET:开源的ASP.NET微信公众号应用平台

题记: 平时喜欢使用 C# 编程,近半年玩微信公众平台,看到一些微信的应用系统大多是PHP.Python的,于是就有想法做一套开放的 C# ASP.NET的微信应用系统. 微微信.NET  基于ASP.NET的开源微信应用平台  --(面向客户完全开源 永久免费代码更新 游戏和点餐菜单正在完善中 很多功能继续优化) 微微信.NET  系统设计架构         本系统基于文件系统和内存数据库,标准板运行于.NET4,完全版需要单独的服务器或者VPS支持          本系统是一个开源系统,