/// <summary> /// 创建小程序码 /// </summary> /// <returns>返回Base64图片字符串</returns> public static ToResultJson GetWxaCodeUnlimit(CreateMpCodeInputDto inputDto) { string secret = string.Empty; CollectMoneyInfoDto coll = new CompService().GetCollectMoneyInfo(inputDto.CompCode); inputDto.AppID = coll.AppID; var authorizationInfo = new CompService().GetCollectMoneyAuthorizationInfo(inputDto.AppID); if (authorizationInfo != null) { secret = authorizationInfo.AppSecret; } else { secret = new CompService().GetPlatformAppSecret(inputDto.AppID); } string token = GetMPToken(inputDto.AppID, secret); if (string.IsNullOrEmpty(token)) { return new ToResultJson(0, "990201");//获取小程序令牌失败 } string strURL = string.Format("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token={0}", token); int aCodeWidth = inputDto.width; if (inputDto.width < 280) { aCodeWidth = 280; } if (inputDto.width > 1280) { aCodeWidth = 1280; } GetWxaCodeUnlimitInputDto getWxaCodeUnlimitInputDto = new GetWxaCodeUnlimitInputDto() { auto_color = false, is_hyaline = false, line_color = new GetWxaCodeUnlimitLineColorDto { r = 0, g = 0, b = 0 }, width = aCodeWidth, page = string.IsNullOrWhiteSpace(inputDto.page) ? string.Empty : inputDto.page, scene = string.IsNullOrWhiteSpace(inputDto.scene) ? string.Empty : inputDto.scene, }; string dataJson = JsonConvert.SerializeObject(getWxaCodeUnlimitInputDto); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strURL); request.Method = "POST"; request.ContentType = "application/json;charset=UTF-8"; byte[] payload = Encoding.UTF8.GetBytes(dataJson); request.ContentLength = payload.Length; Stream writer = request.GetRequestStream(); writer.Write(payload, 0, payload.Length); writer.Close(); System.Net.HttpWebResponse response = (HttpWebResponse)request.GetResponse(); var stream = response.GetResponseStream();//返回图片数据流 var memoryStream = new MemoryStream(); //将基础流写入内存流 const int bufferLength = 1024; byte[] buffer = new byte[bufferLength]; int count = 0; while ((count = stream.Read(buffer, 0, bufferLength)) > 0) { memoryStream.Write(buffer, 0, count); } memoryStream.Position = 0; string strBase64 = Convert.ToBase64String(memoryStream.GetBuffer()); return new ToResultJson(1, "000000") { data = strBase64 }; }
/// <summary> /// 获取小程序token /// </summary> /// <returns></returns> public static string GetMPToken(string appid, string secret) { string token = string.Empty; string strUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}"; var url = string.Format(strUrl, appid, secret); var response = HttpWebResponseUtility.CreateGetHttpResponse(url, null, null, null); if (response.StatusCode == HttpStatusCode.OK) { Stream receiveStream = response.GetResponseStream(); StreamReader streamReader = new StreamReader(receiveStream, Encoding.UTF8); string jsonStr = streamReader.ReadToEnd(); if (!string.IsNullOrEmpty(jsonStr)) { try { var objToken = JsonConvert.DeserializeObject<JObject>(jsonStr); if (objToken != null && objToken.GetValue("errcode") == null) { return objToken.GetValue("access_token").ToString(); } return string.Empty; } catch (Exception ex) { LoggerHelper.Error("获取小程序token失败", ex); } } } return token; }
$.http.post(\'/Setup/Store/CreateMpCode\', { Id: obj.data.Id }, function (res) { if (res.status == "1") { layer.open({ type: 1, title: I18n.T(\'查看二维码\'), area: [\'26%\', \'auto\'], shadeClose: false, anim: -1, isOutAnim: false, content: $(".qrcode"), success: function (index, layero) { img = "data:image/jpg;base64," + res.data; $("#code").attr("src", img); //$(".downCode").attr("i", res.data.img); } }) } else { $.luck.error(res.msg); } });
[HttpPost] public JsonResult CreateMpCode(string Id) { var json = new ToResultJson(); CreateMpCodeInputDto inputDto = new CreateMpCodeInputDto(); inputDto.CompCode = WorkContext.CompCode; inputDto.scene = Id; inputDto.page = "pages/index/index"; inputDto.width = 280; json = WxCommService.GetWxaCodeUnlimit(inputDto); return Json(json, JsonRequestBehavior.AllowGet); }
//下载图片 function downImg() { downloadFile(\'qrcode.jpg\', img); } function downloadFile(fileName, content) { let aLink = document.createElement(\'a\'); let blob = this.base64ToBlob(content); // new Blob([content]); let evt = document.createEvent(\'HTMLEvents\'); evt.initEvent(\'click\', true, true);// initEvent 不加后两个参数在FF下会报错 事件类型,是否冒泡,是否阻止浏览器的默认行为 aLink.download = fileName; aLink.href = URL.createObjectURL(blob); aLink.dispatchEvent(new MouseEvent(\'click\', { bubbles: true, cancelable: true, view: window }));// 兼容火狐 } // base64转blob function base64ToBlob(code) { let parts = code.split(\';base64,\'); let contentType = parts[0].split(\':\')[1]; let raw = window.atob(parts[1]); let rawLength = raw.length; let uInt8Array = new Uint8Array(rawLength); for (let i = 0; i < rawLength; ++i) { uInt8Array[i] = raw.charCodeAt(i); } return new Blob([uInt8Array], { type: contentType }); }
---------------------------------------------------------------------------------------------------------
转载请记得说明作者和出处哦-.-
作者:KingDuDu
原文出处:https://www.cnblogs.com/kingdudu/articles/12675554.html
---------------------------------------------------------------------------------------------------------
请发表评论