Eswlnk Blog Eswlnk Blog
  • 资源
    • 精彩视频
    • 破解专区
      • WHMCS
      • WordPress主题
      • WordPress插件
    • 其他分享
    • 极惠VPS
    • PDF资源
  • 关于我
    • 论文阅读
    • 关于本站
    • 通知
    • 左邻右舍
    • 玩物志趣
    • 日志
    • 专题
  • 热议话题
    • 游戏资讯
  • 红黑
    • 渗透分析
    • 攻防对抗
    • 代码发布
  • 自主研发
    • 知识库
    • 插件
      • ToolBox
      • HotSpot AI 热点创作
    • 区块
    • 快乐屋
    • 卡密
  • 乱步
    • 文章榜单
    • 热门标签
  • 问答中心反馈
  • 注册
  • 登录
首页 › 玩物志趣 › 「玩物志趣」微信支付退款和退款结果查询接口简单实现(.Net 7.0)

「玩物志趣」微信支付退款和退款结果查询接口简单实现(.Net 7.0)

Eswlnk的头像
Eswlnk
2024-08-06 16:10:33
「玩物志趣」微信支付退款和退款结果查询接口简单实现(.Net 7.0)-Eswlnk Blog
智能摘要 AI
本文介绍了如何使用社区封装的微信支付 .Net SDK(SKIT.FlurlHttpClient.Wechat.TenpayV3)实现退款和退款状态查询功能。首先需引入 SDK 并配置必要的商户信息,然后通过创建客户端对象调用相关接口。文中提供了退款和退款状态查询的代码示例,并解释了接口的 Request 和 Response 模型对应逻辑。

前言

相比支付宝,微信支付对 .Net 的支持没有那么全面,官方也没有提供 SDK。不过,好消息是,社区里有大佬封装了 v3 版 .Net SDK,方便我们使用。

SDK 名称是:SKIT.FlurlHttpClient.Wechat.TenpayV3,支持 .NET Core 和 .NET Framework,封装了所有 v3 API。

本文将基于这个 SDK,介绍退款和退款状态查询两个接口的实现。

接入准备

1.1 引入 SDK

我们需要引入的 SDK 名称是:SKIT.FlurlHttpClient.Wechat.TenpayV3,它支持 .Net Standard 2.0、.Net Framework 4.6.2-4.7.1、.Net 6.0 等版本。

NuGet 简介地址:https://www.nuget.org/packages/SKIT.FlurlHttpClient.Wechat.TenpayV3

「玩物志趣」微信支付退款和退款结果查询接口简单实现(.Net 7.0)-Eswlnk Blog

1.2 必要的账户信息

在进行接口调用前,我们需要以下账户信息:

名称示例简介
商户号110…10 位,数字
商户 API 证书序列号D566D2…40 位,大写字母、数字组合
商户 API v3 密钥gSk0EA…32 位,数字、大写字母、小写字母组合
商户 API 证书私钥—–BEGIN PRIVATE KEY—–\r\nMIIEv…通常为 apiclient_key.pem 文件内容

微信支付的商户类型有两种:普通商户和服务商。普通商户的资金直接与微信结算,而服务商的资金需要经过微信冻结和分账过程。

接口调用

2.1 创建客户端对象

首先,根据账户信息创建共用的客户端对象 client:

var manager = new InMemoryCertificateManager();
var options = new WechatTenpayClientOptions()
{
    MerchantId = "商户号",
    MerchantV3Secret = "商户 API v3 密钥",
    MerchantCertificateSerialNumber = "商户 API 证书序列号",
    MerchantCertificatePrivateKey = "-----BEGIN PRIVATE KEY-----\r\nMIIEv...Q71AG\r\n-----END PRIVATE KEY-----",
    PlatformCertificateManager = manager
};
var client = new WechatTenpayClient(options);

2.2 退款接口

下面是退款接口的代码示例:

var request = new CreateRefundDomesticRefundRequest()
{
    TransactionId = "微信订单号",
    OutRefundNumber = $"WX{DateTime.Now:yyyyMMddHHmmssffffff}",
    Reason = "测试退款080611",
    Amount = new CreateRefundDomesticRefundRequest.Types.Amount()
    {
        Total = 100,
        Refund = 99,
        Currency = "CNY"
    }
};
var response = await client.ExecuteCreateRefundDomesticRefundAsync(request);
if (response.IsSuccessful())
{
    Console.WriteLine("RefundId:", response.RefundId);
    Console.WriteLine("OutRefundNumber:", response.OutRefundNumber);
    Console.WriteLine("TransactionId:", response.TransactionId);
    Console.WriteLine("OutRefundNumber:", response.OutTradeNumber);
}
else
{
    Console.WriteLine("HTTP 状态:" + response.GetRawStatus());
    Console.WriteLine("错误代码:" + response.ErrorCode);
    Console.WriteLine("错误描述:" + response.ErrorMessage);
}

