自定义小程序码

官方地址:微信小程序码无限制

 #region "获取小程序二维码"
        /// <summary>
        /// 获取小程序二维码
        /// </summary>
        /// <param name="scene">参数</param>
        /// <param name="page">跳转的小程序页面(必须是已发布的)例如 pages/index/index, 根路径前不要填加 /,为空默认跳主页面</param>
        /// <param name="width">二维码的宽度,单位 px,最小 280px,最大 1280px</param>
        /// <returns></returns>
        [HttpGet]
        public ResultClass<string> GetMiniProgramQRCode(string scene= "", string page = "", int width = 430)
        {
            ResultClass<string> ret = new ResultClass<string>();
            try
            {
                if (string.IsNullOrEmpty(scene)) { throw new Exception("参数空值!"); }
                string strReturn = string.Empty;
                string token = GetAccess_Token();
                string url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + token;
                //https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.getUnlimited.html
                string temp = "{\"scene\":\"" + scene+ "\",\"page\":\"" + page + "\",\"width\":" + width + "}";
                byte[] imgStream = GetResponseDataByte(temp, @url);
                ret = new ImageUpload.ImageUploadController().UpLoadImage(imgStream);
            }
            catch (Exception ex)
            {
                ret.Result = false;
                ret.ErrorMessage = ex.Message;
            }
            return ret;
        }
        /// <summary>  
        /// 返回字节数据  
        /// </summary>  
        /// <param name="JSONData">要处理的JSON数据</param>  
        /// <param name="Url">要提交的URL</param>  
        /// <returns></returns>  
        private byte[] GetResponseDataByte(string JSONData, string Url)
        {
            byte[] bytes = Encoding.UTF8.GetBytes(JSONData);
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
            request.Method = "POST";
            request.ContentLength = bytes.Length;
            request.ContentType = "json";
            Stream reqstream = request.GetRequestStream();
            reqstream.Write(bytes, 0, bytes.Length);

            //声明一个HttpWebRequest请求  
            request.Timeout = 90000;
            //设置连接超时时间  
            request.Headers.Set("Pragma", "no-cache");
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream streamReceive = response.GetResponseStream();
            byte[] img = StreamToBytes(streamReceive);
            streamReceive.Dispose();
            return img;
        }
        /// <summary>
        /// 将 Stream 转成 byte[]
        /// </summary>
        /// <param name="stream"></param>
        /// <returns></returns>
        private static byte[] StreamToBytes(Stream stream)
        {
            List<byte> bytes = new List<byte>();
            int temp = stream.ReadByte();
            while (temp != -1)
            {
                bytes.Add((byte)temp);
                temp = stream.ReadByte();
            }
            return bytes.ToArray();
        }
        /// <summary>
        /// 获取Access_Token
        /// </summary>
        /// <returns></returns>
        private string GetAccess_Token()
        {

            string apiurl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=小程序的appid&secret=小程序的secret";
            WebRequest request = WebRequest.Create(@apiurl);
            request.Method = "POST";
            WebResponse response = request.GetResponse();
            Stream stream = response.GetResponseStream();
            Encoding encode = Encoding.UTF8;
            StreamReader reader = new StreamReader(stream, encode);
            string detail = reader.ReadToEnd();
            var jd = JsonConvert.DeserializeObject<WXApi>(detail);
            return (String)jd.access_token;
        }

        /// <summary>  
        /// 返回JSon数据  
        /// </summary>  
        /// <param name="JSONData">要处理的JSON数据</param>  
        /// <param name="Url">要提交的URL</param>  
        /// <returns>返回的JSON处理字符串</returns>  
        private string GetResponseData(string JSONData, string Url)
        {
            byte[] bytes = Encoding.UTF8.GetBytes(JSONData);
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
            request.Method = "POST";
            request.ContentLength = bytes.Length;
            request.ContentType = "json";
            Stream reqstream = request.GetRequestStream();
            reqstream.Write(bytes, 0, bytes.Length);

            //声明一个HttpWebRequest请求  
            request.Timeout = 90000;
            //设置连接超时时间  
            request.Headers.Set("Pragma", "no-cache");
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream streamReceive = response.GetResponseStream();
            Encoding encoding = Encoding.UTF8;

            StreamReader streamReader = new StreamReader(streamReceive, encoding);
            string strResult = streamReader.ReadToEnd();
            streamReceive.Dispose();
            streamReader.Dispose();
            return strResult;
        }
        #endregion


        #region "保存图片"
        /// <summary>
        /// 保存图片
        /// </summary>
        /// <param name="imgStream"></param>
        /// <returns></returns>
        [HttpPost]
        public ResultClass<string> UpLoadImage(byte[] imgStream)
        {
            string serverurl = ConfigurationManager.AppSettings["ServerUrl"];
            ResultClass<string> ret = new ResultClass<string>();
            try
            {
                string LocalPath = GetPath();
                string Name = DateTime.Now.ToString("yyyyMMddHHmmssfff") + "_" + (new System.Random()).Next(10000, 99999).ToString();
                if (System.IO.Directory.Exists(LocalPath) == false)
                {
                    System.IO.Directory.CreateDirectory(LocalPath);
                }
                MemoryStream stream = new MemoryStream(imgStream);
                Bitmap img = new Bitmap(stream);

                string fullName = LocalPath + "\\" + Name + ".jpg";

                img.Save(fullName);
                stream.Close();
                stream.Dispose();
                stream = null;
                img.Dispose();
                img = null;
                string surlPath = serverurl + "ClientImages/" + System.DateTime.Now.ToString("yyyyMMdd") + @"/" + Name + ".jpg";
                ret.Result = true;
                ret.ResultData = surlPath;
            }
            catch (Exception ex)
            {
                ret.Result = false;
                ret.ErrorMessage = ex.Message;
            }
            return ret;
        }
