二維碼生成工廠

本次主要分享的是3個免費的二維碼接口的對接代碼和測試得出的注意點及區別,有更好處理方式多多交流,相互促進進步;最近在學習JavsScript的擴展TypeScript,感受語法糖很甜,大部分與C#更爲相似,可能都是微軟項目的緣由吧,有興趣的朋友能夠多多相互交流下;php

 

以上是我的的見解,下面來正式分享今天的文章吧:api

. Google的Api二維碼生成接口瀏覽器

. 2d-code的Api二維碼生成接口緩存

. topscan的Api二維碼生成接口ide

. 使用面向對象+加載程序集建立對象合併以上接口封裝成二維碼生成工廠學習

 

下面一步一個腳印的來分享:測試

. Google的Api二維碼生成接口google

首先,這裏給出Google接口文檔的連接qr_codes文檔,熱情的朋友立刻就會打開此連接吧,詳細看下里面的參數這就不作截圖了,大體一般用到的參數是:api地址,內容參數,生成圖片的高寬這3個參數,其餘的幾個參數都採用默認的吧,不一樣須要你們能夠更詳細的看下;其實第一次看到文檔裏面的參數,感受少了一些東西,好比怎麼不能傳遞二維碼中間那個圖標的圖片地址和掃描二維碼事後怎麼跳轉到我想重定向的url連接呢,帶着這個疑問我進行了屢次的嘗試;下面給出本身嘗試的結果說明:url

1. 接口關鍵參數是:cht(固定值qr),chl(內容參數),chs(生成出來二維碼圖片尺寸,格式如:200x200,這裏是xyz的x不是*)spa

2. api接口只會生成一個二維碼的圖片流,若是須要把圖片保存到本地須要經過瀏覽器直接get訪問接口或者經過程序下載這個二維碼

3. 內容參數若是傳遞文本信息,在生成出來的二維碼圖片中間不會顯示文本內容,只有用手機掃描二維碼才能在手機上顯示傳遞的文本信息

4. 內容參數若是傳遞單純的http://格式的連接地址,那麼手機掃描後會自動重定向到改http://連接地址上(這個掃描重定向能夠用來作一些商品或者文章的查看)

5. google接口暫未研究出此Logo圖標地址參數(但願有朋友研究出來後與我分享,謝謝)

6. 因爲api地址是國外的,調用接口響應不是那麼快速

其次,上面是我的的一些總結,下面咱們來看下封裝的請求接口方法和下載二維碼圖片方法:

 1  #region 生成二維碼
 2 
 3         /// <summary>
 4         /// 生成二維碼
 5         /// </summary>
 6         /// <param name="content">展現內容(文本內容 或者 掃描後的跳轉http://格式的地址)</param>
 7         /// <param name="savePath">保存二維碼的磁盤路徑(默認程序跟目錄+QRCode)</param>
 8         /// <param name="logoUrl"> Logo圖標地址(格式:http://),(注:google接口暫未研究出此參數)</param>
 9         /// <param name="apiUrl">接口地址(內置默認api地址)</param>
10         /// <param name="wAndh">寬度和高度(二維碼正方形的,高寬一至,默認200)</param>
11         /// <returns></returns>
12         public virtual string CreateQRCode(string content = null, string savePath = null, string logoUrl = null, string apiUrl = null, int? wAndh = null)
13         {
14             var qrName = string.Empty;
15 
16             #region 參數初始化
17 
18             ApiUrl = apiUrl ?? ApiUrl;
19             Content = content ?? Content;
20             SaveQRPath = savePath ?? SaveQRPath;
21             LogoUrl = logoUrl ?? LogoUrl;
22             WAndH = wAndh ?? WAndH;
23             #endregion
24 
25             if (string.IsNullOrEmpty(ApiUrl)) { return qrName; }
26 
27             ApiUrl = string.Format("{0}?cht=qr&chl={1}&chs={2}x{2}",
28                         ApiUrl,
29                         HttpUtility.UrlEncode(Content),
30                         WAndH);
31 
32             qrName = DownImg(ApiUrl, SaveQRPath, ImageFormat.Jpeg);
33             return qrName;
34         }
35         #endregion

