Ejemplo n.º 1
0
        public void CreateWxaQrCodeTest()
        {
            var dt1 = DateTime.Now;

            using (var ms = new MemoryStream())
            {
                var result = WxAppApi.CreateWxQrCode(base._appId, ms, "pages/websocket", 100);
                Assert.AreEqual(ReturnCode.请求成功, result.errcode);

                ms.Seek(0, SeekOrigin.Begin);
                //储存图片

                var filePath = "../../Config/qr.jpg";
                File.Delete(filePath);
                using (var fs = new FileStream(filePath, FileMode.CreateNew))
                {
                    ms.CopyTo(fs);
                    fs.Flush();
                }
                Assert.IsTrue(File.Exists(filePath));
            }

            var dt2 = DateTime.Now;

            Console.WriteLine("执行时间:{0}ms", (dt2 - dt1).TotalMilliseconds);
        }
Ejemplo n.º 2
0
        public IActionResult ImgSecCheck(string filePath)
        {
            CommonResult result = new CommonResult();

            try
            {
                var          fileDic = new Dictionary <string, string>();
                WxJsonResult res     = WxAppApi.ImgSecCheck(WxOpenAppId, filePath);
                if (res.errcode == ReturnCode.请求成功)
                {
                    result.ErrCode = ErrCode.successCode;
                    result.Success = true;
                    result.ResData = res;
                }
                else
                {
                    result.ErrCode = ErrCode.failCode;
                    result.ErrMsg  = "图片含有违法违规内容,请更换图片";
                    result.ResData = res;
                }
            }
            catch (Exception ex)
            {
                Log4NetHelper.Error("代码生成异常", ex);
                result.ErrMsg  = "代码生成异常:" + ex.Message;
                result.ErrCode = ErrCode.failCode;
            }
            return(ToJsonContent(result));
        }
Ejemplo n.º 3
0
        public void CreateWxaQrCodeAsyncTest()
        {
            var dt1      = DateTime.Now;
            var filePath = "../../Config/qr-async.jpg";

            Task.Factory.StartNew(async() =>
            {
                var ms     = new MemoryStream();
                var result = await WxAppApi.CreateWxQrCodeAsync(base._appId, ms, "pages/websocket", 100);
                Assert.AreEqual(ReturnCode.请求成功, result.errcode);

                ms.Seek(0, SeekOrigin.Begin);
                //储存图片
                File.Delete(filePath);
                using (var fs = new FileStream(filePath, FileMode.CreateNew))
                {
                    await ms.CopyToAsync(fs);
                    await fs.FlushAsync();
                }

                Assert.IsTrue(File.Exists(filePath));
            });
            var dt2 = DateTime.Now;

            while (!File.Exists(filePath))
            {
            }
            var dt3 = DateTime.Now;

            Console.WriteLine("执行时间:{0}ms", (dt2 - dt1).TotalMilliseconds);
            Console.WriteLine("等待时间:{0}ms", (dt3 - dt2).TotalMilliseconds);
        }
Ejemplo n.º 4
0
        public void CreateWxaQrCodeTest2()
        {
            var dt1      = DateTime.Now;
            var filePath = "../../Config/qr2.jpg";
            var result   = WxAppApi.CreateWxQrCode(base._appId, filePath, "pages/websocket", 100);
            var dt2      = DateTime.Now;

            Console.WriteLine("执行时间:{0}ms", (dt2 - dt1).TotalMilliseconds);
        }
