C# MVC 微信支付教程系列之扫码支付代码实例

C# MVC 微信支付教程系列之扫码支付代码实例

简介

本教程将带你实现使用C# MVC框架接入微信扫码支付的流程。其中,包括了微信支付相关的基本知识和两个代码示例,帮助你快速理解和实现微信支付的流程。

前置知识

  • 对微信支付相关概念的理解
  • 了解C# MVC框架

微信扫码支付流程

微信扫码支付流程如下:

  1. 商户后台生成订单并向微信发起支付请求
  2. 微信返回一个支付二维码链接
  3. 用户使用微信扫一扫功能扫描二维码,进入微信支付页面
  4. 用户输入支付密码确认支付
  5. 微信将支付结果通知给商户

示例1:C# MVC 接入微信扫码支付(传统模式)

第一步:获取统一下单信息

下面是发起支付请求的代码示例:

//生成微信支付订单号
var outTradeNo = "XXXXXXXXXXXXX";

//支付金额,单位为分
var totalFee = 1;

//用户的真实IP地址,用于调起用户端的支付功能
var spbillCreateIp = Request.UserHostAddress;

//设置一些订单参数
var body = "订单描述";
var tradeType = "NATIVE";
var productId = "1";

//生成签名
var nonceStr = Guid.NewGuid().ToString("N");
var timeStamp = TenpayUtil.GetTimestamp();
var sign = TenpayUtil.GetSign(queryString, TenpayConfig.AppId, TenpayConfig.MchId, 
nonceStr, timeStamp, TenpayConfig.ApiKey);

//统一下单信息
var unifiedOrder = new WxPayData();
unifiedOrder.SetValue("appid", TenpayConfig.AppId);
unifiedOrder.SetValue("mch_id", TenpayConfig.MchId);
unifiedOrder.SetValue("nonce_str", nonceStr);
unifiedOrder.SetValue("body", body);
unifiedOrder.SetValue("out_trade_no", outTradeNo);
unifiedOrder.SetValue("total_fee", totalFee);
unifiedOrder.SetValue("spbill_create_ip", spbillCreateIp);
unifiedOrder.SetValue("notify_url", TenpayConfig.NotifyUrl);
unifiedOrder.SetValue("trade_type", tradeType);
unifiedOrder.SetValue("product_id", productId);
unifiedOrder.SetValue("sign", sign);

//统一下单,并获取微信支付返回的二维码链接
var payUrl = TenpayUtil.GetPayUrl(unifiedOrder);

第二步:上传图片并获取二维码

下面是生成二维码的代码示例:

var qrCodeUrl = TenpayUtil.CreateQrCode(payUrl);
Bitmap bitmap = new Bitmap(qrCodeUrl);

MemoryStream stream = new MemoryStream();
bitmap.Save(stream, ImageFormat.Jpeg);

return File(stream.ToArray(), "image/jpeg");

第三步:支付结果查询

查询支付结果的代码示例为:

var queryResult = TenpayUtil.QueryOrder(outTradeNo);
return Content(queryResult.ToString());

示例2:C# MVC 接入微信扫码支付(SDK模式)

第一步:生成支付请求的信息

代码示例:

//创建支付请求对象
var paymentRequest = new PaymentRequest();
paymentRequest.OrderSubject = "订单标题";
paymentRequest.OutTradeNumber = "商户订单号";
paymentRequest.TotalAmount = 100;
paymentRequest.ClientIP = "192.168.0.1";

//调用支付接口,获取返回结果
var paymentPayResponse = PaymentNativePayRequest.UnifiedOrder(paymentRequest);

//统一下单成功,获取支付二维码链接
var codeUrl = paymentPayResponse.CodeUrl;

//获取二维码图片
var stream = WxPayUtility.CreateQrCode(codeUrl);
return File(stream.ToArray(), "image/jpeg");

第二步:处理支付结果通知

在收到微信支付结果通知后,需要做出相应的处理。以下是代码示例:

//获取支付通知的Xml内容
string xml = ContentReader.GetContentStreamAsStr(HttpContext.Current.Request);

//解析Xml内容
WxPayData notifyData = new WxPayData();
notifyData.FromXml(xml);

//检查支付结果的签名是否正确
if (notifyData.CheckSign())
{
    //支付成功
    string outTradeNo = notifyData.GetValue("out_trade_no").ToString();
}
else
{
    //支付失败
}