2.3 退款状态查询接口

接下来是退款状态查询接口的代码示例:

var request = new GetRefundDomesticRefundByOutRefundNumberRequest()<br>{<br>    OutRefundNumber = "WX20240806104450972506"<br>};<br>var response = await client.ExecuteGetRefundDomesticRefundByOutRefundNumberAsync(request);<br>if (response.IsSuccessful())<br>{<br>    Console.WriteLine("RefundId:", response.RefundId);<br>    Console.WriteLine("OutRefundNumber:", response.OutRefundNumber);<br>    Console.WriteLine("OutRefundNumber:", response.TransactionId);<br>    Console.WriteLine("OutRefundNumber:", response.OutTradeNumber);<br>}<br>else<br>{<br>    Console.WriteLine("HTTP 状态:" + response.GetRawStatus());<br>    Console.WriteLine("错误代码:" + response.ErrorCode);<br>    Console.WriteLine("错误描述:" + response.ErrorMessage);<br>}

2.4 接口的 Request、Response 模型的对应逻辑

以下是使用到的两个接口信息:

接口名称接口地址RequestResponse
退款【POST】/v3/refund/domestic/refundsCreateRefundDomesticRefundRequestCreateRefundDomesticRefundResponse
退款状态查询【GET】/v3/refund/domestic/refunds/{out_refund_no}GetRefundDomesticRefundByOutRefundNumberRequestGetRefundDomesticRefundByOutRefundNumberResponse

从上表可以看出,对应的模型实际上就是以接口地址为基础的,其他接口也可以按照这个逻辑去一一对应。

本站默认网盘访问密码:1166
本站默认网盘访问密码:1166
声明:本站原创文章文字版权归本站所有,转载务必注明作者和出处;本站转载文章仅仅代表原作者观点,不代表本站立场,图文版权归原作者所有。如有侵权,请联系我们删除。
net开发日志微信支付
0
0
Eswlnk的头像
Eswlnk
一个有点倒霉的研究牲站长
赞赏
「技术教程」使用Playwright进行API接口测试
上一篇
「JAVA教程」Spring Boot 中使用 JSON Schema 来校验复杂JSON数据
下一篇

评论 (0)

请登录以参与评论
现在登录
    发表评论

猜你喜欢

  • 插件分享:新增自助购买卡密功能
  • 「运维日志」网站支付回调修复 & WAF规则调整
  • 「日志记录」ForgeRoom管理后台开发进展汇报
  • 「玩物志趣」三元锂电池和磷酸铁锂电池优缺点全解析,哪款更适合你?
  • 「玩物志趣」平板突然卡住无法关机?教你轻松解决常见故障!
Eswlnk的头像

Eswlnk

一个有点倒霉的研究牲站长
1108
文章
319
评论
679
获赞

随便看看

Java中类什么意思?我们应该如何理解JAVA类的含义?
2023-03-03 15:53:35
JAVA应该怎么调用类方法?
2023-03-03 15:47:13
手机待机状态微信收不到信息怎么办?
2023-03-01 18:10:23

专题展示

WordPress53

工程实践37

热门标签

360 AI API CDN java linux Nginx PDF PHP python SEO Windows WordPress 云服务器 云服务器知识 代码 免费 安全 安卓 工具 开发日志 微信 微软 手机 插件 攻防 攻防对抗 教程 日志 渗透分析 源码 漏洞 电脑 破解 系统 编程 网站优化 网络 网络安全 脚本 苹果 谷歌 软件 运维 逆向
  • 首页
  • 知识库
  • 地图
Copyright © 2023-2025 Eswlnk Blog. Designed by XiaoWu.
本站CDN由 壹盾安全 提供高防CDN安全防护服务
蜀ICP备20002650号-10
页面生成用时 0.731 秒   |  SQL查询 23 次
本站勉强运行:
友情链接: Eswlnk Blog 网站渗透 倦意博客 特资啦!个人资源分享站 祭夜博客 iBAAO壹宝头条
  • WordPress142
  • 网络安全64
  • 漏洞52
  • 软件52
  • 安全48
现在登录
  • 资源
    • 精彩视频
    • 破解专区
      • WHMCS
      • WordPress主题
      • WordPress插件
    • 其他分享
    • 极惠VPS
    • PDF资源
  • 关于我
    • 论文阅读
    • 关于本站
    • 通知
    • 左邻右舍
    • 玩物志趣
    • 日志
    • 专题
  • 热议话题
    • 游戏资讯
  • 红黑
    • 渗透分析
    • 攻防对抗
    • 代码发布
  • 自主研发
    • 知识库
    • 插件
      • ToolBox
      • HotSpot AI 热点创作
    • 区块
    • 快乐屋
    • 卡密
  • 乱步
    • 文章榜单
    • 热门标签
  • 问答中心反馈