private string GetPath()
        {
            string path = System.Web.HttpContext.Current.Server.MapPath("~/ClientImages/");
            string np = System.DateTime.Now.ToString("yyyyMMdd");
            path = path + np + @"\";
            if (System.IO.Directory.Exists(path) == false)
            {
                System.IO.Directory.CreateDirectory(path);
            }
            return path;
        }
        #endregion

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自定义页面,你需要先使用微信小程序提供的 wx.scanCode 接口进行二维扫描功能的实现。然后,你可以在扫成功后,跳转到自定义的页面进行显示。 以下是实现自定义页面的基本步骤: 1. 在 app.json 文件中配置自定义页面的路径。 ```json { "pages": [ "pages/scan/scan", "pages/custom/custom" ] } ``` 2. 创建自定义页面的代文件。 在 pages 目录下创建一个名为 custom 的目录,并在该目录下创建一个名为 custom.wxml 的文件,用于编写自定义页面的布局结构。然后在 custom 目录下创建一个名为 custom.js 的文件,用于编写自定义页面的逻辑代。 3. 在扫成功后,跳转到自定义页面。 在扫成功后,可以使用 wx.navigateTo 方法跳转到自定义页面。在跳转时,可以通过 URL 参数传递扫结果或其他需要的信息。 ```javascript wx.scanCode({ success: (res) => { wx.navigateTo({ url: '/pages/custom/custom?qrcode=' + res.result }) } }) ``` 4. 在自定义页面中获取 URL 参数。 在自定义页面中,可以通过 onLoad 生命周期获取传递的 URL 参数。在 onLoad 中使用 options 参数获取 URL 参数。 ```javascript onLoad: function (options) { console.log(options.qrcode) } ``` 5. 在自定义页面中显示扫结果。 在自定义页面中,可以使用传递的 URL 参数或其他方式获取扫结果,并在页面中显示。可以使用 setData 方法更新页面数据。 ```javascript onLoad: function (options) { this.setData({ qrcode: options.qrcode }) } ``` 在 custom.wxml 中使用 {{}} 语法绑定数据,显示扫结果。 ```html <view>{{qrcode}}</view> ``` 这样就可以实现自定义页面的功能了。需要注意的是,在自定义页面中,还可以添加其他功能和样式,使页面更加丰富和美观。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值