zoukankan      html  css  js  c++  java
  • asp.net mvc PC端二维码支付实例(微信二维码支付)

    一、微信支付方式介绍

    微信提供了各种支付方式,试用于各种不同的支付场景,主要有如下几种:

    1、刷卡支付

    刷卡支付是用户展示微信钱包内的“刷卡条码/二维码”给商户系统扫描后直接完成支付的模式。主要应用线下面对面收银的场景。

    2、扫码支付

    扫码支付是商户系统按微信支付协议生成支付二维码,用户再用微信“扫一扫”完成支付的模式。该模式适用于PC网站支付、实体店单品或订单支付、媒体广告支付等场景。

    3、公众号支付

    公众号支付是用户在微信中打开商户的H5页面,商户在H5页面通过调用微信支付提供的JSAPI接口调起微信支付模块完成支付。应用场景有:

    1. ◆ 用户在微信公众账号内进入商家公众号,打开某个主页面,完成支付
    2. ◆ 用户的好友在朋友圈、聊天窗口等分享商家页面连接,用户点击链接打开商家页面,完成支付
    3. ◆ 将商户页面转换成二维码,用户扫描二维码后在微信浏览器中打开页面后完成支付

    4、APP支付

    APP支付又称移动端支付,是商户通过在移动端应用APP中集成开放SDK调起微信支付模块完成支付的模式。

    5、H5支付

    H5支付用于在手机端微信外浏览器进行支付,笔者的测试本支付方式在微信内不能使用。

    本文主要讲解.net mvc实现扫码支付方法,具体代码如下:

    二、调起支付Controller代码
    /// <summary>
    /// 支付首页
    /// </summary>
    /// <returns></returns>
    public ActionResult Index()
    {
        NativePay nativePay = new NativePay();
        //总金额
        int total_fee = 1;
        //生成订单
        //判断是否有未支付订单
        string productId = "产品ID";
        decimal moeny = Convert.ToDecimal(1);//支付金额
        string orderId = "订单ID";
        //订单描述
        string body = "订单描述";
        //生成扫码支付模式二url
        WxPayData data = new WxPayData();
        data.SetValue("body", "商品描述");//商品描述
        data.SetValue("attach", body);//附加数据
        data.SetValue("out_trade_no", orderId);//随机字符串
        data.SetValue("total_fee", total_fee.ToString());//总金额
        data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));//交易起始时间
        data.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"));//交易结束时间
        data.SetValue("goods_tag", orderId);//商品标记
        data.SetValue("trade_type", "NATIVE");//交易类型
        data.SetValue("product_id", productId);//商品ID
        data.SetValue("notify_url", "http://www.*****.com.cn/Pay/ResultNotify");//支付成功返回调用
        WxPayData result = WxPayApi.UnifiedOrder(data);//调用统一下单接口
        ViewBag.ImageUrl2 = "/Pay/MakeQRCode?data=" + HttpUtility.UrlEncode(result.GetValue("code_url").ToString());
        return View();
    }
    /// <summary>
    /// 生成支付二维码图片
    /// </summary>
    /// <returns></returns>
    public ActionResult MakeQRCode()
    {
        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);
     
            //输出二维码图片
            return File(ms.GetBuffer(), @"image/png");
            //Response.BinaryWrite(ms.GetBuffer());
            //Response.End();
        }
        return Content("Error");
    }
    三、支付成功后台处理方法
    /// <summary>
    /// 支付成功返回处理订单信息
    /// </summary>
    /// <returns></returns>
    public ActionResult ResultNotify()
    {
        WxPayData notifyData = GetNotifyData();
        //检查支付结果中transaction_id是否存在
        if (!notifyData.IsSet("transaction_id"))
        {
            //若transaction_id不存在,则立即返回结果给微信支付后台
            WxPayData res = new WxPayData();
            res.SetValue("return_code", "FAIL");
            res.SetValue("return_msg", "支付结果中微信订单号不存在");
            Log.Error(this.GetType().ToString(), "The Pay result is error : " + res.ToXml());
            return Content("支付结果中微信订单号不存在");
        }
     
        string transaction_id = notifyData.GetValue("transaction_id").ToString();
        string trade_no = notifyData.GetValue("out_trade_no").ToString();
        //查询订单,判断订单真实性
        if (!QueryOrder(transaction_id))
        {
            //若订单查询失败,则立即返回结果给微信支付后台
            WxPayData res = new WxPayData();
            res.SetValue("return_code", "FAIL");
            res.SetValue("return_msg", "订单查询失败");
            Log.Error(this.GetType().ToString(), "Order query failure : " + res.ToXml());
            return Content("订单查询失败");
        }
        //查询订单成功
        else
        {
            WxPayData res = new WxPayData();
            res.SetValue("return_code", "SUCCESS");
            res.SetValue("return_msg", "OK");
            Log.Info(this.GetType().ToString(), "order query success : " + res.ToXml());
            //更新支付状态
             
            return Content("支付成功" + res.ToXml());
        }
    }

    四、源码下载:http://www.kwstu.com/ResourcesView/weixin_201710301127489173

    咨询QQ:806693619

  • 相关阅读:
    HDU 2196 Computer
    HDU 1520 Anniversary party
    POJ 1217 FOUR QUARTERS
    POJ 2184 Cow Exhibition
    HDU 2639 Bone Collector II
    POJ 3181 Dollar Dayz
    POJ 1787 Charlie's Change
    POJ 2063 Investment
    HDU 1114 Piggy-Bank
    Lca hdu 2874 Connections between cities
  • 原文地址:https://www.cnblogs.com/kwstu/p/7797384.html
Copyright © 2011-2022 走看看