结论

以上就是接入微信扫码支付的具体流程和代码示例。其中,示例 1 使用了传统方式,示例 2 使用了SDK模式。请根据自己的具体情况选择接入方式。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# MVC 微信支付教程系列之扫码支付代码实例 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • jQWidgets jqxKnob高度属性

    jQWidgets jqxKnob高度属性攻略 jQWidgets 是一个基于 jQuery 的 UI 组件库,提供了丰富的 UI 组件和工具,可于创建现代化 应用程序。 jqKnob旋钮,用于可视化调整数值。攻略将详细介绍 jqxKnob 的 height 属性,该属性用于设置旋钮的高度。 height 属性 jqxKnob 组件的 height 属性用于…

    jquery 2023年5月10日
    00
  • 利用jQuery中的ajax分页实现代码

    下面是利用jQuery中的ajax分页实现代码的完整攻略。 一、前置知识 在学习使用jQuery中的ajax进行分页的过程中,需要掌握以下前置知识: HTML基础 jQuery基础 PHP基础 MySQL基础 二、实现思路 要实现分页功能,我们需要以下步骤: 编写用于MySQL数据库分页的PHP代码 使用jQuery的ajax方法,从PHP获取分页数据 将获…

    jquery 2023年5月28日
    00
  • jQWidgets jqxScheduler min属性

    以下是关于 jQWidgets jqxScheduler min 属性的详细攻略。 jQWidgets jqxScheduler min 属性 jQWidgets jqxScheduler 的 min 属性用于设置日程的最小日期。在日程表中,用户无法选择早最小日期的日期。 语法 $(‘#scheduler’).jqxScheduler({ min: valu…

    jquery 2023年5月12日
    00
  • 给jqGrid数据行添加修改和删除操作链接(之一)

    给jqGrid数据行添加修改和删除操作链接(之一) 前言 jqGrid是一个强大、灵活且易于使用的jQuery表格插件。在开发Web应用程序时,经常需要使用表格来显示并操作数据。在此过程中,我们经常需要在表格中添加编辑、删除等操作,以便用户对数据进行操作。 本篇攻略将介绍如何给jqGrid数据行添加修改和删除操作链接。 步骤 1. 准备工作 在添加操作链接之…

    jquery 2023年5月28日
    00
  • jQWidgets jqxSplitter高度属性

    jQWidgets是一个流行的JavaScript框架,它提供了许多UI组件来帮助Web开发人员开发Web应用程序。其中,jqxSplitter是一个用于创建可分隔的UI布局的组件。在使用jqxSplitter时,高度属性是一个非常重要的参数。本文将详细讲解高度属性的用法及示例。 jQWidgets jqxSplitter高度属性 jqxSplitter组件…

    jquery 2023年5月11日
    00
  • Json实现异步请求提交评论无需跳转其他页面

    实现异步提交评论的方式有多种,其中一种比较常用的方式是通过Json实现。下面,我将为您介绍实现的详细步骤。 1.前端页面代码 在前端页面中,需要通过JavaScript代码来实现异步提交评论。通常,会采用jQuery等JavaScript库来方便地进行DOM操作和Ajax请求。 在评论表单中,需要添加一个提交按钮,并定义其click事件处理函数,如下所示: …

    jquery 2023年5月28日
    00
  • jQuery解决input超多的表单提交

    当一个表单包含大量输入框或其他控件时,提交数据将成为一个烦锁的问题。这时候,jQuery提供了一种非常简单的解决方法来解决这个问题。 1. 序言 在提交大量的表单数据时,有些情况下基于 HTML 的普通表单方式可能并不可行。或者,即使你使用这种方式,提交也可能会非常缓慢。要解决这个问题,你必须使用 AJAX 的形式来提交表单数据。 2. 不使用 AJAX 的…

    jquery 2023年5月27日
    00
  • jQWidgets jqxNavBar open()方法

    以下是关于 jQWidgets jqxNavBar 组件中 open() 方法的详细攻略。 jQWidgets jqxNavBar open() 方法 jQWidgets jqxNavBar 组件的 open() 方法用于打开指定的导航栏项。该方法可以接受一个参数,表示要打开的导航栏项的索引或 ID。 语法 $(‘#navbar’).jqxNavBar(‘o…

    jquery 2023年5月12日
    00
合作推广
合作推广
分享本页
返回顶部