調用草料二維碼的API接口
https://cli.im/api/qrcode/code?text=***&mhid=***
mhid:草料二維碼的模版樣式id,這里選擇的是【vUbEWVm7mp0hPn0nLdc】,可以在草料的網站上生成模版:https://mh.cli.im/
text:就是二維碼字符串內容,可以是網址或其他自定義的string
由於接口並沒有直接返回二維碼圖片url,而是摻雜着html代碼,所以需要處理接口返回的數據,正則出圖片url
/// <summary> /// 處理生成彩色二維碼圖片 /// </summary> /// <param name="code"></param> /// <returns></returns> public string _GetColorfullQRCode(string code = "") { #if DEBUG code = "Hello Word!"; #endif m_Trace.Trace("_GetColorfullQRCode code=" + code); if (string.IsNullOrWhiteSpace(code)) return "請輸入二維碼串"; code = code.Replace("+", "-"); code = HttpUtility.UrlEncode(code); string md5 = Utility.MD5(code); var cache = CacheHelper.Get(md5); if (null != cache && cache is string) { string cacheResult = cache as string; m_Trace.Trace("_GetColorfullQRCode cacheResult=" + cacheResult); return cacheResult; } var mhids = new string[]{ "vUbEWVm7mp0hPn0nLdc" }; string mhid = ""; if (mhids.Length == 1) { mhid = mhids[0]; } else { int seed = 2; int.TryParse(DateTime.Now.ToString("ffff"), out seed); var r = new Random(seed); mhid = mhids[r.Next(0, mhids.Length - 1)]; } string result = ""; string url = "https://cli.im/api/qrcode/code?text=" + code + "&mhid=" + mhid; m_Trace.Trace("_GetColorfullQRCode url=" + url); string htmltext = KTHttpRequest._Get(url, false); //m_Trace.Trace("_GetColorfullQRCode htmltext=" + htmltext); string[] imgUrlList = GetHtmlImageUrlList(htmltext); if (null != imgUrlList && imgUrlList.Length > 0) { result = "http:" + imgUrlList[0]; CacheHelper.Max(md5, result); } m_Trace.Trace("_GetColorfullQRCode result=" + result); return result; }
正則取出圖片url的方法
/// <summary> /// 取得HTML中所有圖片的 URL。 /// </summary> /// <param name="sHtmlText">HTML代碼</param> /// <returns>圖片的URL列表</returns> private string[] GetHtmlImageUrlList(string sHtmlText) { // 定義正則表達式用來匹配 img 標簽 Regex regImg = new Regex(@"<img\b[^<>]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""']?[\s\t\r\n]*(?<imgUrl>[^\s\t\r\n""'<>]*)[^<>]*?/?[\s\t\r\n]*>", RegexOptions.IgnoreCase); // 搜索匹配的字符串 MatchCollection matches = regImg.Matches(sHtmlText); int i = 0; string[] sUrlList = new string[matches.Count]; // 取得匹配項列表 foreach (Match match in matches) sUrlList[i++] = match.Groups["imgUrl"].Value; return sUrlList; } #endregion
最后得到了一長串的二維碼url
http://qr.api.cli.im/qr?data=F9GgzK99KhtObCUuiKsEZQ844D-LU%2F9Fy3fmjSUM%2FOBoDRBqwL4AabAW-L5f5QXMqIl3q3NhR83gINMkoexmmA%3D%3D&level=H&transparent=0&bgcolor=%23FFFFFF&forecolor=%2F%2Fstatic-develop.clewm.net%2Fcli%2Fimages%2Fbeautify%2Ftpl%2Ffg1.jpg&blockpixel=12&marginblock=2&logourl=&size=400&text=&logoshape=no&fontsize=46&fontfamily=msyh.ttf&fontcolor=%23000000&incolor=&outcolor=%23368af4&background=%2F%2Fstatic.clewm.net%2Fcli%2Fimages%2Fbeautify%2Ftpl%2Fbg1.png&qrcode_eyes=&wper=0.86&hper=0.86&lper=0.07&tper=0.07&eye_use_fore=1&qrpad=10&kid=cliim&key=ae4ec3d0e4fbcd224af775ba353bb868
訪問這個長連接就可以得到想要的彩色二維碼
搞定!