asp.net mvc PC端二維碼支付實例(微信二維碼支付)

1、微信支付方式介紹瀏覽器

微信提供了各類支付方式,試用於各類不一樣的支付場景,主要有以下幾種:微信

一、刷卡支付mvc

刷卡支付是用戶展現微信錢包內的「刷卡條碼/二維碼」給商戶系統掃描後直接完成支付的模式。主要應用線下面對面收銀的場景。工具

二、掃碼支付

掃碼支付是商戶系統按微信支付協議生成支付二維碼,用戶再用微信「掃一掃」完成支付的模式。該模式適用於PC網站支付、實體店單品或訂單支付、媒體廣告支付等場景。測試

三、公衆號支付

公衆號支付是用戶在微信中打開商戶的H5頁面,商戶在H5頁面經過調用微信支付提供的JSAPI接口調起微信支付模塊完成支付。應用場景有:微信支付

  1. ◆ 用戶在微信公衆帳號內進入商家公衆號,打開某個主頁面,完成支付
  2. ◆ 用戶的好友在朋友圈、聊天窗口等分享商家頁面鏈接,用戶點擊連接打開商家頁面,完成支付
  3. ◆ 將商戶頁面轉換成二維碼,用戶掃描二維碼後在微信瀏覽器中打開頁面後完成支付

四、APP支付

APP支付又稱移動端支付,是商戶經過在移動端應用APP中集成開放SDK調起微信支付模塊完成支付的模式。網站

五、H5支付this

H5支付用於在手機端微信外瀏覽器進行支付,筆者的測試本支付方式在微信內不能使用。url

本文主要講解.net mvc實現掃碼支付方法,具體代碼以下:spa

2、調起支付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");
}

 

3、支付成功後臺處理方法
/// <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());
    }
}

 

4、源碼下載:http://www.kwstu.com/ResourcesView/weixin_201710301127489173

諮詢QQ:806693619

相關文章
相關標籤/搜索