C#微信公眾號接口開發實例-高級接口-申請帶參數的二維碼


  最近公司涉及到微信綁定用戶,做了高級接口-申請帶參數的二維碼,總結了下微信開發接口。微信接口開發都是除了消息用的xml 回復基本上都是用json的形式傳遞信息(post/get),開發的方法基本都是一樣的,以下以高級接口獲取帶參數的二維碼為例,怎么做微信接口開發。

第一步:獲取access_token,access_token是獲取其他接口信息的鑰匙,所有接口都需要調用access_token

     /// <summary>
        /// 拉取AccessToken,微信每天公共2000次AccessToken的獲取,所以需要緩存AccessToken
        /// </summary>
        /// <returns>用戶憑證:AccessToken</returns>
        public string getTokenSession(string appid,string appsecret)
        {
            string TokenSession;
            if (Session[AccessToken] != null)
            {
                TokenSession = Session[AccessToken].ToString();
            }
            else
            {
                TokenSession = addTokenSession(appid, appsecret);
            }
            return TokenSession;
        }

        /// <summary>
        /// 將AccessToken添加到緩存
        /// </summary>
        /// <returns>AccessToken</returns>
        public string addTokenSession(string appid, string appsecret)
        {
            //獲取AccessToken
            string AccessToken = GetAccessToken(appid,appsecret);
            HttpContext.Current.Session[AccessToken] = AccessToken;
            HttpContext.Current.Session.Timeout = 7200;
            return AccessToken;
        }

        /// <summary>
        /// 獲取AccessToken
        /// </summary>
        /// <returns>AccessToken</returns>
        public string GetAccessToken(string appid, string appsecret)
        {
            string accessToken = "";
            string respText = "";
            string url = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", appid, appsecret);

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();

            using (Stream resStream = response.GetResponseStream())
            {
                StreamReader reader = new StreamReader(resStream, Encoding.Default);
                respText = reader.ReadToEnd();
                resStream.Close();
            }
            Dictionary<string, object> respDic = (Dictionary<string, object>)Jss.DeserializeObject(respText);
            accessToken = respDic["access_token"].ToString();
            return accessToken;
        }

第二步:利用access_token來獲取帶參數的二維碼

     /// <summary>
        /// 調用微信接口獲取帶參數臨時二維碼的ticket
        /// 使用方法:https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET
        /// </summary>
        /// <param name="scene_id">二維碼帶的參數</param>
        /// <returns>json:ticket:換取二維碼的憑證,expire_seconds:憑證有效時間,url:二維碼解析后的地址。此處返回ticket 否則返回錯誤碼</returns>
        public string GetQrcode(string appid, string appsecret, Int32 scene_id)
        {
            string QrcodeUrl = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token={0}";//WxQrcodeAPI接口
            string AccessToken = getTokenSession(appid, appsecret);//拉取AccessToken
            QrcodeUrl = string.Format(QrcodeUrl, AccessToken);
            string PostJson = "{\"expire_seconds\": 1800, \"action_name\": \"QR_SCENE\", \"action_info\": {\"scene\": {\"scene_id\": " + scene_id + "}}}";
            string ReText = WebRequestPostOrGet(QrcodeUrl, PostJson);//post提交
            Dictionary<string, object> reDic = (Dictionary<string, object>)Jss.DeserializeObject(ReText);
            if (reDic.ContainsKey("ticket"))
            {
                return reDic["ticket"].ToString();//成功
            }
            else
            {
                return reDic["errcode"].ToString();//返回錯誤碼
            }
        }

        /// <summary>
        /// 調用微信接口獲取帶參數永久二維碼的ticket
        /// 使用方法:https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET
        /// </summary>
        /// <param name="scene_id">二維碼帶的參數</param>
        /// <returns>json:ticket:換取二維碼的憑證,expire_seconds:憑證有效時間,url:二維碼解析后的地址。此處返回ticket 否則返回錯誤碼</returns>
        public string GetQrcode(string appid, string appsecret, string scene_str)
        {
            string QrcodeUrl = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token={0}";//WxQrcodeAPI接口
            string AccessToken = getTokenSession(appid, appsecret);//拉取AccessToken
            QrcodeUrl = string.Format(QrcodeUrl, AccessToken);
            string PostJson = "{\"expire_seconds\": 1800, \"action_name\": \"QR_LIMIT_STR_SCENE\", \"action_info\": {\"scene\": {\"scene_str\": " + scene_str + "}}}";
            string ReText = WebRequestPostOrGet(QrcodeUrl, PostJson);//此處省略了 WebRequestPostOrGet即為WebHttpRequest發送Post請求
            Dictionary<string, object> reDic = (Dictionary<string, object>)Jss.DeserializeObject(ReText);
            if (reDic.ContainsKey("ticket"))
            {
                return reDic["ticket"].ToString();//成功
            }
            else
            {
                return reDic["errcode"].ToString();//返回錯誤碼
            }
        }

第三步:將獲取的ticket用https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET使用就完成了。

微信開發者文檔:http://mp.weixin.qq.com/wiki/18/28fc21e7ed87bec960651f0ce873ef8a.html

本文版權歸作者(謝俊)和博客園所有,歡迎轉載,轉載請標明出處。

原文地址:http://www.cnblogs.com/net-xiejun/

微信開發群C#.NETWEB程序開發交流

完整源碼下載:https://github.com/xiejun-net/weixin

個人公眾賬號:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM