便捷繳費 支付 (一)

           互聯網的時代,一時一刻都沒有停止過,一直都在進步,隨着社會的需要,科技的發展。各個方面的各個崗位的需要,沒有什麼技術實現不了的。爲了更便捷、服務的時代。一切達到簡便、快捷、易上手。例如 :“中國建設銀行校園繳費平臺”。PC端繳費、微信公衆號繳費都是太拘束了。客戶說 :我就想要跟他差不多的,各個商戶生成自己的一個二維碼,如果客戶用微信掃一掃默認就是微信支付、用支付寶掃默認就是支付寶支付、用瀏覽器掃 到支付那一頁了下面列表可以選擇支付寶、微信、銀聯、等等各個通道支付。   嗯  聽着是可以滿足客戶需求的  但  但 可能花點時間 

 

 整理整理思路 ,想倒是想的挺簡單挺美好來着,但是到某一步也許就卡的一下,無論怎麼樣 一切都是能解決滴 ,沒有什麼能夠阻擋 。。。

創建生成連接二維碼

 (1).可以放到公共的類裏啦

  public class QRCodeHandler
    {
        /// <summary>
        /// 創建生成二維碼
        /// </summary>
        /// <param name="Dz">跳轉連接地址</param>
        /// <param name="Tp">中間顯示的Logo</param>
        /// <returns></returns>
        ///   也可以是Image 類型
        public static byte[] CreateQRcode(string Dz, string Tp)
        {

            QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
            qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;//二維碼編碼(Byte、AlphaNumeric、Numeric)
            qrCodeEncoder.QRCodeScale = 4;//二維碼尺寸(Version爲0時,1:26x26,每加1寬和高各加25
            qrCodeEncoder.QRCodeVersion = 8;//二維碼密集度0-40
            qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;//二維碼糾錯能力(L:7% M:15% Q:25% H:30%)
            Image card = qrCodeEncoder.Encode(Dz, Encoding.UTF8);
            System.IO.MemoryStream MStream = new System.IO.MemoryStream();
            card.Save(MStream, System.Drawing.Imaging.ImageFormat.Png);

            System.IO.MemoryStream MStream1 = new System.IO.MemoryStream();
            CombinImage(card, Tp).Save(MStream1, System.Drawing.Imaging.ImageFormat.Png);

            MStream.Dispose();
            MStream1.Dispose();

            MemoryStream ms = new MemoryStream();
            card.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);


            //return card;  Image類型的時候返回

            return ms.ToArray(); //返回 byte[]類型

        }
        /// <summary>   
        /// 調用此函數後使此兩種圖片合併,類似相冊,有個   
        /// 背景圖,中間貼自己的目標圖片   
        /// </summary>   
        /// <param name="imgBack">粘貼的源圖片</param>   
        /// <param name="destImg">粘貼的目標圖片</param>   
        public static Image CombinImage(Image imgBack, string destImg)
        {
            Image img = Image.FromFile(destImg);        //照片圖片     
            if (img.Height != 65 || img.Width != 65)
            {
                img = KiResizeImage(img, 65, 65, 0);
            }
            Graphics g = Graphics.FromImage(imgBack);

            g.DrawImage(imgBack, 0, 0, imgBack.Width, imgBack.Height); 
View Code

 (2).前端調用後臺生成商戶需要的連接地址二維碼,EWMWxItem中的w、h 是設置二維碼裏面logo的寬高

   //頁面
<ul class="ui-list ui-list-one ui-list-link ui-border-tb">

    @foreach (var m in Model.sources)
    {
        var url = Url.Action("WxItem", new { id = m.ID });
        <li class="ui-border-t">
            <a class="ui-list-info" href="@url">
                <h4 class="ui-nowrap">@m.MC</h4>
                <img src="@Url.Action("EWMWxItem", "Home", new { id = m.ID, logo = m.Logo, dz= url })" />
                <div class="ui-txt-info"></div>
            </a>
        </li>
    }

</ul>
  //後臺
 [Description("獲取二維碼")]
   public ActionResult EWMWxItem(int id, string logo, string dz, int? w, int? h)
        {
            try
            {
                w = 50; h = 50;
                if (string.IsNullOrWhiteSpace(logo))
                    return HttpNotFound();
                logo = logo.Replace("../", "");
                var t = "~/" + logo;
                var logourl = Server.MapPath(t);
                var startIndex = logourl.LastIndexOf('.');
                List<string> exs = new List<string> { ".JPG", ".JPEG", ".PNG", ".GIF", ".ICO", ".BMP" };
                if (w.HasValue || h.HasValue)
                {
                    var tp = string.Format("{0}.{1}_{2}.jpg", logourl, w, h);
                    if (!System.IO.File.Exists(tp))
                    {
                        Db.Charge.FileHelper.PicFile.MakeThumbnail(logourl, tp, w, h);
                    }
                    logourl = tp;
                }
                //二維碼跳轉的連接地址
                var Url = Request.Url.Scheme + "://" + Request.Url.Authority + dz;
                var EWMLogo = QRCodeHandler.CreateQRcode(Url, logourl);

                return File(EWMLogo, @"image/jpeg");
            }
            catch (Exception ex)
            {
                Db.Charge.LogHelper.WriteLogs.LogN("EWMWxItem", ex.ToString());
                return HttpNotFound();
            }

        }
View Code

如果二維碼返回 Image類型,後臺可以這樣處理

        // Image類型
        public class ImageResult : ActionResult
        {
            public ImageResult() { }
            public Image Image { get; set; }
            public ImageFormat ImageFormat { get; set; }
            public override void ExecuteResult(ControllerContext context)
            {
                // 驗證屬性
                if (Image == null)
                {
                    throw new ArgumentNullException("Image");
                }
                if (ImageFormat == null)
                {
                    throw new ArgumentNullException("ImageFormat");
                }
                //輸出
                context.HttpContext.Response.Clear();
                if (ImageFormat.Equals(ImageFormat.Bmp)) context.HttpContext.Response.ContentType = "image/bmp";
                if (ImageFormat.Equals(ImageFormat.Gif)) context.HttpContext.Response.ContentType = "image/gif";
                if (ImageFormat.Equals(ImageFormat.Icon)) context.HttpContext.Response.ContentType = "image/vnd.microsoft.icon";
                if (ImageFormat.Equals(ImageFormat.Jpeg)) context.HttpContext.Response.ContentType = "image/jpeg";
                if (ImageFormat.Equals(ImageFormat.Png)) context.HttpContext.Response.ContentType = "image/png";
                if (ImageFormat.Equals(ImageFormat.Tiff)) context.HttpContext.Response.ContentType = "image/tiff";
                if (ImageFormat.Equals(ImageFormat.Wmf)) context.HttpContext.Response.ContentType = "image/wmf";
                Image.Save(context.HttpContext.Response.OutputStream, ImageFormat);
            }
        }

       public ActionResult EWMWxItem(int id, string logo, string dz, int? w, int? h)
        {

            //二維碼跳轉的連接地址
            var Url = Request.Url.Scheme + "://" + Request.Url.Authority + dz;
            var EWMLogo = QRCodeHandler.CreateQRcode(Url, logo);
            return new ImageResult()
            {
                Image = EWMLogo,
                ImageFormat = System.Drawing.Imaging.ImageFormat.Jpeg
            };
        }
View Code

 看前臺頁面需要什麼類型的數據顯示,無論是哪個類型的 都可以顯示在頁面。

 

 

 哇 ~    顯示出來了耶 ,但  但是 這個圖片 有點大啊,咦  不管了 先掃一下吧  哈哈哈 跳到了

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章