Ejemplo n.º 5
0
        public void Template(string messageId, string appId, string openId, string templateId, string url, Dictionary <string, WxWebSendTemplateRequest.DataItem> data, string formId, PerformContext context)
        {
            var messageStatus = new MessageStatus(_redis, messageId);

            messageStatus.Sended(openId);
            context.WriteLine("向用户「{0}」@「{1}」发送模版消息「{2}」...", openId, appId, templateId);
            var accessToken = _redis.StringGet(CacheKey.UserAccessTokenPrefix + appId);

            if (accessToken.HasValue)
            {
                if (string.IsNullOrEmpty(formId))

                {
                    var resp = WxWebApi.SendTemplate(accessToken, openId, templateId, url, data);
                    if (resp.ErrCode == 0)
                    {
                        messageStatus.SetTemplateMap(resp.MsgId.ToString());
                        context.WriteLine("消息发送成功...[MsgId: {0}]", resp.MsgId);
                    }
                    else
                    {
                        messageStatus.SendError(openId);
                        context.WriteLine("消息发送失败:{0}...", resp.ErrMsg);
                        throw new ServiceException(resp.ErrCode, resp.ErrMsg);
                    }
                }
                else
                {
                    var tmpData = new Dictionary <string, WxAppSendTemplateRequest.DataItem>();
                    foreach (var item in data)
                    {
                        tmpData.Add(item.Key, new WxAppSendTemplateRequest.DataItem {
                            Value = item.Value.Value
                        });
                    }
                    var resp = WxAppApi.SendTemplate(accessToken, openId, templateId, url, formId, tmpData);
                    if (resp.ErrCode == 0)
                    {
                        messageStatus.Success(openId);
                        context.WriteLine("消息发送成功...");
                    }
                    else
                    {
                        messageStatus.SendError(openId);
                        context.WriteLine("消息发送失败:{0}...", resp.ErrMsg);
                        throw new ServiceException(resp.ErrCode, resp.ErrMsg);
                    }
                }
            }
            else
            {
                messageStatus.SendError(openId);
                context.WriteLine("消息发送失败:无法获取AccessToken...");
                throw new ServiceException(-1, "消息发送失败:无法获取AccessToken...");
            }
        }
Ejemplo n.º 6
0
        public async Task <IActionResult> ContentWxAppletQrCode([FromBody] ContentPlayBillModel info)
        {
            CommonResult      result            = new CommonResult();
            YuebonCacheHelper yuebonCacheHelper = new YuebonCacheHelper();

            try
            {
                if (info == null)
                {
                    return(ToJsonContent(result));
                }
                string page  = info.Page;   //此接口不可以带参数,如果需要加参数,必须加到scene中
                string scene = info.Scene;; //id=xxxxxx,scene最多允许32个字符
                int    width = string.IsNullOrEmpty(info.Width.ToString()) ? 480 : info.Width.ToInt();

                //图片名称
                string picname       = "ref" + width + GuidUtils.CreateNo() + ".png";
                var    _tempfilepath = "/upload/contentqrcode/";
                var    uploadPath    = _filePath + _tempfilepath;
                if (!Directory.Exists(uploadPath))
                {
                    Directory.CreateDirectory(uploadPath);
                }
                string       qrcodePicPath = uploadPath + picname;//小程序二维码图片
                MemoryStream ms            = new MemoryStream();
                if (!System.IO.File.Exists(qrcodePicPath))
                {
                    var resultImg = await WxAppApi.GetWxaCodeUnlimitAsync(WxOpenAppId, qrcodePicPath, scene, page, width, false, null, true);

                    if (resultImg.errcode == ReturnCode.请求成功)
                    {
                        result.Success = true;
                        result.ErrCode = ErrCode.successCode;
                        result.ResData = _tempfilepath + picname;
                    }
                    else
                    {
                        result.ErrCode = resultImg.errcode.ToString();
                        result.ErrMsg  = resultImg.errmsg;
                    }
                }
                else
                {
                    result.ErrCode = ErrCode.successCode;
                    result.ErrMsg  = _tempfilepath + picname;
                }
            }
            catch (Exception ex)
            {
                Log4NetHelper.Error("代码生成异常", ex);
                result.ErrMsg  = "代码生成异常:" + ex.Message;
                result.ErrCode = ErrCode.failCode;
            }
            return(ToJsonContent(result));
        }
Ejemplo n.º 7
0
        public async Task <IActionResult> DownloadMchQRCode()
        {
            string activityNo = this.GetActivityNo();

            var(mchList, total) = await _operatApplication.MchList(activityNo, "", 1, 1000);

            if (total <= 0)
            {
                return(BadRequest("未找到商户!"));
            }

            string dateName = DateTime.Now.ToString("yyyyMMddHHmmss");
            string filePath = $"{_hostingEnvironment.WebRootPath}/Image/Wish/{dateName}/";

            if (!Directory.Exists(filePath))
            {
                Directory.CreateDirectory(filePath);
            }
            foreach (var data in mchList)
            {
                string path = $@"pages/conversion/index?mchNo={data.mchNo}";

                await WxAppApi.GetWxaCodeAsync(_wxOpenAppId, string.Concat(filePath, data.mchName, ".jpeg"), path);
            }

            string zipPath     = $"/File/Wish/";
            string zipPathName = $"{zipPath}{dateName}.zip";
            string zipPathDir  = _hostingEnvironment.WebRootPath + zipPath;

            if (!Directory.Exists(zipPathDir))
            {
                Directory.CreateDirectory(zipPathDir);
            }
            try
            {
                ZipFile.CreateFromDirectory(filePath, $"{_hostingEnvironment.WebRootPath}{zipPathName}");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return(BadRequest("压缩错误 !"));
            }

            if (Directory.Exists(filePath))
            {
                Directory.Delete(filePath, true);
            }

            return(File(zipPathName, "application/zip", $"商户核销码-{dateName}.zip"));
        }
Ejemplo n.º 8
0
        public ActionResult DownloadWxaCodeUnlimit(int shopId, int conglomerationActivityId)
        {
            var token   = ShopConglomerationOrderOptions.GetAuthorizerAccessToken(db, shopId);
            var dirPath = hostingEnvironment.ContentRootPath + "\\wwwroot\\WxopenCode\\";
            var path    = Path.Combine(dirPath, $"{shopId}_{conglomerationActivityId}.jpg");

            if (!Directory.Exists(dirPath))
            {
                Directory.CreateDirectory(dirPath);
            }
            if (!System.IO.File.Exists(path))
            {
                var jasonresult = WxAppApi.GetWxaCodeUnlimit(token, path, $"{conglomerationActivityId}", "pages/home/OrderDetailsinfo", 210);
            }
            return(File($"\\WxopenCode\\{shopId}_{conglomerationActivityId}.jpg", "image/png", "qr-async.jpg"));
        }
Ejemplo n.º 9
0
        public async Task <IActionResult> ContentWxAppletQrCodeRes([FromQuery] ContentPlayBillModel info)
        {
            CommonResult      result            = new CommonResult();
            YuebonCacheHelper yuebonCacheHelper = new YuebonCacheHelper();
            MemoryStream      ms = new MemoryStream();

            try
            {
                if (info == null)
                {
                    return(ToJsonContent(result));
                }
                string page      = info.Page;   //此接口不可以带参数,如果需要加参数,必须加到scene中
                string scene     = info.Scene;; //id=xxxxxx,scene最多允许32个字符
                int    width     = string.IsNullOrEmpty(info.Width.ToString()) ? 480 : info.Width.ToInt();
                var    resultImg = await WxAppApi.GetWxaCodeUnlimitAsync(WxOpenAppId, ms, scene, page, width);

                ms.Position = 0;
                if (resultImg.errcode == ReturnCode.请求成功)
                {
                    var imgBase64 = Convert.ToBase64String(ms.GetBuffer());
                    result.Success = true;
                    result.ErrCode = ErrCode.successCode;
                    result.ResData = imgBase64;
                }
                else
                {
                    result.ErrCode = resultImg.errcode.ToString();
                    result.ErrMsg  = resultImg.errmsg;
                }
            }
            catch (Exception ex)
            {
                Log4NetHelper.Error("代码生成异常", ex);
                result.ErrMsg  = "代码生成异常:" + ex.Message;
                result.ErrCode = ErrCode.failCode;
            }
            finally{
                ms.Dispose();
            }
            return(ToJsonContent(result));
        }
Ejemplo n.º 10
0
        public override Task <GetOpenIdByCodeResponse> GetOpenId(GetOpenIdByCodeRequest request, ServerCallContext context)
        {
            var resp = new GetOpenIdByCodeResponse();
            var data = WxAppApi.GetSessionKey(_componentAppId, _componentAccessToken, request.AppId, request.Code);

            if (data.ErrCode == 0)
            {
                resp.OpenId    = data.OpenId;
                resp.SecretKey = data.SessionKey;
            }
            else
            {
                resp.Error = new Error
                {
                    ErrCode = data.ErrCode,
                    ErrMsg  = data.ErrMsg
                };
            }
            return(Task.FromResult(resp));
        }
Ejemplo n.º 11
0
        public void CreateWxaQrCodeAsyncTest2()
        {
            var dt1      = DateTime.Now;
            var filePath = "../../Config/qr-async2.jpg";

            Task.Factory.StartNew(async() =>
            {
                var result = await WxAppApi.CreateWxQrCodeAsync(base._appId, filePath, "pages/websocket", 100);
                Assert.AreEqual(ReturnCode.请求成功, result.errcode);
                Assert.IsTrue(File.Exists(filePath));
            });
            var dt2 = DateTime.Now;

            while (!File.Exists(filePath))
            {
            }
            var dt3 = DateTime.Now;

            Console.WriteLine("执行时间:{0}ms", (dt2 - dt1).TotalMilliseconds);
            Console.WriteLine("等待时间:{0}ms", (dt3 - dt2).TotalMilliseconds);
        }
Ejemplo n.º 12
0
        public async Task <IActionResult> GetQRCode(string path)
        {
            //var memberId = this.GetMemberId();
            ////Console.WriteLine("memberId=={1} path1:{0}", path, memberId);
            //var stream = new MemoryStream();
            //path = HttpUtility.UrlDecode(path);
            ////Console.WriteLine("memberId=={1} path2:{0}", path, memberId);
            //await WxAppApi.GetWxaCodeAsync(_wxOpenAppId, stream, path);
            ////必须将流的当前位置置0,否则将引发异常
            ////如果不设置为0,则流的当前位置在流的末端,然后读流就会从末端开始读取,就会引发无效操作异常System.InvalidOperationException
            ////System.InvalidOperationException: Response Content-Length mismatch: too few bytes written (0 of xxxx)
            //stream.Position = 0;
            //return new FileStreamResult(stream, "image/gif");

            path = HttpUtility.UrlDecode(path);
            using (var ms = new MemoryStream())
            {
                await WxAppApi.GetWxaCodeAsync(_wxOpenAppId, ms, path);

                return(File(ms.GetBuffer(), "image/jpeg"));
            }
        }
Ejemplo n.º 13
0
        public async Task <IActionResult> GetQrCode(string sessionId, string useBase64, string codeType = "1")
        {
            var sessionBag = SessionContainer.GetSession(sessionId);

            if (sessionBag == null)
            {
                return(Json(new { success = false, msg = "请先登录!" }));
            }

            MemoryStream ms        = new MemoryStream();
            var          openId    = sessionBag.OpenId;
            var          page      = "pages/QrCode/QrCode";                                                 //此接口不可以带参数,如果需要加参数,必须加到scene中
            var          scene     = $"OpenIdSuffix:{openId.Substring(openId.Length - 10, 10)}#{codeType}"; //储存OpenId后缀,以及codeType。scene最多允许32个字符
            LineColor    lineColor = null;                                                                  //线条颜色

            if (codeType == "2")
            {
                lineColor = new LineColor(221, 51, 238);
            }

            var result = await WxAppApi.GetWxaCodeUnlimitAsync(WxOpenAppId, ms, scene, page, lineColor : lineColor);

            ms.Position = 0;

            if (!useBase64.IsNullOrEmpty())
            {
                //转base64
                var imgBase64 = Convert.ToBase64String(ms.GetBuffer());
                return(Json(new { success = true, msg = imgBase64, page = page }));
            }
            else
            {
                //返回文件流
                return(File(ms, "image/jpeg"));
            }
        }
Ejemplo n.º 14
0
        public IActionResult CheckMsgSecCheck(CheckMsgModel checkMsgModel)
        {
            CommonResult result = new CommonResult();

            try
            {
                if (checkMsgModel != null)
                {
                    WxJsonResult res = WxAppApi.MsgSecCheck(WxOpenAppId, checkMsgModel.ContenText);
                    if (res.errcode == ReturnCode.请求成功)
                    {
                        result.ErrCode = ErrCode.successCode;
                        result.Success = true;
                        result.ResData = res;
                    }
                    else
                    {
                        result.ErrCode = ErrCode.failCode;
                        result.ErrMsg  = "内容含有违法违规内容";
                        result.ResData = res;
                    }
                }
                else
                {
                    result.ErrCode = ErrCode.failCode;
                    result.ErrMsg  = "内容为空";
                }
            }
            catch (Exception ex)
            {
                Log4NetHelper.Error("代码生成异常", ex);
                result.ErrMsg  = "代码生成异常:" + ex.Message;
                result.ErrCode = ErrCode.failCode;
            }
            return(ToJsonContent(result));
        }
Ejemplo n.º 15
0
        public async Task <IActionResult> ContentPlayBillQrCode(ContentPlayBillModel info)
        {
            CommonResult      result            = new CommonResult();
            YuebonCacheHelper yuebonCacheHelper = new YuebonCacheHelper();
            MemoryStream      ms = new MemoryStream();

            try
            {
                if (info == null)
                {
                    return(ToJsonContent(result));
                }
                string page  = info.Page;   //此接口不可以带参数,如果需要加参数,必须加到scene中
                string scene = info.Scene;; //id=xxxxxx,scene最多允许32个字符

                //图片名称
                string picname       = "ref_" + GuidUtils.CreateNo() + ".jpg";
                var    _tempfilepath = "/upload/" + scene + "/contentqrcode/";
                var    uploadPath    = _filePath + _tempfilepath;
                if (!Directory.Exists(uploadPath))
                {
                    Directory.CreateDirectory(uploadPath);
                }
                string qrcodePicPath = uploadPath + picname;//小程序二维码图片
                var    resultImg     = await WxAppApi.GetWxaCodeUnlimitAsync(WxOpenAppId, qrcodePicPath, scene, page, 280);

                if (resultImg.errcode == ReturnCode.请求成功)
                {
                    string picnameh = "c_" + GuidUtils.CreateNo() + ".jpg";
                    var    sor      = _filePath + "/images/";
                    string qrcodebg = "share_content_bg.jpg";

                    Bitmap   cardbmp = new Bitmap(460, 736);
                    Graphics g       = Graphics.FromImage(cardbmp);
                    g.SmoothingMode      = SmoothingMode.HighQuality;; //抗锯齿
                    g.CompositingQuality = CompositingQuality.HighQuality;
                    g.InterpolationMode  = InterpolationMode.High;
                    g.Clear(System.Drawing.Color.White); //白色填充

                    Bitmap bgimg = new Bitmap(460, 736);
                    //如果背景图片存在,
                    bgimg = (Bitmap)Image.FromFile(qrcodebg); //如果存在,读取背景图片
                    g.DrawImage(bgimg, 0, 0, 460, 736);
                    //合成二维码
                    Bitmap productImg = new Bitmap(128, 128);
                    productImg = (Bitmap)Image.FromFile(qrcodePicPath);
                    g.DrawImage(productImg, 276, 580, 128, 128);
                    //合成文字
                    Font nickName = new Font("微软雅黑", 22);
                    Font adtxt    = new Font("微软雅黑", 18);

                    StringFormat stringFormat = new StringFormat(StringFormatFlags.DisplayFormatControl);
                    Brush        fontBrush    = SystemBrushes.ControlText;
                    stringFormat.Alignment     = StringAlignment.Center;
                    stringFormat.LineAlignment = StringAlignment.Center;
                    RectangleF rectangleF = new RectangleF(40, 500, 380, 80);
                    g.DrawString(info.Title, adtxt, fontBrush, rectangleF, stringFormat);
                    cardbmp.Save(uploadPath + picnameh, ImageFormat.Jpeg);
                    cardbmp.Dispose();
                    ms.Dispose();

                    result.ResData = _tempfilepath + picnameh;
                }
                else
                {
                    result.ErrCode = resultImg.errcode.ToString();
                    result.ErrMsg  = resultImg.errmsg;
                }
            }
            catch (Exception ex)
            {
                Log4NetHelper.Error("代码生成异常", ex);
                result.ErrMsg  = "代码生成异常:" + ex.Message;
                result.ErrCode = ErrCode.failCode;
            }
            finally
            {
                ms.Dispose();
            }
            return(ToJsonContent(result));
        }
