行业知识
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 类可用于生成临时二维码,其关键属性方法说明如下:
| 序号 | 参数 | 类型 | 成员 | 说明 |
|---|---|---|---|---|
| 1 | AccessToken | string | 属性 | 通过获取的 AppId 和 AppSecret 获取的访问令牌 |
| 2 | ResultJson | string | 属性 | 访问 API 返回的 Json 结果存储 |
| 3 | getUrl | string | 方法 | 获取生成二维码的地址。 参数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 类可用于生成永久二维码,其关键属性方法说明如下:
| 序号 | 参数 | 类型 | 成员 | 说明 |
|---|---|---|---|---|
| 1 | AccessToken | string | 属性 | 通过获取的 AppId 和 AppSecret 获取的访问令牌 |
| 2 | ResultJson | string | 属性 | 访问 API 返回的 Json 结果存储 |
| 3 | getUrl | string | 方法 | 获取生成二维码的地址。 参数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 类也可用于生成永久二维码,区别在于可以传递字符串的参数值,其关键属性方法说明如下:
| 序号 | 参数 | 类型 | 成员 | 说明 |
|---|---|---|---|---|
| 1 | AccessToken | string | 属性 | 通过获取的 AppId 和 AppSecret 获取的访问令牌 |
| 2 | ResultJson | string | 属性 | 访问 API 返回的 Json 结果存储 |
| 3 | getUrl | string | 方法 | 获取生成二维码的地址。 参数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
本文代码仅供您参考使用,您可以参照官方文档开发出更加贴合自身需求的应用,感谢您的阅读,希望本文能够对您有所帮助。
上一篇:糖果的服务器战力怎么获得?