C# MVC 微信支付教程系列之公众号支付代码

下面是对“C# MVC 微信支付教程系列之公众号支付代码”的完整攻略,包括安装微信支付SDK、生成订单、调用微信支付API等步骤。

安装微信支付SDK

在进行微信支付开发之前,需要下载并安装微信支付SDK,推荐使用官方提供的.NET版SDK。在官方网站(https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1)中点击下载.NET版本,并解压缩。

将解压缩后的文件拷贝到开发的根目录中,然后导入以下两个命名空间:

using WxPayAPI;
using System.Web;

生成订单

在生成订单时,需要在开发者自己的网站上生成和维护订单信息。订单中应该包含以下信息:

  • 交易金额
  • 货币类型
  • 订单标题
  • 订单详情
  • 唯一订单号
  • 用户IP

唯一订单号可以使用 GUID 进行生成,用户 IP 可以通过 HttpRequest 的 RemoteAddr 属性获取。交易金额等信息需要根据实际业务情况进行修改。

下面是一个简单的订单生成的示例,生成的订单信息将存到 HttpContext 的 Session 中。

public ActionResult CreateOrder()
{
    // 获取订单参数
    string body = "test";
    string attach = "test";
    string out_trade_no = Guid.NewGuid().ToString("N");
    int total_fee = 1;
    string trade_type = "JSAPI";

    // 获取用户 openid
    string openid = GetOpenid();
    if (string.IsNullOrEmpty(openid))
    {
        return Content("用户 openid 获取失败!");
    }

    // 组装订单信息
    WxPayData data = new WxPayData();
    data.SetValue("body", body);
    data.SetValue("attach", attach);
    data.SetValue("out_trade_no", out_trade_no);
    data.SetValue("total_fee", total_fee);
    data.SetValue("openid", openid);
    data.SetValue("trade_type", trade_type);
    data.SetValue("spbill_create_ip", Request.UserHostAddress);

    // 发起统一下单API请求
    WxPayData result = WxPayApi.UnifiedOrder(data);
    if (result.GetValue("return_code").ToString().ToUpper() != "SUCCESS")
    {
        return Content(result.GetValue("return_msg").ToString());
    }

    // 保存订单信息到 Session 中
    HttpContext.Session["order"] = result;

    return RedirectToAction("Pay");
}

调用微信支付API

在调用微信支付API时,需要发送请求到微信支付后台,得到返回的结果。

首先需要将订单信息进行签名,签名方法如下:

public static string Sign(WxPayData data, string key)
{
    // 根据参数名按字典序排序
    IDictionary<string, string> dict = new SortedDictionary<string, string>();
    foreach (string key in data.GetKeys())
    {
        dict.Add(key, data.GetValue(key).ToString());
    }

    // 拼接成字符串
    string str = "";
    foreach (KeyValuePair<string, string> item in dict)
    {
        if (item.Value != "")
        {
            str += item.Key + "=" + item.Value + "&";
        }
    }
    str += "key=" + key;

    // 计算签名
    string sign = MD5Util.GetMD5(str).ToUpper();
    return sign;
}

然后需要将签名后的订单信息一同传递给微信支付后台,并解析返回的结果。

public ActionResult Pay()
{
    WxPayData order = (WxPayData)HttpContext.Session["order"];

    // 生成支付信息
    WxPayData data = new WxPayData();
    data.SetValue("appId", order.GetValue("appid"));
    data.SetValue("timeStamp", WXPayUtil.GetTimestamp().ToString());
    data.SetValue("nonceStr", WXPayUtil.GetNonceStr());
    data.SetValue("package", "prepay_id=" + order.GetValue("prepay_id"));
    data.SetValue("signType", "MD5");

    // 签名
    string sign = Sign(data, WxPayConfig.KEY);
    data.SetValue("paySign", sign);

    // 保存支付信息到 ViewBag
    ViewBag.PayInfo = data;

    return View();
}

