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日

相关文章

  • jQuery UI Slider widget()方法

    以下是关于 jQuery UI 滑块 widget() 方法的详细攻略: jQuery UI 滑块 widget() 方法 widget() 方法用于获取滑块的 jQuery UI 对象。通过该方法可以获取滑块的所有属性和方法。 语法 $( ".selector" ).slider( "widget" ); 示例一:获…

    jquery 2023年5月11日
    00
  • 如何使用jQuery Mobile制作一个水平控制组

    使用jQuery Mobile制作一个水平控制组的步骤如下: 步骤一:导入jQuery Mobile 首先需要导入jQuery Mobile库,可以通过以下两种方式之一完成: 1.下载jQuery Mobile库并在页面中引入: <head> <meta charset="UTF-8"> <title>…

    jquery 2023年5月12日
    00
  • jQWidgets jqxTooltip内容属性

    以下是关于 jQWidgets jqxTooltip 组件中内容属性的详细攻略。 jQWidgets jqxTooltip 内容属性 jQWidgets jqxTooltip 组件的内容属性用于设置提示框的内容。可以使用该属性控制提示框的显示内容样式。 语法 $(‘#tooltip’).jqxTooltip({ content: ‘这是提示框的内容’ });…

    jquery 2023年5月11日
    00
  • 使用jQuery,Angular实现登录界面验证码详解

    标题:使用jQuery,Angular实现登录界面验证码详解 简介 验证码在Web应用程序中变得越来越常见,是一种帮助确保只有人类用户能够访问特定内容的功能。在本文中,我们将使用jQuery和Angular实现一个登录界面的验证码。 准备工作 库文件:jQuery、Angular 一个简单的登录表单 第一步:实现随机数生成 要生成一组随机的数字或字符,可以使…

    jquery 2023年5月28日
    00
  • jQWidgets jqxGrid rowunselect事件

    jQWidgets jqxGrid rowunselect事件详解 jQWidgets是一个基于jQuery的UI组件库,提供了丰富UI组件工具包。jqxGrid是其中之一,本文将详细介绍jqxGrid的rowunselect事件,包定义、语法和示例。 rowunselect事件的定义 jqxGrid的rowunselect事件在取消选择行时触发。通过使用r…

    jquery 2023年5月10日
    00
  • 如何在jQuery中获得自定义元素属性数据

    在Web开发中,我们经常需要在自定义元素中存储数据。在本攻略中,我们将详细介绍如何在jQuery中获得自定义元素属性数据,并提供两个示例说明它们的用途。 获取自定义元素属性数据 要获取自定义元素数据,我们可以使用jQuery的attr()方法。以下是一个例: <div id="myDiv" data-name="John&…

    jquery 2023年5月9日
    00
  • jquery 实现拖动文件上传加载进度条功能

    下面是详细讲解jquery实现拖动文件上传加载进度条功能的完整攻略。 一、实现原理 1.通过jquery监听文件拖放事件 使用jquery的dragover和drop事件监听文件的拖放。其中,dragover事件用于表示拖拽操作正在发生,而drop事件用于表示放置操作完成。 $(document).on(‘dragover’, function(e) { e…

    jquery 2023年5月27日
    00
  • jQWidgets jqxPivotGrid pivotitemselectionchanged事件

    以下是关于 jQWidgets jqxPivotGrid 组件中 pivotitemselectionchanged 事件的详细攻略。 jQWidgets jqxPivotGrid pivotitemselectionchanged 事件 jQWidgets jqxPivotGrid 组件的 pivotitemselectionchanged 事件在数据透视…

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