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

原文地址:https://www.cnblogs.com/kwstu/p/7797384.html