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(string appid, string 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

时间: 2025-01-02 14:17:26

C#微信公众号接口开发实例-高级接口-申请带参数的二维码的相关文章

微信公众号开发(三)生成带参数的二维码

微信公众号开发之生成带参数的二维码 做微信公众号开发的人员都知道用户海报作为公众号吸引用户是常见的渠道,那么我就说说这个海报的生成. 看了好多公众号发现他们的海报都是大同小异,一个漂亮的背景+自己的头像+专属二维码. 背景就不阐述了,用户的头像可以由公众号开发文档提供的方式获取(根据用户的openId),今天主要讲用户的专属二维码 所谓专属即便是一对一的. 二维码分为两种,临时二维码和永久二维码 /*生成永久二维码*/ public static String getPerpetualQR(St

微信开发之——Php批量生成带参数的二维码

带参数的二维码对于渠道营销推广来说是很有用的,可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送,可喜的是微信开通了这个接口,那下面就来研究一下吧. 具体接口说明请参见,微信公众平台开发者文档(http://mp.weixin.qq.com/wiki/18/28fc21e7ed87bec960651f0ce873ef8a.html),我这里就直接上代码. 演示图: 由于带参数二维码生成是有限的,所有我是按编号生成的,下次生成的时候直接累加. 另外带设置有备注,方便以后统计.

微信公众平台功能开发(生成带参数的二维码)

为了满足用户渠道推广分析的需要,公众平台提供了生成带参数二维码的接口.使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送. 目前有2种类型的二维码,分别是临时二维码和永久二维码,前者有过期时间,最大为1800秒,但能够生成较多数量,后者无过期时间,数量较少(目前参数只支持1--100000).两种二维码分别适用于帐号绑定.用户来源统计等场景. 用户扫描带场景值二维码时,可能推送以下两种事件: 如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事

C#微信开发之旅(六):生成带参数的二维码

主要用来推广并统计数据,当用户扫描带参数二维码时,微信会推送消息到我们的服务器,此时可以根据参数了解到用户是从哪个渠道关注的.话不多少,先来代码: 1 #region 生成二维码 2 3 /// <summary> 4 /// 获取Ticket 5 /// </summary> 6 /// <returns></returns> 7 private static string CreateTicket(string scene_id) 8 { 9 var t

微信二维码带参数的二维码(转)

官方文档地址:https://mp.weixin.qq.com/wiki/18/28fc21e7ed87bec960651f0ce873ef8a.html 原文地址:http://jingyan.baidu.com/article/fdbd4277cfd0c6b89f3f485f.html 注意事项 我知道你们是没有心情看注意事项的,但是很重要,所以我先摆上来. 用户扫描带参数的二维码,可能推送以下两种事件: 1.如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给

微信公共服务平台开发(.Net 的实现)9-------处理二维码

今天我们来共同学习一下微信公共服务平台中一个重要内容---二维码扫描.众所周知二维码目前应用范围很广,在这里不再叙述背景了,但是值得一提的是目前大家手机上面应用的二维码扫描工具是支持的都是QR码和PDF417码标准,这就是为什么你用各种扫码工具扫出来的都一样的原因,因为大家都使用了同样的标准. 在微信中的“扫一扫”功能也支持了这种标准,但是我们如果在微信公共服务平台中开发,使用的就不是这种标准了,而是微信自己的标准.也就是说如果你用通用软件生成的二维码“微信”,“我查查”等都可以扫描出来,但是你

微信公众平台 怎样生成带参数的二维码

添加带参数二维码 1.选择要添加带参数二维码的认证服务号--功能管理--高级功能--渠道二维码生成--+创建渠道二维码 1.1.渠道名称:可以理解为一个推广员(门店)一个渠道的名称: 1.2.触发关键词:即粉丝扫描这个二维码后直接弹出的回复内容,可以多个渠道共用一个关键词,也可以每个渠道用一个关键词: 1.3.扫码统计对象:可以统计新.老粉丝的关注取消数据: 1.4.粉丝识别标识:打标签及分组: 1.5.保存:添加好渠道名称和触发关键词就会直接生成这个渠道的二维码,直接点击[获取二维码]即可得到

微信接口开发之高级篇系列【用户分组接口和生成带参数的二维码】

<?php /** * Created by PhpStorm. * User: Tinywan * Date: 2016/9/11 * Time: 10:00 */ namespace Home\Controller; use Org\Util\WechatAuth; use Think\Controller; class UserController extends Controller { private $appid; private $appSecret; private $Wecha

asp源码微信公众号生成带参数的二维码

Public Function Get_Openid() If Session("openid")="" Then s_SCOPE ="snsapi_base" Call Get_Access_Token() End If Get_Openid = Session("openid") End Function Public Function C_A(v) '<------Check_Application Funstr