Browse Source

1、增加获取不受限制的小程序码的接口

胖太乙 1 year ago
parent
commit
ba1d18b130

+ 12 - 1
Admin.NET/Admin.NET.Core/Service/Wechat/Dto/WxOpenInput.cs

@@ -118,7 +118,7 @@ public class AddSubscribeMessageTemplateInput
 }
 
 /// <summary>
-/// 生成带参数小程序二维码
+/// 生成带参数小程序二维码(总共生成的码数量限制为 100,000)
 /// </summary>
 public class GenerateQRImageInput
 {
@@ -136,4 +136,15 @@ public class GenerateQRImageInput
     /// 图片宽度 默认430
     /// </summary>
     public int Width { get; set; } = 430;
+}
+
+/// <summary>
+/// 生成带参数小程序二维码(获取不受限制的小程序码)
+/// </summary>
+public class GenerateQRImageUnLimitInput : GenerateQRImageInput
+{
+    /// <summary>
+    /// 二维码携带的参数 eg:a=1(最大32个可见字符,只支持数字,大小写英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~)
+    /// </summary>
+    public string Scene { get; set; }
 }

+ 80 - 1
Admin.NET/Admin.NET.Core/Service/Wechat/SysWxOpenService.cs

@@ -248,7 +248,7 @@ public class SysWxOpenService : IDynamicApiController, ITransient
     }
 
     /// <summary>
-    /// 生成二维码
+    /// 生成带参数小程序二维码(总共生成的码数量限制为 100,000)
     /// </summary>
     /// <param name="input"> 扫码进入的小程序页面路径,最大长度 128 个字符,不能为空; eg: pages / index ? id = AY000001 </param>
     /// <returns></returns>
@@ -318,6 +318,85 @@ public class SysWxOpenService : IDynamicApiController, ITransient
         return generateQRImageOutInput;
     }
 
+    /// <summary>
+    /// 生成二维码(获取不受限制的小程序码)
+    /// </summary>
+    /// <param name="input">入参</param>
+    /// <returns></returns>
+    [DisplayName("生成小程序二维码")]
+    [ApiDescriptionSettings(Name = "GenerateQRImageUnlimit")]
+    public async Task<GenerateQRImageOutput> GenerateQRImageUnlimitAsync(GenerateQRImageUnLimitInput input)
+    {
+        GenerateQRImageOutput generateQRImageOutInput = new GenerateQRImageOutput();
+        if (input.PagePath.IsNullOrEmpty())
+        {
+            generateQRImageOutInput.Message = $"生成失败,页面路径不能为空";
+            return generateQRImageOutInput;
+        }
+
+        if (input.Scene.Length > 32)
+        {
+            generateQRImageOutInput.Message = $"生成失败,携带的参数长度超过限制";
+            return generateQRImageOutInput;
+        }
+
+        if (input.ImageName.IsNullOrEmpty())
+        {
+            input.ImageName = DateTime.Now.ToString("yyyyMMddHHmmss");
+        }
+
+        var accessToken = await GetCgibinToken();
+        var request = new WxaGetWxaCodeRequest
+        {
+            AccessToken = accessToken,
+            Width = input.Width,
+            PagePath = input.PagePath,
+
+
+        };
+        var response = await _wechatApiClient.ExecuteWxaGetWxaCodeAsync(request);
+
+        if (response.IsSuccessful())
+        {
+            var QRImagePath = App.GetConfig<string>("Wechat:QRImagePath");
+            var relativeImgPath = string.Empty;
+
+            // 判断路径是绝对路径还是相对路径
+            var isPathRooted = Path.IsPathRooted(QRImagePath);
+            if (!isPathRooted)
+            {
+                // 相对路径
+                relativeImgPath = string.IsNullOrEmpty(QRImagePath) ? Path.Combine("upload", "QRImageUnLimit") : QRImagePath;
+                QRImagePath = Path.Combine(App.WebHostEnvironment.WebRootPath, relativeImgPath);
+            }
+
+            //判断文件存放路径是否存在
+            if (!Directory.Exists(QRImagePath))
+            {
+                Directory.CreateDirectory(QRImagePath);
+            }
+            // 将二维码图片数据保存为文件
+            var fileName = $"{input.ImageName.ToUpper()}.png";
+            var filePath = Path.Combine(QRImagePath, fileName);
+            if (File.Exists(filePath))
+            {
+                File.Delete(filePath);
+            }
+            File.WriteAllBytes(filePath, response.GetRawBytes());
+
+            generateQRImageOutInput.Success = true;
+            generateQRImageOutInput.ImgPath = filePath;
+            generateQRImageOutInput.RelativeImgPath = Path.Combine(relativeImgPath, fileName);
+            generateQRImageOutInput.Message = "生成成功";
+        }
+        else
+        {
+            // 处理错误情况
+            generateQRImageOutInput.Message = $"生成失败 错误代码:{response.ErrorCode}  错误描述:{response.ErrorMessage}";
+        }
+        return generateQRImageOutInput;
+    }
+
     /// <summary>
     /// 获取Access_token
     /// </summary>