Ejemplo n.º 16
0
        public async Task <Result> QRCode()
        {
            var user = await _customerManager.GetUserAsync();

            var appId = WechatService.WxOpenAppId;
            var scene = $"id={user.Id}";
            var page  = "pages/index/index";

            try
            {
                var myShareCodePath = Path.Combine("images", "sharecodes", user.Id + ".png");
                var physicalPath    = Path.Combine(_enviromenet.WebRootPath, myShareCodePath);
                var httpPath        = Request.GetHostUrl() + "/" + myShareCodePath.Replace(@"\", "/");
                if (System.IO.File.Exists(physicalPath))
                {
                    return(Result.Ok(httpPath));
                }

                Image  backgroundImg = null;
                string sharePath     = Path.Combine(_enviromenet.WebRootPath, "images/20210107152422.png");
                // var qrCodeImgDemo = Path.Combine(_enviromenet.WebRootPath, "images/qrcode_example.png");
                if (System.IO.File.Exists(sharePath))
                {
                    backgroundImg = Image.Load(sharePath);
                }

                using (var stream = new MemoryStream())
                {
                    var wxResult = await WxAppApi.GetWxaCodeUnlimitAsync(appId, stream, scene, page);

                    if (wxResult.errcode == 0 && stream.Length > 1024)
                    {
                        Image qrCodeImg = Image.Load <Rgba32>(stream.GetBuffer());

                        if (!string.IsNullOrEmpty(user.AvatarUrl))
                        {
                            using (var httpClient = _httpFactory.CreateClient())
                            {
                                var response = await httpClient.GetAsync(user.AvatarUrl);

                                if (response.IsSuccessStatusCode)
                                {
                                    var avatarStream = await response.Content.ReadAsStreamAsync();

                                    var avatarPoint = 120;
                                    var avatarSize  = 190;
                                    var avatarImg   = Image.Load <Rgba32>(avatarStream).Clone(e => e.ConvertToAvatar(new Size(avatarSize, avatarSize), avatarSize / 2));
                                    qrCodeImg.Mutate(e =>
                                    {
                                        e.DrawImage(avatarImg, new Point(avatarPoint, avatarPoint), 1);
                                    });
                                }
                            }
                        }

                        var qrSize  = 211;
                        var qrPoint = new Point(270, 620);
                        qrCodeImg = qrCodeImg.Clone(e => e.Resize(qrSize, qrSize));
                        backgroundImg.Mutate(e =>
                        {
                            e.DrawImage(qrCodeImg, qrPoint, 1);
                        });
                        using (var ms = new MemoryStream())
                        {
                            backgroundImg.Save(physicalPath, new PngEncoder());
                            // backgroundImg.SaveAsPng(ms);
                            // string base64String = $"data:image/png;base64,{Convert.ToBase64String(ms.ToArray())}";
                            // return Result.Ok(base64String);
                        }
                        return(Result.Ok(httpPath));
                    }
                }
            }
            catch (Exception ex)
            {
                return(Result.Fail(ResultCodes.SysError, ex.Message));
            }
            return(Result.Fail(ResultCodes.RequestParamError, "请求生成小程序码失败"));
        }
Ejemplo n.º 17
0
        /// <summary>
        /// session_key 合法性校验
        /// https://mp.weixin.qq.com/debug/wxagame/dev/tutorial/http-signature.html
        /// </summary>
        /// <param name="openId">用户唯一标识符</param>
        /// <param name="sessionKey">用户登录态签名</param>
        /// <param name="buffer">托管数据,类型为字符串,长度不超过1000字节(官方文档没有提供说明,可留空)</param>
        /// <returns></returns>
        public object CheckSession(string openId, string sessionKey, string buffer = null)
        {
            var result = WxAppApi.CheckSession(WxOpenId, openId, sessionKey, buffer);

            return(result.errmsg);
        }
Ejemplo n.º 18
0
        public override Task <GetTemplateResponse> GetTemplate(GetInfoRequest request, ServerCallContext context)
        {
            var resp        = new GetTemplateResponse();
            var accessToken = _redis.StringGet(CacheKey.UserAccessTokenPrefix + request.AppId);

            if (accessToken.HasValue)
            {
                var isWxApp = _redis.KeyExists(CacheKey.UserIsWxAppPrefix + request.AppId);
                if (isWxApp)
                {
                    var data = WxAppApi.GetTemplateList(accessToken);
                    if (data.ErrCode != 0)
                    {
                        resp.Error = new Error
                        {
                            ErrCode = data.ErrCode,
                            ErrMsg  = data.ErrMsg
                        };
                    }
                    else
                    {
                        foreach (var item in data.TemplateList)
                        {
                            resp.TemplateList.Add(new GetTemplateResponse.Types.ListItem
                            {
                                TemplateId = item.TemplateId,
                                Title      = item.Title,
                                Content    = item.Content,
                                Example    = item.Example
                            });
                        }
                    }
                }
                else
                {
                    var data = WxWebApi.GetTemplateList(accessToken);
                    if (data.ErrCode != 0)
                    {
                        resp.Error = new Error
                        {
                            ErrCode = data.ErrCode,
                            ErrMsg  = data.ErrMsg
                        };
                    }
                    else
                    {
                        foreach (var item in data.TemplateList)
                        {
                            resp.TemplateList.Add(new GetTemplateResponse.Types.ListItem
                            {
                                TemplateId      = item.TemplateId,
                                Title           = item.Title,
                                PrimaryIndustry = item.PrimaryIndustry,
                                DeputyIndustry  = item.DeputyIndustry,
                                Content         = item.Content,
                                Example         = item.Example
                            });
                        }
                    }
                }
            }
            else
            {
                resp.Error = new Error
                {
                    ErrCode = 99999,
                    ErrMsg  = "AccessToken Missing"
                };
            }
            return(Task.FromResult(resp));
        }
Ejemplo n.º 19
0
        public async Task <IActionResult> GetReferralQrCode()
        {
            CommonResult result = new CommonResult();

            try
            {
                MemoryStream ms    = new MemoryStream();
                string       page  = "pages/index/index";         //此接口不可以带参数,如果需要加参数,必须加到scene中
                string       scene = "Ref=" + CurrentUser.UserId; //储存OpenId后缀,以及codeType。scene最多允许32个字符

                //图片名称
                string picname       = "ref_" + GuidUtils.CreateNo() + ".jpg";
                var    _tempfilepath = "/upload/" + CurrentUser.UserId + "/qrcode/";
                var    uploadPath    = _filePath + _tempfilepath;
                if (!Directory.Exists(uploadPath))
                {
                    Directory.CreateDirectory(uploadPath);
                }
                string qrcodePicPath = uploadPath + picname;//小程序二维码图片
                var    resultImg     = await WxAppApi.GetWxaCodeUnlimitAsync(WxOpenAppId, qrcodePicPath, scene, page, 280);

                if (resultImg.errcode == ReturnCode.请求成功)
                {
                    string picnameh = "refs_" + CurrentUser.UserId + ".jpg";
                    var    sor      = _filePath + "/images/";
                    string qrcodebg = "share_bg2.jpg";

                    Bitmap   cardbmp = new Bitmap(1080, 1926);
                    Graphics g       = Graphics.FromImage(cardbmp);
                    g.SmoothingMode      = SmoothingMode.HighQuality;; //抗锯齿
                    g.CompositingQuality = CompositingQuality.HighQuality;
                    g.InterpolationMode  = InterpolationMode.High;
                    g.Clear(System.Drawing.Color.White); //白色填充

                    Bitmap bgimg = new Bitmap(1080, 1926);
                    //如果背景图片存在,
                    bgimg = (Bitmap)System.Drawing.Image.FromFile(sor + qrcodebg); //如果存在,读取背景图片
                    g.DrawImage(bgimg, 0, 0, 1080, 1926);
                    //合成二维码
                    Bitmap productImg = new Bitmap(280, 280);
                    productImg = (Bitmap)System.Drawing.Image.FromFile(qrcodePicPath);
                    g.DrawImage(productImg, 713, 1570, 280, 280);
                    //合成头像
                    Bitmap headerimg = new Bitmap(110, 110);
                    if (CurrentUser.HeadIcon.Contains("wx.qlogo.cn"))
                    {
                        headerimg = ImgHelper.GetNetImg(CurrentUser.HeadIcon);
                    }
                    else
                    {
                        headerimg = ImgHelper.GetNetImg(CurrentUser.HeadIcon);
                        //headerimg = (Bitmap)System.Drawing.Image.FromFile(_filePath + CurrentUser.HeadIcon);
                    }
                    headerimg = ImgHelper.CutEllipse(headerimg, new Rectangle(0, 0, 110, 110), new Size(110, 110));
                    g.DrawImage(headerimg, 100, 1505, 110, 110);

                    //合成文字
                    Font nickName = new Font("微软雅黑", 22);
                    Font adtxt    = new Font("微软雅黑", 26);

                    StringFormat StringFormat = new StringFormat(StringFormatFlags.DisplayFormatControl);
                    g.DrawString(CurrentUser.NickName, nickName, new SolidBrush(System.Drawing.Color.LightGray), 100, 1630, StringFormat);
                    g.DrawString("推荐你一个超棒的汽车工程师圈子”", adtxt, new SolidBrush(System.Drawing.Color.Black), 100, 1680, StringFormat);

                    cardbmp.Save(uploadPath + picnameh, ImageFormat.Jpeg);
                    cardbmp.Dispose();

                    result.ResData = _tempfilepath + picnameh;
                }
                else
                {
                    result.ErrCode = resultImg.errcode.ToString();
                    result.ErrMsg  = resultImg.errmsg;
                }
            }
            catch (Exception ex)
            {
                Log4NetHelper.Error("代码生成异常", ex);
                result.ErrMsg  = "代码生成异常:" + ex.Message;
                result.ErrCode = ErrCode.failCode;
            }
            return(ToJsonContent(result));
        }