以上就是生成订单和调用微信支付API的完整流程。实际开发中可能还需要进行其他的参数设置和订单信息校验等步骤,具体可以参考微信支付官方文档和SDK源码。

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

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • uniapp组件之tab选项卡滑动切换功能实现

    下面是详细讲解“uniapp组件之tab选项卡滑动切换功能实现”的完整攻略。 概述 tab选项卡是开发中经常使用的一个组件,可以实现快速的切换页面。在uniapp中,我们可以使用 uni-ui 组件库提供的 uni-tabs 来实现tab选项卡。但是,如果我们需要实现tab选项卡的滑动切换功能,就需要进行一些自定义操作。 本攻略将详细讲解如何使用uniapp…

    css 2023年6月10日
    00
  • 浅析Bootstrap缩略图组件与警示框组件

    浅析Bootstrap缩略图组件与警示框组件 Bootstrap是一个经典的前端框架,提供了许多实用的组件和工具。本文将为大家介绍Bootstrap中的缩略图组件和警示框组件。 缩略图组件 在Bootstrap中,缩略图组件一般用于显示一组图片或者视频的缩略图,非常适合用于多媒体网站、电商网站等等。 基本用法 缩略图组件的基本代码如下: <div cl…

    css 2023年6月11日
    00
  • JavaScript实现左右下拉框动态增删示例

    下面是详细的“JavaScript实现左右下拉框动态增删”攻略: 准备工作 在开始实现之前,我们需要先准备好需要用到的 HTML 结构和 JavaScript 文件。具体代码如下: HTML 结构: <!– 左右两边的下拉框容器 –> <div class="selectBox"> <select mul…

    css 2023年6月10日
    00
  • Html+CSS绘制三角形图标

    下面我会详细讲解如何使用HTML和CSS绘制三角形图标的完整攻略。 1. 使用CSS border属性 CSS的border属性可以用来绘制三角形。具体操作如下: .triangle { width: 0; height: 0; border: 20px solid transparent; border-top-color: red; border-bot…

    css 2023年6月9日
    00
  • JavaScript输出

    JavaScript可以通过多种方式输出内容,本文将为您梳理常用的输出方式并提供相应的代码示例。 1. 使用alert()弹出框输出 alert()方法是一种简单快捷的输出方式,直接在页面上弹出一个窗口,展示指定内容。下面是一个例子。 alert("Hello World!"); 2. 使用console.log()控制台输出 conso…

    Web开发基础 2023年3月30日
    00
  • div+css布局必了解的列表元素ul ol li dl dt dd详解

    标题:Div+CSS布局必了解的列表元素ul ol li dl dt dd详解 正文: 列表元素在网页设计中非常常见,也是制作网页布局时不可或缺的元素。理解列表元素在网页设计中的应用,对于掌握Div+CSS布局设计技巧至关重要。本文将详细介绍列表元素ul、ol、li、dl、dt、dd的应用及使用技巧。 1. 无序列表ul和有序列表ol 无序列表ul和有序列表…

    css 2023年6月10日
    00
  • 编写email邮件的HTML页面原则小结

    下面我就来详细讲解如何编写email邮件的HTML页面原则,包括以下几个方面: 1.选择合适的HTML标签 在编写email邮件的HTML页面时,应该尽可能使用简单和稳定的HTML标签,避免使用过多的CSS样式表和JavaScript代码,并且应该遵循HTML标准规范,以确保页面的稳定性和兼容性。 例如,在编写email邮件的HTML页面中,可以使用以下HT…

    css 2023年6月10日
    00
  • 新手快速上手webpack4打包工具的使用详解

    新手快速上手webpack4打包工具的使用详解 1. 什么是webpack webpack是一个现代JavaScript应用程序的静态模块打包器。当webpack处理应用程序时,它会递归地构建一个依赖关系图,其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个bundle。 2. 安装webpack 在使用webpack前,我们需要先安装它。使…

    css 2023年6月9日
    00
合作推广
合作推广
分享本页
返回顶部