C# 实现微信公众号生成场景二维码

2024-06-08 1319阅读

目录

C# 实现微信公众号生成场景二维码
(图片来源网络,侵删)

关于场景二维码

开发前准备

范例运行环境

设计与实现

临时二维码

永久二维码

小结


关于场景二维码

公众平台生成场景二维码,是为了满足用户渠道推广分析、用户账号绑定等场景的需要,使用生成接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送。

场景二维码目前有两种类型:

1、临时二维码,是有时效性的,最长可以设置为在二维码生成后的30天(即2592000秒)后过期,但能够生成较多数量。临时二维码主要用于账号绑定等不要求二维码永久保存的业务场景

2、永久二维码,无过期时间,目前限制为最多10万个。永久二维码主要用于适用于账号绑定、用户来源统计等场景。

本文将主要介绍如何使用C#生成场景二维码的最终 Url 结果。

开发前准备

(1)需要申请公众号,以获取 AppId 和 AppSecret,可参照如下链接进行申请:

https://mp.weixin.qq.com/cgi-bin/loginpage

(2)通过获取的 AppId 和 AppSecret 获取访问令牌,可参照如下代码:

public string GetAccessToken()
{
            string accessToken = "";
            //获取配置信息Datatable
            string respText = "";
            //获取appid和appsercret
            string wechat_appid = AppId;
            string wechat_appsecret = AppSecret;
            //获取josn数据
            string getAccessTokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}";
            string url = string.Format(getAccessTokenUrl, wechat_appid, wechat_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();
            }
            JavaScriptSerializer Jss = new JavaScriptSerializer();
            Dictionary respDic = (Dictionary)Jss.DeserializeObject(respText);
            //通过键access_token获取值
            try
            {
                accessToken = respDic["access_token"].ToString();
            }
            catch (Exception e)
            {
                accessToken =e.Message;
            }
            return accessToken;
}

(3)需要引用 Newtonsoft.Json.dll 动态链接库。

(4)WebService 类实现访问 REST API URL 地址并 POST 数据,以获取返回结果 Json 的功能。具体实现请参照我的文章《C# 实现访问 Web API Url 提交数据并获取处理结果》

范例运行环境

操作系统: Windows Server 2019 DataCenter

.net版本: .netFramework4.0 或以上

开发工具:VS2019  C# 

设计与实现

临时二维码

QR_SCENE 类可用于生成临时二维码,其关键属性方法说明如下:

序号参数类型成员说明
1AccessToken string属性通过获取的 AppId 和 AppSecret 获取的访问令牌
2ResultJsonstring属性访问 API 返回的 Json 结果存储
3getUrlstring方法

获取生成二维码的地址。

参数1:int expire_seconds 过期秒数,最长30天(即2592000秒)

参数2:int scene_id ,整数型的场景ID值

类实现代码如下:

public class QR_SCENE
{
            public string AccessToken { get; set; }
            public string ticket { get; set; }
            public int expire_seconds { get; set; }
            public string url { get; set; }
            public string ResultJson = "";
            public QR_SCENE()
            {
            }
            public string getUrl(int expire_seconds,int scene_id){
                
                string PostJson = "{\"expire_seconds\": "+expire_seconds.ToString()+", \"action_name\": \"QR_SCENE\", \"action_info\": {\"scene\": {\"scene_id\": "+scene_id.ToString()+"}}}";
                String action = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=" + AccessToken;
                WebService ws = new WebService();
                string rs = ws.GetResponseResult(action, Encoding.UTF8, "POST", PostJson);
                Newtonsoft.Json.Linq.JObject jsonObj = Newtonsoft.Json.Linq.JObject.Parse(rs);
                ticket = jsonObj["ticket"] != null ? jsonObj["ticket"].ToString() : "";
                expire_seconds = jsonObj["expire_seconds"] != null ? int.Parse(jsonObj["expire_seconds"].ToString()) : 0;
                url = jsonObj["url"] != null ? jsonObj["url"].ToString() : "";
                ResultJson = rs;
                return "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket="+ticket;
            }
}

永久二维码

QR_LIMIT_SCENE 类可用于生成永久二维码,其关键属性方法说明如下:

序号参数类型成员说明
1AccessToken string属性通过获取的 AppId 和 AppSecret 获取的访问令牌
2ResultJsonstring属性访问 API 返回的 Json 结果存储
3getUrlstring方法

获取生成二维码的地址。

参数1:int scene_id ,整数型的场景ID值

类实现代码如下:

public class QR_LIMIT_SCENE
{
            public string AccessToken { get; set; }
            public string ticket { get; set; }
            public string url { get; set; }
            public string ResultJson = "";
            public QR_LIMIT_SCENE()
            {
            }
            public string getUrl(int scene_id)
            {
                string PostJson = "{\"action_name\": \"QR_LIMIT_SCENE\", \"action_info\": {\"scene\": {\"scene_id\": " + scene_id.ToString() + "}}}";
                String action = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=" + AccessToken;
                WebService ws = new WebService();
                string rs = ws.GetResponseResult(action, Encoding.UTF8, "POST", PostJson);
                Newtonsoft.Json.Linq.JObject jsonObj = Newtonsoft.Json.Linq.JObject.Parse(rs);
                ticket = jsonObj["ticket"] != null ? jsonObj["ticket"].ToString() : "";
                url = jsonObj["url"] != null ? jsonObj["url"].ToString() : "";
                ResultJson = rs;
                return "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=" + ticket;
            }
}

 QR_LIMIT_STR_SCENE 类也可用于生成永久二维码,区别在于可以传递字符串的参数值,其关键属性方法说明如下:

序号参数类型成员说明
1AccessToken string属性通过获取的 AppId 和 AppSecret 获取的访问令牌
2ResultJsonstring属性访问 API 返回的 Json 结果存储
3getUrlstring方法

获取生成二维码的地址。

参数1:string scene_str ,字符型的场景ID值

类实现代码如下:

public class QR_LIMIT_STR_SCENE
{
            public string AccessToken { get; set; }
            public string ticket { get; set; }
            public string url { get; set; }
            public string ResultJson = "";
            public QR_LIMIT_STR_SCENE()
            {
            }
            public string getUrl(string scene_str)
            {
                string PostJson = "{\"action_name\": \"QR_LIMIT_STR_SCENE\", \"action_info\": {\"scene\": {\"scene_str\": \"" + scene_str + "\"}}}";
                String action = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=" + AccessToken;
                WebService ws = new WebService();
                string rs = ws.GetResponseResult(action, Encoding.UTF8, "POST", PostJson);
                Newtonsoft.Json.Linq.JObject jsonObj = Newtonsoft.Json.Linq.JObject.Parse(rs);
                ticket = jsonObj["ticket"] != null ? jsonObj["ticket"].ToString() : "";
                url = jsonObj["url"] != null ? jsonObj["url"].ToString() : "";
                ResultJson = rs;
                return "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=" + ticket;
            }
}

小结

有关场景二维码生成的介绍,更多详情请参照如下链接:

https://developers.weixin.qq.com/doc/offiaccount/Account_Management/Generating_a_Parametric_QR_Code.html

本文代码仅供您参考使用,您可以参照官方文档开发出更加贴合自身需求的应用,感谢您的阅读,希望本文能够对您有所帮助。

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]