支付宝退款和结果查询接口简单实现(.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 ...
随机推荐
- ubuntu下openCV-Haar特征分类器训练
ubuntu下openCV-Haar特征分类器训练 这段时间在学openCV,准备做一个头部检测,但是openCV自带的分类器只有人脸检测的,而且准确度不高,就准备自己训练一个分类器.在网上看了很多的 ...
- 语义分割评价指标(Dice coefficient, IoU)
语义分割任务常用的评价指标为Dice coefficient和IoU.Dice和IoU都是用来衡量两个集合之间相似性的度量,对于语义分割任务而言即用来评估网络预测的分割结果与人为标注结果之间的相似度. ...
- 快速生成树协议(RSTP)基本知识及实验(使用eNSP)
关于生成树协议的知识可参考我的另一个博客:https://www.cnblogs.com/mrlayfolk/p/12242627.html 这篇博文主要介绍快速生成树协议(RSTP)的基本知识.-- ...
- Windows下cmd命令行ssh连接Linux服务器
1.window+R键进入运行 2.输入cmd,运行命令行工具 3.使用,命令ssh连接服务器 ssh -t 用户名@ip地址 -p 22 例如: 输入密码,显示连接成功
- Kubernetes监控手册04-监控Kube-Proxy
简介 首先,请阅读文章<Kubernetes监控手册01-体系介绍>,回顾一下 Kubernetes 架构,Kube-Proxy 是在所有工作负载节点上的. Kube-Proxy 默认暴露 ...
- 解决 Error running ‘Application‘: Command line is too long.
一.项目场景:运行刚拉取下来的项目代码,出现下面问题描述的错误提示. 二.问题描述Error running 'Application': Command line is too long. Shor ...
- bugly进阶01-集成bugly时的相关参数
bugly进阶01-集成bugly时的相关参数 个人github CSDN博客 前言 bugly的集成十分的简单,在代码中只需要简单的一个语句就可以轻松集成: - (BOOL)application: ...
- [iOS]Size Class不同尺寸适配的是什么样的机型(实验向)
Size Class的定义可以翻阅网友的博客,本文不再赘述http://blog.csdn.net/yongyinmg/article/details/39315829 http://blog.csd ...
- Lfu缓存在Rust中的实现及源码解析
一个 lfu(least frequently used/最不经常使用页置换算法 ) 缓存的实现,其核心思想是淘汰一段时间内被访问次数最少的数据项.与LRU(最近最少使用)算法不同,LFU更侧重于数据 ...
- QT学习:10 IO类
--- title: framework-cpp-qt-10-IO类 EntryName: framework-cpp-qt-10-QIODevice date: 2020-04-17 10:24:0 ...