支付宝退款和结果查询接口简单实现(.Net 7.0)
〇、前言
支付宝对 .Net 的支持还是比较充分的,在每个接口文档中都有关于 C# 语言的示例,这样就大大降低了对接的难度,很容易上手。
官方接口文档地址:退款-alipay.trade.refund 退款状态查询-alipay.trade.fastpay.refund.query
本文就简单实现下这两个接口,并顺便记录特别注意的点。
一、接入准备
1.1 引入 SDK
安装支付宝开放平台官方 SDK:AlipaySDKNet.Standard。基于.Net Standard 2.0开发,支持.Net Framework 4.6.1、.Net Core 2.0及其以上版本。
NuGet 简介地址:https://www.nuget.org/packages/AlipaySDKNet.Standard/
1.2 必要账户基础信息
名称 | 示例 | |
应用 ID | 2024 ... ... | (15 位纯数字) |
应用公钥 | MIIBIjANBgkqhk ... ... | (392 位) |
应用私钥 | MIIEvgIBADANBgk ... ... | (PKCS1 格式的 1592 位) |
注意:通过支付宝密钥工具生成的应用私钥默认是 PKCS8 格式的,仅适用于 Java,此时必须手动转换成 PKCS1 格式,适用于其他全部语言。
密钥工具下载地址:https://opendocs.alipay.com/common/02kipk
如下格式转换,下边为转换后的格式以及标注:
二、接口调用
2.1 公用配置方法
将固定的应用信息填入,此方法可在不同接口中公用:
private static AlipayConfig GetAlipayConfig()
{
string privateKey = "<-- 请填写您的应用私钥,例如:MIIEvQIBADANB ... ... -->";
string alipayPublicKey = "<-- 请填写您的支付宝公钥,例如:MIIBIjANBg... -->";
AlipayConfig alipayConfig = new AlipayConfig();
alipayConfig.ServerUrl = "https://openapi.alipay.com/gateway.do";
alipayConfig.AppId = "<-- 请填写您的AppId,例如:2019091767145019 -->";
alipayConfig.PrivateKey = privateKey;
alipayConfig.Format = "json";
alipayConfig.AlipayPublicKey = alipayPublicKey;
alipayConfig.Charset = "UTF-8";
alipayConfig.SignType = "RSA2";
return alipayConfig;
}
2.2 退款接口
以下是退款接口的代码,其中入参仅示例了必要的字段,其他详情见官方文档。
// 初始化SDK
IAopClient alipayClient = new DefaultAopClient(GetAlipayConfig());
// 构造请求参数以调用接口
AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
AlipayTradeRefundModel model = new AlipayTradeRefundModel();
// 设置查询选项
List<String> queryOptions = new List<String>();
queryOptions.Add("refund_detail_item_list");
model.QueryOptions = queryOptions;
//// 设置商户订单号(与支付宝交易号,配置任一即可)
//model.OutTradeNo = "20150320010101001";
// 设置支付宝交易号
model.TradeNo = "2024072900000000000000000001";
// 设置退款金额,单位为:元
model.RefundAmount = "0.01";
// 设置退款原因说明
model.RefundReason = "正常退款0729";
// 设置退款请求号
model.OutRequestNo = $"ZFB{DateTime.Now.ToString("yyyyMMddHHmmssffffff")}";
request.SetBizModel(model);
AlipayTradeRefundResponse response = alipayClient.Execute(request);
if (!response.IsError)
{
Console.WriteLine("调用成功");
}
else
{
Console.WriteLine("调用失败");
}
成功返回:
{
"alipay_trade_refund_response": {
"code": "10000",
"msg": "Success",
"buyer_logon_id": "188******10",
"fund_change": "Y",
"gmt_refund_pay": "2024-07-29 13:50:04",
"out_trade_no": "*****",
"refund_detail_item_list": [
{
"amount": "0.01",
"fund_channel": "COUPON"
}
],
"refund_fee": "0.01",
"send_back_fee": "0.01",
"trade_no": "*****",
"buyer_open_id": "*****"
},
"sign": "*****"
}
2.3 退款状态查询接口
以下是退款状态查询接口的代码,其中入参仅示例了必要的字段,其他详情见官方文档。
// 初始化SDK
IAopClient alipayClient = new DefaultAopClient(GetAlipayConfig());
// 构造请求参数以调用接口
AlipayTradeFastpayRefundQueryRequest request = new AlipayTradeFastpayRefundQueryRequest();
AlipayTradeFastpayRefundQueryModel model = new AlipayTradeFastpayRefundQueryModel();
// 设置查询选项
List<String> queryOptions = new List<String>();
queryOptions.Add("refund_detail_item_list");
model.QueryOptions = queryOptions;
//// 设置商户订单号(与支付宝交易号,配置任一即可)
//model.OutTradeNo = "2014112611001004680073956707";
// 设置支付宝交易号
model.TradeNo = "2024072900000000000000000001";
// 设置退款请求号,来自退款接口中生成的编号
model.OutRequestNo = "ZFB20240729135000591024";
request.SetBizModel(model);
AlipayTradeFastpayRefundQueryResponse response = alipayClient.Execute(request);
if (!response.IsError)
{
Console.WriteLine("调用成功");
}
else
{
Console.WriteLine("调用失败");
}
成功返回:
{
"alipay_trade_fastpay_refund_query_response": {
"code": "10000",
"msg": "Success",
"out_request_no": "ZFB20240729135000591024",
"out_trade_no": "*****",
"refund_amount": "0.01",
"refund_detail_item_list": [
{
"amount": "0.01",
"fund_channel": "COUPON"
}
],
"refund_status": "REFUND_SUCCESS",
"send_back_fee": "0.01",
"total_amount": "1.00",
"trade_no": "*****"
},
"sign": "*****"
}
支付宝退款和结果查询接口简单实现(.Net 7.0)的更多相关文章
- 微信退款和支付宝退款接口调用(java版)
项目中需要使用到微信和支付宝的退款功能,在这两天研究了一下这两个平台的退款,有很多坑,在开发中需要留意 1.微信退款接口 相对来说我感觉微信的退款接口还是比较好调用的,直接发送httppost请求即可 ...
- 落网数据库简单查询接口 caddy+php7+mongodb
落网数据库简单查询接口 一个简单的DEMO,使用了caddy + php7 + mongodb 数据库&接口设计 来自 https://github.com/Aedron/Luoo.spide ...
- C# 微支付退款查询接口 V3.3.6
#region 微支付退款查询 string Nonce = CreateRandomCode(15).ToLower(); //生成15个随机字符string sign1 = "appid ...
- 简单的股票信息查询系统 1 程序启动后,给用户提供查询接口,允许用户重复查股票行情信息(用到循环) 2 允许用户通过模糊查询股票名,比如输入“啤酒”, 就把所有股票名称中包含“啤酒”的信息打印出来 3 允许按股票价格、涨跌幅、换手率这几列来筛选信息, 比如输入“价格>50”则把价格大于50的股票都打印,输入“市盈率<50“,则把市盈率小于50的股票都打印,不用判断等于。
'''需求:1 程序启动后,给用户提供查询接口,允许用户重复查股票行情信息(用到循环)2 允许用户通过模糊查询股票名,比如输入“啤酒”, 就把所有股票名称中包含“啤酒”的信息打印出来3 允许按股票价格 ...
- java 支付宝 第三方即时到账支付 接口
alipay 的几个内核功能文件:=================================================================================== ...
- ThinkPHP5 支付宝支付扩展库(超级简单,超级好用!)
ThinkPHP5 支付宝支付扩展库, 一个静态方法的调用就可以实现,包括手机网站支付.电脑网站支付.支付查询.退款.退款查询.对账单所有功能,而且是2017年7月20日最新版~我的想法是,调用一个静 ...
- API之IP地址查询---权威的IP地址查询接口集合
原文地址:http://yushine.iteye.com/blog/1717586 推荐实用IP138 http://www.baidu.com/s?wd=IP&rsv_spt=1& ...
- 使用C++进行WMI查询的简单封装
封装WMI查询的简单类CWMIUtil 头文件WMIUtil.h #pragma once #include <Wbemidl.h> class CWMIUtil { public: CW ...
- 利用微信支付的订单查询接口可以在APP 中提高支付的可靠性
最近公司有一个应用,用户可以在微信公众号上面下单,也可以在APP 中下单. 当用户在公共号上面下单时,微信支付成功可以返回微信支付单号,但是在APP 中用户微信支付时,个别时候会出现用户已经付款成功, ...
- python爬取免费优质IP归属地查询接口
python爬取免费优质IP归属地查询接口 具体不表,我今天要做的工作就是: 需要将数据库中大量ip查询出起归属地 刚开始感觉好简单啊,毕竟只需要从百度找个免费接口然后来个python脚本跑一晚上就o ...
随机推荐
- .NET程序对接 OpenTelemetry logs
OpenTelemetry 简介 OpenTelemetry 是一个由 CNCF(Cloud Native Computing Foundation)托管的开源项目,旨在为观察性(Observabil ...
- k8s组件和网络插件挂掉,演示已有的pod是否正常运行
环境 03 master ,05 06是node [root@mcwk8s03 mcwtest]# kubectl get nodes -o wide NAME STATUS ROLES AGE VE ...
- 算法学习笔记(46): 离散余弦变换(DCT)
前置知识:离散傅里叶变换 傅里叶变换在上文中更多的是 OI 中的理解以及应用.但是傅里叶变换奥秘还很多. 回顾 \(\omega_n\) 在傅里叶变换中的定义:\(e^{i \frac {2\pi} ...
- 使用Logstash同步Mysql到Easysearch
从 MySQL 同步数据到 ES 有多种方案,这次我们使用 ELK 技术栈中的 Logstash 来将数据从 MySQL 同步到 Easysearch . 方案前提 MySQL 表记录必须有主键,比如 ...
- C# .NET Framework EXCEL NPOI EOF in header
实例化时异常: EOF in header 错误代码: try { workBook = new HSSFWorkbook(file); } catch { try { workBook = new ...
- 找不到 .NETFramework,Version=v5.0 的引用程序集。要解决此问题,请为此框架版本安装开发人员工具包(SDK/目标包)或者重新定向应用程序。
找不到 .NETFramework,Version=v5.0 的引用程序集.要解决此问题,请为此框架版本安装开发人员工具包(SDK/目标包)或者重新定向应用程序. visual studio 2019 ...
- redis数据持久化篇
为什么需要持久化 Redis是个基于内存的数据库. 那服务一旦宕机,内存中的数据将全部丢失. 通常的解决方案是从后端数据库恢复这些数据,但后端数据库有性能瓶颈 如果是大数据量的恢复,1.会对数据库带来 ...
- Javascript高级程序设计第一章 | ch1 | 阅读笔记
什么是JavaScript 历史回顾 JavaScript实现 完整的JavaScript实现包括 核心 ECMAScript -> 语法.类型.关键字.保留字...(规范) 文档对象模型 DO ...
- java 8 stream toMap问题
最近使用java的stream功能有点多,理由有2: 1)少写了不少代码 2)在性能可以接受的范围内 在巨大的collection基础上使用stream,没有什么经验.而非关键业务上,乐于使用stre ...
- Markdown常用语法详解
背景知识 什么是html html是一种网页标记语言.我们平常见到的那么好看的网页就是通过html语言来编写的. html语言举例: <h1>hello world</h1> ...