〇、前言

支付宝对 .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)的更多相关文章

  1. 微信退款和支付宝退款接口调用(java版)

    项目中需要使用到微信和支付宝的退款功能,在这两天研究了一下这两个平台的退款,有很多坑,在开发中需要留意 1.微信退款接口 相对来说我感觉微信的退款接口还是比较好调用的,直接发送httppost请求即可 ...

  2. 落网数据库简单查询接口 caddy+php7+mongodb

    落网数据库简单查询接口 一个简单的DEMO,使用了caddy + php7 + mongodb 数据库&接口设计 来自 https://github.com/Aedron/Luoo.spide ...

  3. C# 微支付退款查询接口 V3.3.6

    #region 微支付退款查询 string Nonce = CreateRandomCode(15).ToLower(); //生成15个随机字符string sign1 = "appid ...

  4. 简单的股票信息查询系统 1 程序启动后,给用户提供查询接口,允许用户重复查股票行情信息(用到循环) 2 允许用户通过模糊查询股票名,比如输入“啤酒”, 就把所有股票名称中包含“啤酒”的信息打印出来 3 允许按股票价格、涨跌幅、换手率这几列来筛选信息, 比如输入“价格>50”则把价格大于50的股票都打印,输入“市盈率<50“,则把市盈率小于50的股票都打印,不用判断等于。

    '''需求:1 程序启动后,给用户提供查询接口,允许用户重复查股票行情信息(用到循环)2 允许用户通过模糊查询股票名,比如输入“啤酒”, 就把所有股票名称中包含“啤酒”的信息打印出来3 允许按股票价格 ...

  5. java 支付宝 第三方即时到账支付 接口

    alipay 的几个内核功能文件:=================================================================================== ...

  6. ThinkPHP5 支付宝支付扩展库(超级简单,超级好用!)

    ThinkPHP5 支付宝支付扩展库, 一个静态方法的调用就可以实现,包括手机网站支付.电脑网站支付.支付查询.退款.退款查询.对账单所有功能,而且是2017年7月20日最新版~我的想法是,调用一个静 ...

  7. API之IP地址查询---权威的IP地址查询接口集合

    原文地址:http://yushine.iteye.com/blog/1717586 推荐实用IP138 http://www.baidu.com/s?wd=IP&rsv_spt=1& ...

  8. 使用C++进行WMI查询的简单封装

    封装WMI查询的简单类CWMIUtil 头文件WMIUtil.h #pragma once #include <Wbemidl.h> class CWMIUtil { public: CW ...

  9. 利用微信支付的订单查询接口可以在APP 中提高支付的可靠性

    最近公司有一个应用,用户可以在微信公众号上面下单,也可以在APP 中下单. 当用户在公共号上面下单时,微信支付成功可以返回微信支付单号,但是在APP 中用户微信支付时,个别时候会出现用户已经付款成功, ...

  10. python爬取免费优质IP归属地查询接口

    python爬取免费优质IP归属地查询接口 具体不表,我今天要做的工作就是: 需要将数据库中大量ip查询出起归属地 刚开始感觉好简单啊,毕竟只需要从百度找个免费接口然后来个python脚本跑一晚上就o ...

随机推荐

  1. QGIS开发笔记(三):Windows安装版二次开发环境搭建(下):将QGis融入QtDemo,添加QGis并加载tif遥感图的Demo

    前言   使用QGis的目的是进行二次开发,或者说是融入我们的应用(无人车.无人船.无人机),本片描述搭建QGis二次基础开发环境,由于实在是太长了,进行了分篇: 上半部分:主要是安装好后,使用QtC ...

  2. SwiftUI Stack中的View被压缩的效果

    一.背景 我们在布局中,经常会遇到视图元素排列时空间不足或者空间过大的情况,在这种场景下面,不同的布局方式有不同的方法: 绝对布局frame:纯靠计算过程控制,获取父视图的大小,根据需求,计算自己需要 ...

  3. 震惊!docker镜像还有这些知识,你都知道吗?----镜像(二)

    镜像查看 查看镜像 [root@hmm-docker ~]# docker images REPOSITORY#镜像仓库 TAG #标签 IMAGE ID#镜像id CREATED #创建时间 SIZ ...

  4. 「C++」简单模拟

    这是一个公式: \[F_n=\dfrac{\left(\frac{1+\sqrt{5}}{2}\right)^n-\left(\frac{1-\sqrt{5}}{2}\right)^n}{\sqrt{ ...

  5. java开发规范 RestController Apollo logger params T data NPE page

    java开发规范 1.@Valid @RequestBody MyAppWorkOrderRequestVO orderRemarkListRequestVO 缺少 @RequestBody 注解,否 ...

  6. mysql自带test数据库表的默认属性:Collation latin1_swedish_ci 更新为utf8_general_ci,解决MYSQL数据库乱码

    ## mysql自带test数据库表的默认属性:Collation latin1_swedish_ci 更新为utf8_general_ci,解决MYSQL数据库乱码USE test;CREATE T ...

  7. CAEmitterLayer动画的开始和结束

    有个需求,要求模仿微信做表情下雨的动画,一开始想用CAEmitterLayer,实现的代码如下: //期望:显示特效五秒后结束特效 UIImage *image = [UIImage imageNam ...

  8. Linux安全审计之audit安装与使用

    场景 安全最重要的一步是内部安全,如何监控用户的行为是一个永恒不变的话题. audit可以详细监控用户的行为,详细到查看或修改了某个文件.这些都可以在日志中查看到. 安装 小贴士: CentOS默认已 ...

  9. ClickHouse的物化视图及MySQL表引擎

    MySQL表引擎可以与MySQL数据库中的数据表简历映射,并通过SQL向其发起远程查询. MySQL表引擎可以与物化视图结合,来同步更新MySQL数据库中的数据. 语法: CREATE TABLE [ ...

  10. CLR via C# 笔记 -- 可空值类型(19)

    1. 值类型的变量永远不会为null,所有需要使用System.Nullable<T> 2. 操作数是null,结构是null:==.!=操作数都为null,则返回true:<.&g ...