下載二維碼圖片保存到程序根目錄:

 1  #region 下載圖片
 2 
 3         /// <summary>
 4         /// 下載圖片
 5         /// </summary>
 6         /// <param name="url">圖片下載地址</param>
 7         /// <param name="savePath">保存路徑默認:Img文件夾</param>
 8         /// <param name="format">默認:Jpeg</param>
 9         /// <returns>新圖片名稱</returns>
10         public virtual string DownImg(string url, string savePath = "QRCode", ImageFormat format = null)
11         {
12             var qrName = string.Empty;
13             try
14             {
15                 format = format ?? ImageFormat.Jpeg;
16 
17                 HttpClient http = new HttpClient();
18                 http.Timeout = new TimeSpan(0, 1, 0);
19                 using (var stream = http.GetStreamAsync(url).Result)
20                 {
21 
22                     if (!Directory.Exists(SaveQRPath)) { Directory.CreateDirectory(SaveQRPath); }
23                     qrName = DateTime.Now.ToString("yyyyMMddHHmmssfff") + "." + format;
24                     var path = Path.Combine(savePath, qrName);
25                     using (Image img = Image.FromStream(stream))
26                     {
27                         img.Save(path, format);
28                     }
29                 }
30             }
31             catch (Exception ex)
32             {
33                 qrName = string.Empty;
34             }
35             return qrName;
36         }
37         #endregion

上面兩個方法使用的是虛方法,由於我這裏是吧google接口當作默認的二維碼生成器來使用,後面要講的另外兩個接口都是重寫與此;下載圖片的方法都是公用的,暫不須要重寫;這裏須要提到的是調用api接口時有一個固定的參數cht=qr,這個參數表示採用QR方法生成二維碼,由於這個api接口還有生成圖標的功能,因此只想要生成二維碼這裏就固定,更多的生成圖標功能不在本章分享中,謝謝。

 

. 2d-code的Api二維碼生成接口

首先,該接口須要經過他們官網註冊一個key,而後從後臺獲取到這個key後才能調用接口地址,固然註冊後有個功能是,凡是您經過api接口生成的二維碼,除了本身經過流下載,還能經過他們後臺一塊兒下載全部生成的圖片,本人暫時沒有去關注是否生成量大了會收費哈哈,下面列舉下接口參數說明和測試得出的注意點:

1. 接口關鍵參數是:key(註冊獲取),text(文本參數),url(掃描後重定向地址),logo(Logo圖標地址),size(二維碼正方形,高寬)

2. 接口的文本參數只能傳遞文本,不能當作掃描後重定向的地址參數使用和Google等接口有點不同

3. 掃描後重定向地址和Logo圖標地址都是可訪問的http://格式的地址連接

4. Logo圖標地址,官方說不建議使用png格式,測試只有jpg成功(多是測試不夠多這裏只單純介紹個人結果)

5. 生成速度比較快,並且還有一個藝術字的生成接口,挺不錯

6. api接口只會生成一個二維碼的圖片流,若是須要把圖片保存到本地須要經過瀏覽器直接get訪問接口或者經過程序下載這個二維碼

其次,下面給出封裝的代碼,因爲下載和上面介紹的代碼同樣是公用的這裏就不作陳述:

 1 public QR_2dCode()
 2         {
 3 
 4             ApiUrl = "http://www.2d-code.cn/2dcode/api.php";
 5         }
 6 
 7         #region 生成二維碼
 8 
 9         /// <summary>
10         /// 生成二維碼
11         /// </summary>
12         /// <param name="content">展現內容(文本內容 或者 掃描後的跳轉http://格式的地址)</param>
13         /// <param name="savePath">保存二維碼的磁盤路徑(默認程序跟目錄+QRCode)</param>
14         /// <param name="logoUrl"> Logo圖標地址(格式:http://),官方不建議使用png格式,測試只有jpg成功</param>
15         /// <param name="directUrl">掃描後重定向地址(http://)</param>
16         /// <param name="apiUrl">接口地址(內置默認api地址)</param>
17         /// <param name="wAndh">寬度和高度(二維碼正方形的,高寬一至,默認200)</param>
18         /// <returns></returns>
19         public override string CreateQRCode(string content = null, string savePath = null, string logoUrl = null, string apiUrl = null, int? wAndh = null)
20         {
21             var qrName = string.Empty;
22 
23             #region 參數初始化
24 
25             ApiUrl = apiUrl ?? ApiUrl;
26             Content = content ?? Content;
27             SaveQRPath = savePath ?? SaveQRPath;
28             LogoUrl = logoUrl ?? LogoUrl;
29             WAndH = wAndh ?? WAndH;
30             #endregion
31 
32             if (string.IsNullOrEmpty(ApiUrl)) { return qrName; }
33 
34             ApiUrl = string.Format("{0}?key=c_d800OBbu6hDzJtXPE2Yd02IMtmpuK9VdCqHe6vrtar4&text={1}&url={2}&logo={3}&size={4}",
35                         ApiUrl,
36                         HttpUtility.UrlEncode(Content.Contains("http") ? "" : Content),
37                         HttpUtility.UrlEncode(Content),
38                         HttpUtility.UrlEncode(LogoUrl),
39                         WAndH);
40 
41             qrName = DownImg(ApiUrl, SaveQRPath);
42             return qrName;
43         }
44         #endregion
View Code

 

