WeChat-扫码支付

官方文档API: 打开连接

主要实现功能,网站上调起 微信支付二维码图片。

所需引用基类API:Data.cs、WxPayApi.cs、HttpService.cs、Config.cs、ThoughtWorks.QRCode.dll、可以到我github上   下载 

1、C#服务端代码:直接获取你需要的二维码链接或者图片

/// <summary>
    /// 微信二维码支付
    /// </summary>
    private void WeChat()
    {
        Orderid = GetOutTradeNo();//随机数字
        WxPayData data = new WxPayData();
        data.SetValue("body", GoodsName);//商品描述
        data.SetValue("attach", Gamename);//附加数据
        data.SetValue("out_trade_no", Orderid);//随机字符串
        data.SetValue("total_fee", Price);//总金额 (分)正式
        data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));//交易起始时间
        data.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"));//交易结束时间
        data.SetValue("goods_tag", "cyyx");//商品标记
        data.SetValue("trade_type", "NATIVE");//交易类型
        data.SetValue("product_id", "100");//商品ID
        data.SetValue("notify_url", "http://xxxxx/Pay/WeChatPay/Notify.aspx");//回调地址

        WxPayData result = WxPayApi.UnifiedOrder(data);//调用统一下单接口
        string returncode = result.GetValue("return_code").ToString();
        string returnmsg = result.GetValue("return_msg").ToString();
        string returndata;//二维码结果,以下分为两种模式1、链接  2、图片。
        if (returncode == "SUCCESS" )
        {
            //returndata = "QRcode.aspx?data=" + result.GetValue("code_url");//获得统一下单接口返回的二维码链接---QRcode.aspx代码在下面
            string codeurl = result.GetValue("code_url").ToString();
            returndata = CreateImg(codeurl, Orderid);//根据二维码链接生成本地图片并展示
            Json = "{\"code\":\"1\",\"data\":\"" + returndata + "\"}";
        }
        else
        {
            returndata = returnmsg;
            Json = "{\"code\":\"0\",\"data\":\"" + returndata + "\"}";
        }
    }
    
    /// <summary>
    /// 生成图片
    /// </summary>
    /// <param name="codeurl">二维码链接</param>
    /// <returns></returns>
    private string CreateImg(string codeurl, string orderid)
    {
        QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
        qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
        qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
        qrCodeEncoder.QRCodeVersion = 0;
        qrCodeEncoder.QRCodeScale = 4;
        //将字符串生成二维码图片
        System.Drawing.Image image = qrCodeEncoder.Encode(codeurl,Encoding.Default);
        string filename = orderid + ".jpg";//DateTime.Now.ToString("yyyymmddhhmmssfff") + ".jpg";
        string path1 = Server.MapPath(@"~\upload\QRCode");
        if (!Directory.Exists(path1))
        {
            Directory.CreateDirectory(path1);
        }
        string filepath = Server.MapPath(@"~\upload\QRCode") + "\\" + filename;
        FileStream fs = new FileStream(filepath, FileMode.OpenOrCreate, FileAccess.Write);
        image.Save(fs, ImageFormat.Jpeg);
        fs.Close();
        image.Dispose();
        string imageUrl = "/upload/QRCode/" + filename;
        return imageUrl;
    }

2、QRcode.aspx页面代码:

if (!string.IsNullOrEmpty(Request.QueryString["data"]))
        {
            string str = Request.QueryString["data"];
            //初始化二维码生成工具
            QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
            qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
            qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
            qrCodeEncoder.QRCodeVersion = 0;
            qrCodeEncoder.QRCodeScale = 4;
            //将字符串生成二维码图片
            Bitmap image = qrCodeEncoder.Encode(str, Encoding.Default);
            //保存为PNG到内存流  
            MemoryStream ms = new MemoryStream();
            image.Save(ms, ImageFormat.Png);
            //输出二维码图片
            Response.BinaryWrite(ms.GetBuffer());
            Response.End();
        }

 

posted on 2017-04-19 14:27  o笨小孩o  阅读(814)  评论(0编辑  收藏  举报