heyuntao
2023-05-05 cc09b6fe6ffac34a4eeeb26d313b187713cae0de
Api.Operater/Controllers/TkUserinfoController.cs
@@ -30,6 +30,7 @@
using CommonUtil.Security;
using CommonUtil.Top;
using CommonUtil.Db;
using System.Text;
namespace Api.Operater.Controllers
{
@@ -336,35 +337,6 @@
        }
        /// <summary>
        ///  查询我的订单明细接口
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [HttpPost]
        [ProducesDefaultResponseType(typeof(GetTkTradeListResponse))]
        public IActionResult GetTkTradeList([FromBody] GetTkTradeListRequest request)
        {
            //分页按时间查询账单明细
            var whereexpress = Expressionable.Create<TkTrade>()
                .And(t => t.Memberid == request.Id.ToString())
                .AndIF(!request.stime.IsNull() && request.stime > DateTime.Parse("1900-01-01 00:00:00"), t => t.Created >= request.stime)
                .AndIF(!request.etime.IsNull() && request.etime > DateTime.Parse("1900-01-01 00:00:00"), t => t.Created <= request.etime)
                .AndIF(!request.tid.IsNullOrEmpty(), t => t.Tid == request.tid)
                .ToExpression();
            int totalcount = 0;
            var orderlist = new TkTradeDAL().ListPageGet(whereexpress, t => t.Created, DbEnum.OrderType.Desc, request.PageNo, request.PageSize, ref totalcount);
            GetTkTradeListResponse getTkOrderRecord = new GetTkTradeListResponse();
            if (orderlist.Count > 0)
            {
                getTkOrderRecord.TkTrades = orderlist;
                getTkOrderRecord.PageNo = request.PageNo;
                getTkOrderRecord.PageSize = request.PageSize;
                getTkOrderRecord.TotalCount = totalcount;
            }
            return Success(getTkOrderRecord);
        }
        /// <summary>
        /// 生成海报二维码
        /// </summary>
        /// <param name="request"></param>
@@ -372,35 +344,57 @@
        [HttpPost]
        public IActionResult CreateQrCode([FromBody] CreateQrCodeRequest request)
        {
            int x = 231; int y = 474; int width = 305; int height=336;
            string posterPath = Path.Combine("", @"D:\poster.png"); // 替换为你的实际海报的绝对路径
            // 生成二维码
            QRCodeGenerator qrGenerator = new QRCodeGenerator();
            QRCodeData qrCodeData = qrGenerator.CreateQrCode(request.url, QRCodeGenerator.ECCLevel.Q);
            QRCode qrCode = new QRCode(qrCodeData);
            Bitmap qrCodeImage = qrCode.GetGraphic(20); // 调整 20 以控制二维码的大小
            // 在海报中绘制二维码
            using (var posterImage = new Bitmap(posterPath))
            using (var graphics = Graphics.FromImage(posterImage))
            //获取access_token
            string access_token = string.Empty;
            MySqlHelper dbmain = new MySqlHelper();
            DataTable dt = dbmain.ExecuteDataTable("select fx_wx_token from appset");
            if (dt != null && dt.Rows.Count > 0)
            {
                // 将二维码绘制在指定区域
                RectangleF qrCodeArea = new RectangleF(x, y, width, height);
                graphics.DrawImage(qrCodeImage, qrCodeArea);
                access_token = dt.Rows[0]["fx_wx_token"].ToString();
               string url = $"https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token={access_token}";
                WebUtil util = new WebUtil();
                Dictionary<string, string> dic = new Dictionary<string, string>();
                dic.Add("scene", $"invite_code={request.invite_code}");
                // var result = Newtonsoft.Json.JsonConvert.DeserializeObject<GetwxacodeunlimitResponse>(PostJson(url, dic));
                var result = Post4Download(url, dic);
                // 将绘制后的海报保存为内存流
                using (var memoryStream = new MemoryStream())
                //if (result.errcode != "0")
                //{
                //    return Error(result.errmsg);
                //}
                byte[] imagebytes =result.Item3;
                Bitmap qrCodeImage = new Bitmap(new MemoryStream(imagebytes));
                int x = 430; int y = 1513; int width = 361; int height = 365;
                string posterPath = Path.Combine("", @"D:\poster.png"); // 替换为你的实际海报的绝对路径
                // 在海报中绘制二维码
                using (var posterImage = new Bitmap(posterPath))
                using (var graphics = Graphics.FromImage(posterImage))
                {
                    posterImage.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Png);
                    // 将二维码绘制在指定区域
                    RectangleF qrCodeArea = new RectangleF(x, y, width, height);
                    graphics.DrawImage(qrCodeImage, qrCodeArea);
                    // 将内存流转换为字节数组
                    byte[] imageBytes = memoryStream.ToArray();
                    // 将绘制后的海报保存为内存流
                    using (var memoryStream = new MemoryStream())
                    {
                        posterImage.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Png);
                    // 返回图像给前端
                    return File(imageBytes, "image/png");
                        // 将内存流转换为字节数组
                        byte[] imageBytes = memoryStream.ToArray();
                        // 返回图像给前端
                        return File(imageBytes, "image/png");
                    }
                }
            }
            else
            {
                return Error("获取access_token失败");
            }
        }
        /// <summary>
@@ -428,5 +422,68 @@
                return result;
            }
        }
        public static Tuple<bool, string, byte[]> Post4Download(string postUrl, object dataObj)
        {
            try
            {
                var json = JsonConvert.SerializeObject(dataObj, new JsonSerializerSettings { DefaultValueHandling = DefaultValueHandling.Ignore, NullValueHandling = NullValueHandling.Ignore });
                var byteArray = Encoding.UTF8.GetBytes(json);
                var request = (HttpWebRequest)WebRequest.Create(postUrl);
                request.Method = "POST";
                request.KeepAlive = false;
                request.ProtocolVersion = HttpVersion.Version11;
                request.Timeout = -1;
                request.ReadWriteTimeout = -1;
                request.ContentType = "application/json;charset=utf-8";
                request.ContentLength = byteArray.Length;
                request.ServicePoint.Expect100Continue = false;
                using (var stream = request.GetRequestStream())
                {
                    stream.Write(byteArray, 0, byteArray.Length);
                    stream.Flush();
                }
                //接收返回信息
                var message = "";
                byte[] buf = null;
                using (var response = (HttpWebResponse)request.GetResponse())
                {
                    if (response.StatusCode == HttpStatusCode.OK)
                    {
                        buf = new byte[response.ContentLength];
                        var responseStream = response.GetResponseStream();
                        if (responseStream != null)
                        {
                            var offset = 0;
                            do
                            {
                                var count = responseStream.Read(buf, offset, buf.Length - offset);
                                offset += count;
                            } while (offset < buf.Length);
                        }
                        else
                        {
                            message = "fail, responseStream is null.";
                        }
                    }
                    else
                    {
                        message = $"fail, response.StatusCode is {response.StatusCode}.";
                    }
                }
                request.Abort();
                return new Tuple<bool, string, byte[]>(!message.StartsWith("fail, "), message, buf);
            }
            catch (Exception ex)
            {
                return new Tuple<bool, string, byte[]>(false, $"fail, {ex.Message}", null);
            }
        }
    }
}