〇、前言
支付宝对 .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)的文章就介绍到这了,更多相关.net 支付宝退款和结果查询接口内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论