. topscan的Api二維碼生成接口

首先,該接口確定是免費的,參數描述和google的差很少,不一樣處在於能夠傳遞Logo圖標地址(固然可能我還沒發現google的能夠傳遞logo的參數,故此朋友們能夠忽略);下面列舉下接口參數說明和測試得出的注意點:

1. 接口關鍵參數是:text(內容參數),logo(Logo圖標地址),w(生成出來二維碼圖片尺寸,格式如:200x200,這裏是xyz的x不是*)

2. api接口只會生成一個二維碼的圖片流,若是須要把圖片保存到本地須要經過瀏覽器直接get訪問接口或者經過程序下載這個二維碼

3. 內容參數若是傳遞文本信息,在生成出來的二維碼圖片中間不會顯示文本內容,只有用手機掃描二維碼才能在手機上顯示傳遞的文本信息

4. 內容參數若是傳遞單純的http://格式的連接地址,那麼手機掃描後會自動重定向到改http://連接地址上(這個掃描重定向能夠用來作一些商品或者文章的查看)

5. Logo圖標地址(格式:http://),jpg,png測試經過

6. 測試得出有時候請求生成二維碼不返回數據,有多是我網路問題吧,正常生成二維碼的速度仍是挺快

其次,下面給出封裝的代碼,因爲下載和上面介紹的代碼同樣是公用的這裏就不作陳述:

 1 public QR_TopScan()
 2         {
 3 
 4             ApiUrl = "http://qr.topscan.com/api.php";
 5         }
 6 
 7         #region 生成二維碼
 8 
 9         /// <summary>
10         /// 生成二維碼
11         /// </summary>
12         /// <param name="content">展現內容(文本內容 或者 掃描後的跳轉http://格式的地址)</param>
13         /// <param name="savePath">保存二維碼的磁盤路徑(默認程序跟目錄+QRCode)</param>
14         /// <param name="logoUrl"> Logo圖標地址(格式:http://),jpg,png測試經過,測試得出有不能成功的,緣由不知是否和地址有關</param>
15         /// <param name="apiUrl">接口地址(內置默認api地址)</param>
16         /// <param name="wAndh">寬度和高度(二維碼正方形的,高寬一至,默認200)</param>
17         /// <returns></returns>
18         public override string CreateQRCode(string content = null, string savePath = null, string logoUrl = null, string apiUrl = null, int? wAndh = null)
19         {
20             var qrName = string.Empty;
21 
22             #region 參數初始化
23 
24             ApiUrl = apiUrl ?? ApiUrl;
25             Content = content ?? Content;
26             SaveQRPath = savePath ?? SaveQRPath;
27             LogoUrl = logoUrl ?? LogoUrl;
28             WAndH = wAndh ?? WAndH;
29             #endregion
30 
31             if (string.IsNullOrEmpty(ApiUrl)) { return qrName; }
32 
33             ApiUrl = string.Format("{0}?text={1}&logo={2}&w={3}",
34                         ApiUrl,
35                         HttpUtility.UrlEncode(Content),
36                         HttpUtility.UrlEncode(LogoUrl),
37                         WAndH);
38 
39             qrName = DownImg(ApiUrl, SaveQRPath);
40             return qrName;
41         }
42         #endregion
View Code

 

. 使用面向對象+加載程序集建立對象合併以上接口封裝成二維碼生成工廠

首先,分析上面3個接口的參數能夠看出,都須要固定的參數:接口api,內容(文本或跳轉http地址),Logo圖片地址(google暫時除外),寬度和高度等這幾個參數,這樣一來咋們能夠定義個統一參數類,來傳遞該參數信息,這裏還要提下因爲這幾個接口都是從別人接口獲取圖片流,若是想要吧圖片在執行程序時候直接保存在咱們的程序本地,都須要下載,因此又多一個參數: 保存二維碼的磁盤路徑,因此纔有了一下公共的屬性:

 1 #region 基礎配置信息
 2 
 3         /// <summary>
 4         /// 接口地址(必填)
 5         /// </summary>
 6         protected string ApiUrl = "https://chart.googleapis.com/chart";
 7 
 8         /// <summary>
 9         /// 展現內容(文本內容),google文本參數直接傳遞http地址直接重定向
10         /// </summary>
11         protected string Content = "http://www.cnblogs.com/wangrudong003/";
12 
13         /// <summary>
14         /// 保存二維碼的磁盤路徑(默認程序跟目錄+QRCode)
15         /// </summary>
16         protected string SaveQRPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "QRCode");
17 
18         /// <summary>
19         /// Logo圖片地址(http://)
20         /// </summary>
21         protected string LogoUrl = "http://a.hiphotos.baidu.com/baike/w%3D268%3Bg%3D0/sign=9a34e44d8bd4b31cf03c93bdbfed4042/2cf5e0fe9925bc318cb9fe965edf8db1ca1370dc.jpg";
22 
23         /// <summary>
24         /// 寬度和高度(二維碼正方形的,高寬一至,默認200)
25         /// </summary>
26         protected int WAndH = 200;
27 
28         #endregion

