C# 微信支付回调验签处理的实现

下面是“C#微信支付回调验签处理的实现”的完整攻略。

一、微信支付回调

在微信支付完成后,微信会向指定的回调URL发送支付结果消息通知,该通知内容是一个XML格式的文本,需要验证消息的真伪和合法性。

二、回调消息处理流程

微信回调验签的主要流程如下:

  1. 接收微信回调通知,并解析其内容得到相应的参数。
  2. 从微信公众平台后台下载证书,并将证书保存至本地。
  3. 将回调消息的参数进行签名,与微信返回的签名进行比对,判断消息的真伪。

三、开发C#微信支付回调验签处理代码

以下是一份C#微信支付回调验签处理的示例代码:

using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Xml;

namespace WeChatPay
{
    public class WxPay
    {
        #region 微信支付回调验签处理

        /// <summary>
        /// 微信支付回调验签处理
        /// </summary>
        public static bool VerifyNotify(string xmlData, string sign)
        {
            try
            {
                // 加载微信公钥证书
                X509Certificate2 wxCert = new X509Certificate2(@"apiclient_cert.p12", "商户证书密码(如不需要,请置空字符串)", X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);

                // 从证书中提取公钥
                var pubKey = wxCert.PublicKey.Key as RSACryptoServiceProvider;

                // 验证签名
                bool checkResult = pubKey.VerifyData(Encoding.UTF8.GetBytes(xmlData), "SHA1", Convert.FromBase64String(sign));

                return checkResult;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return false;
            }
        }

        #endregion
    }
}

四、说明

  1. VerifyNotify方法中的xmlData参数是微信回调通知的XML格式的文本,sign参数是微信加密后的签名。
  2. VerifyNotify方法中,首先加载微信公钥证书并提取公钥,然后将回调消息的参数进行签名,最后与微信返回的签名进行比对,以确认消息的真伪和合法性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# 微信支付回调验签处理的实现 - Python技术站

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

相关文章

  • C#如何调用MFC 窗口 DLL

    调用 MFC 窗口 DLL 是一个比较常见的需求,我们可以通过以下步骤实现: 1. 创建 MFC 窗口 DLL 项目 创建一个 MFC DLL 项目,并将其设置为创建 MFC 静态链接库。在项目中添加一个 MFC 窗口类,这将为我们提供一个调用的窗口。 2. 导出并编译 DLL 在窗口类头文件中声明一个新的公共函数,并在类源文件中将其实现。这样就可以在其他应…

    C# 2023年5月14日
    00
  • C# DateTime.AddMinutes()方法: 将指定的分钟数加到指定的日期上

    DateTime.AddMinutes()是C#语言中DateTime类型的一个方法,它可以在现有日期上增加指定的分钟数,并返回得到的新日期(新的DateTime对象)。其具体定义为 public DateTime AddMinutes(double value),其中value表示要增加的分钟数,可以是正数(增加)也可以是负数(减少)。 下面是DateTi…

    C# 2023年4月19日
    00
  • 为Xamarin.Forms的导航栏增加搜索功能

    为 Xamarin.Forms 的导航栏增加搜索功能攻略 在 Xamarin.Forms 中,可以为导航栏增加搜索功能,以便用户可以快速查找所需的内容。本攻略将介绍如何为 Xamarin.Forms 的导航栏增加搜索功能。 步骤 步骤1:创建搜索页 首先,需要创建一个搜索页,以便用户可以在其中输入搜索关键字。可以使用以下代码创建一个名为 SearchPage…

    C# 2023年5月17日
    00
  • visual studio 2013常用快捷键 VS2013快捷键大全

    Visual Studio 2013常用快捷键 VS2013快捷键大全 Visual Studio 2013是一个强大的开发工具,其丰富的快捷键让开发变得更加高效。以下是一些常用快捷键和使用技巧,以帮助你更好地使用Visual Studio 2013。 常用快捷键 以下是一些常用快捷键: Ctrl + C / Ctrl + V:复制和粘贴代码或文字。 Ctr…

    C# 2023年6月6日
    00
  • ASP.NET(VB)写的后台发送短信实现代码

    下面我就为您详细讲解ASP.NET (VB) 写的后台发送短信实现代码的完整攻略。 第一步:获取短信API 要发送短信,我们需要使用短信API。在国内,可以使用阿里云、腾讯云等云服务商提供的短信API。获取到短信API之后,我们需要在代码中引入相应的SDK,并按照API文档进行配置和调用。 第二步:编写发送短信的代码 实现方式一:使用SDK发送短信 以阿里云…

    C# 2023年5月31日
    00
  • C# 字符串按 ASCII码 排序的方法

    下面是C#字符串按ASCII码排序的方法的完整攻略: 1. ASCII码排序是什么 ASCII码是一种基础的字符编码方式,它将每个字符都对应着一个唯一的十进制数字。C#字符串排序时,可以将每个字符的ASCII码作为排序的依据,按照ASCII码从小到大或从大到小排序,这就是“ASCII码排序”。 2. C#字符串按ASCII码排序的方法 C#中的字符串可以使用…

    C# 2023年6月7日
    00
  • .NET 6实现滑动验证码的示例详解

    以下是关于“.NET6实现滑动验证码的示例详解”的完整攻略: 1. 什么是滑动验证码? 滑动验证码是一种常见的验证码形式,它要求用户在一个滑块上滑动,以证明他们是真正的人类用户,而不是机器人或恶意软件。 2. 如何使用.NET6实现滑动验证码? 在.NET6中,可以使用ASP.NET Core MVC和JavaScript来实现滑动验证码。可以按照以下步骤操…

    C# 2023年5月12日
    00
  • 基于为何我不喜欢用Path.Combine的详解

    关于“为何我不喜欢使用Path.Combine”的问题,我可以给你一些详细的讲解和解决方案。 1. Path.Combine的缺陷 通常,在C#或其他编程语言中,我们使用Path.Combine方法将文件路径组合成一个完整的路径。然而,这种方法并非是无懈可击的。它有以下几个缺陷: Path.Combine方法要求输入的路径必须是字符串类型,这意味着必须要将路…

    C# 2023年6月7日
    00
合作推广
合作推广
分享本页
返回顶部