而後,這裏我不想每一個接口都手動new一次來建立對象,因此用了加載程序集的模塊的方式來建立所須要的對象,所以有了工廠類的入口:

 1  /// <summary>
 2     /// 二維碼生成工廠
 3     /// </summary>
 4     public class QRCodeReposity
 5     {
 6 
 7         public static BaseQRCode Current(QREmType qrEmType = QREmType.BaseQRCode)
 8         {
 9 
10             var nspace = typeof(BaseQRCode);
11             var fullName = nspace.FullName;
12             var nowspace = fullName.Substring(0, fullName.LastIndexOf('.') + 1);
13 
14             return Assembly.GetExecutingAssembly().CreateInstance(nowspace + qrEmType.ToString(), true) as BaseQRCode;
15         }
16     }

這裏和以前的緩存工廠文章設計差很少,能夠查閱下以前的分享篇,也多多點贊,謝謝;下面在給出說有的代碼以下:

  1     /// <summary>
  2     /// 工廠模塊定義
  3     /// </summary>
  4     public enum QREmType
  5     {
  6         /// <summary>
  7         /// google接口
  8         /// </summary>
  9         BaseQRCode,
 10 
 11         /// <summary>
 12         /// 2d-code接口
 13         /// </summary>
 14         QR_2dCode,
 15 
 16         /// <summary>
 17         /// topscan接口
 18         /// </summary>
 19         QR_TopScan
 20     }
 21 
 22     /// <summary>
 23     /// 二維碼生成工廠
 24     /// </summary>
 25     public class QRCodeReposity
 26     {
 27 
 28         public static BaseQRCode Current(QREmType qrEmType = QREmType.BaseQRCode)
 29         {
 30 
 31             var nspace = typeof(BaseQRCode);
 32             var fullName = nspace.FullName;
 33             var nowspace = fullName.Substring(0, fullName.LastIndexOf('.') + 1);
 34 
 35             return Assembly.GetExecutingAssembly().CreateInstance(nowspace + qrEmType.ToString(), true) as BaseQRCode;
 36         }
 37     }
 38 
 39     /// <summary>
 40     /// 基類使用Google提供Api:https://developers.google.com/chart/infographics/docs/qr_codes ,因爲是國外地址,相對來講有點慢
 41     /// </summary>
 42     public class BaseQRCode
 43     {
 44 
 45         #region 基礎配置信息
 46 
 47         /// <summary>
 48         /// 接口地址(必填)
 49         /// </summary>
 50         protected string ApiUrl = "https://chart.googleapis.com/chart";
 51 
 52         /// <summary>
 53         /// 展現內容(文本內容),google文本參數直接傳遞http地址直接重定向
 54         /// </summary>
 55         protected string Content = "http://www.cnblogs.com/wangrudong003/";
 56 
 57         /// <summary>
 58         /// 保存二維碼的磁盤路徑(默認程序跟目錄+QRCode)
 59         /// </summary>
 60         protected string SaveQRPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "QRCode");
 61 
 62         /// <summary>
 63         /// Logo圖片地址(http://)
 64         /// </summary>
 65         protected string LogoUrl = "http://a.hiphotos.baidu.com/baike/w%3D268%3Bg%3D0/sign=9a34e44d8bd4b31cf03c93bdbfed4042/2cf5e0fe9925bc318cb9fe965edf8db1ca1370dc.jpg";
 66 
 67         /// <summary>
 68         /// 寬度和高度(二維碼正方形的,高寬一至,默認200)
 69         /// </summary>
 70         protected int WAndH = 200;
 71 
 72         #endregion
 73 
 74         #region 方法
 75 
 76         #region 生成二維碼
 77 
 78         /// <summary>
 79         /// 生成二維碼
 80         /// </summary>
 81         /// <param name="content">展現內容(文本內容 或者 掃描後的跳轉http://格式的地址)</param>
 82         /// <param name="savePath">保存二維碼的磁盤路徑(默認程序跟目錄+QRCode)</param>
 83         /// <param name="logoUrl"> Logo圖標地址(格式:http://),(注:google接口暫未研究出此參數)</param>
 84         /// <param name="apiUrl">接口地址(內置默認api地址)</param>
 85         /// <param name="wAndh">寬度和高度(二維碼正方形的,高寬一至,默認200)</param>
 86         /// <returns></returns>
 87         public virtual string CreateQRCode(string content = null, string savePath = null, string logoUrl = null, string apiUrl = null, int? wAndh = null)
 88         {
 89             var qrName = string.Empty;
 90 
 91             #region 參數初始化
 92 
 93             ApiUrl = apiUrl ?? ApiUrl;
 94             Content = content ?? Content;
 95             SaveQRPath = savePath ?? SaveQRPath;
 96             LogoUrl = logoUrl ?? LogoUrl;
 97             WAndH = wAndh ?? WAndH;
 98             #endregion
 99 
100             if (string.IsNullOrEmpty(ApiUrl)) { return qrName; }
101 
102             ApiUrl = string.Format("{0}?cht=qr&chl={1}&chs={2}x{2}",
103                         ApiUrl,
104                         HttpUtility.UrlEncode(Content),
105                         WAndH);
106 
107             qrName = DownImg(ApiUrl, SaveQRPath, ImageFormat.Jpeg);
108             return qrName;
109         }
110         #endregion
111 
112         #region 下載圖片
113 
114         /// <summary>
115         /// 下載圖片
116         /// </summary>
117         /// <param name="url">圖片下載地址</param>
118         /// <param name="savePath">保存路徑默認:Img文件夾</param>
119         /// <param name="format">默認:Jpeg</param>
120         /// <returns>新圖片名稱</returns>
121         public virtual string DownImg(string url, string savePath = "QRCode", ImageFormat format = null)
122         {
123             var qrName = string.Empty;
124             try
125             {
126                 format = format ?? ImageFormat.Jpeg;
127 
128                 HttpClient http = new HttpClient();
129                 http.Timeout = new TimeSpan(0, 1, 0);
130                 using (var stream = http.GetStreamAsync(url).Result)
131                 {
132 
133                     if (!Directory.Exists(SaveQRPath)) { Directory.CreateDirectory(SaveQRPath); }
134                     qrName = DateTime.Now.ToString("yyyyMMddHHmmssfff") + "." + format;
135                     var path = Path.Combine(savePath, qrName);
136                     using (Image img = Image.FromStream(stream))
137                     {
138                         img.Save(path, format);
139                     }
140                 }
141             }
142             catch (Exception ex)
143             {
144                 qrName = string.Empty;
145             }
146             return qrName;
147         }
148         #endregion
149 
150         #endregion
151     }
152 
153     /// <summary>
154     /// 使用2d-code提供Api,須要去官網註冊獲取Key
155     /// </summary>
156     public class QR_2dCode : BaseQRCode
157     {
158 
159         public QR_2dCode()
160         {
161 
162             ApiUrl = "http://www.2d-code.cn/2dcode/api.php";
163         }
164 
165         #region 生成二維碼
166 
167         /// <summary>
168         /// 生成二維碼
169         /// </summary>
170         /// <param name="content">展現內容(文本內容 或者 掃描後的跳轉http://格式的地址)</param>
171         /// <param name="savePath">保存二維碼的磁盤路徑(默認程序跟目錄+QRCode)</param>
172         /// <param name="logoUrl"> Logo圖標地址(格式:http://),官方不建議使用png格式,測試只有jpg成功</param>
173         /// <param name="directUrl">掃描後重定向地址(http://)</param>
174         /// <param name="apiUrl">接口地址(內置默認api地址)</param>
175         /// <param name="wAndh">寬度和高度(二維碼正方形的,高寬一至,默認200)</param>
176         /// <returns></returns>
177         public override string CreateQRCode(string content = null, string savePath = null, string logoUrl = null, string apiUrl = null, int? wAndh = null)
178         {
179             var qrName = string.Empty;
180 
181             #region 參數初始化
182 
183             ApiUrl = apiUrl ?? ApiUrl;
184             Content = content ?? Content;
185             SaveQRPath = savePath ?? SaveQRPath;
186             LogoUrl = logoUrl ?? LogoUrl;
187             WAndH = wAndh ?? WAndH;
188             #endregion
189 
190             if (string.IsNullOrEmpty(ApiUrl)) { return qrName; }
191 
192             ApiUrl = string.Format("{0}?key=c_d800OBbu6hDzJtXPE2Yd02IMtmpuK9VdCqHe6vrtar4&text={1}&url={2}&logo={3}&size={4}",
193                         ApiUrl,
194                         HttpUtility.UrlEncode(Content.Contains("http") ? "" : Content),
195                         HttpUtility.UrlEncode(Content),
196                         HttpUtility.UrlEncode(LogoUrl),
197                         WAndH);
198 
199             qrName = DownImg(ApiUrl, SaveQRPath);
200             return qrName;
201         }
202         #endregion
203     }
204 
205     /// <summary>
206     /// 使用topscan提供Api
207     /// </summary>
208     public class QR_TopScan : BaseQRCode
209     {
210 
211         public QR_TopScan()
212         {
213 
214             ApiUrl = "http://qr.topscan.com/api.php";
215         }
216 
217         #region 生成二維碼
218 
219         /// <summary>
220         /// 生成二維碼
221         /// </summary>
222         /// <param name="content">展現內容(文本內容 或者 掃描後的跳轉http://格式的地址)</param>
223         /// <param name="savePath">保存二維碼的磁盤路徑(默認程序跟目錄+QRCode)</param>
224         /// <param name="logoUrl"> Logo圖標地址(格式:http://),jpg,png測試經過,測試得出有不能成功的,緣由不知是否和地址有關</param>
225         /// <param name="apiUrl">接口地址(內置默認api地址)</param>
226         /// <param name="wAndh">寬度和高度(二維碼正方形的,高寬一至,默認200)</param>
227         /// <returns></returns>
228         public override string CreateQRCode(string content = null, string savePath = null, string logoUrl = null, string apiUrl = null, int? wAndh = null)
229         {
230             var qrName = string.Empty;
231 
232             #region 參數初始化
233 
234             ApiUrl = apiUrl ?? ApiUrl;
235             Content = content ?? Content;
236             SaveQRPath = savePath ?? SaveQRPath;
237             LogoUrl = logoUrl ?? LogoUrl;
238             WAndH = wAndh ?? WAndH;
239             #endregion
240 
241             if (string.IsNullOrEmpty(ApiUrl)) { return qrName; }
242 
243             ApiUrl = string.Format("{0}?text={1}&logo={2}&w={3}",
244                         ApiUrl,
245                         HttpUtility.UrlEncode(Content),
246                         HttpUtility.UrlEncode(LogoUrl),
247                         WAndH);
248 
249             qrName = DownImg(ApiUrl, SaveQRPath);
250             return qrName;
251         }
252         #endregion
253     }
View Code

本篇的分享內容在程序設計方面沒有太多,重點是分裝下這幾個接口和分享下接口的差別,方面朋友們能夠拿來主義和正在對接二維碼生成的朋友作下交流,僅此而已;關鍵代碼的備註都在分享代碼裏,有更好或者不清楚的地方歡迎留言,謝謝,放一張效果圖,你們能夠掃一掃:

 

相關文章
相關標籤/搜索