zhengyuxuan
2025-03-19 82831a86d529817e51f5b6e3cec636d21cef3c9b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
using Alipay.EasySDK.Kernel;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Newtonsoft.Json;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using ZeroD.Util;
 
namespace LifePayment.Domain
{
    public class AlipayInterfaceManager : AlipayApiClient, IAlipayInterfaceManager
    {
 
        private Config _config;
 
        public AlipayInterfaceManager(IOptionsMonitor<Config> optionsMonitor, ILogger<AlipayInterfaceManager> logger) : base(optionsMonitor, logger)
        {
            _config = optionsMonitor.CurrentValue;
        }
 
        /// <summary>
        /// 支付宝用户协议签约接口
        /// 支持用户在支付宝页面完成支付宝协议的签约,目前支持支付宝钱包H5页面签约、扫码签约等方式。
        /// 此接口并非直接调用的接口,需拼接跳转链接唤起,具体方式见下文“无线端唤起签约说明”
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task<UserAgreementPageSignResponse> UserAgreementPageSign(UserAgreementPageSignInput input)
        {
            return await base.PageRequest<UserAgreementPageSignInput, UserAgreementPageSignResponse>(input, AlipayApiConstant.UserAgreementPageSign, _config.NotifyUrl + "/api/AliPayNotify/NotifyOrderChanged ", "GET");
        }
 
        /// <summary>
        /// 支付宝用户协议查询接口 
        /// 人资协议授权签约查询
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task<UserAgreementQueryResponse> UserAgreementQuery(UserAgreementQueryInput input)
        {
            return await base.Request<UserAgreementQueryInput, UserAgreementQueryResponse>(input, AlipayApiConstant.UserAgreementQuery);
        }
 
        /// <summary>
        /// 支付宝用户协议解约接口
        /// 人资协议解约
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task<AlipayBaseOutput> UserAgreementUnsign(UserAgreementUnsignInput input)
        {
            return await base.Request<UserAgreementUnsignInput, AlipayBaseOutput>(input, AlipayApiConstant.UserAgreementUnsign);
        }
 
        /// <summary>
        /// 资金记账本开通
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task<FundAccountbookCreateResponse> FundAccountbookCreate(FundAccountbookCreateInput input)
        {
            return await base.Request<FundAccountbookCreateInput, FundAccountbookCreateResponse>(input, AlipayApiConstant.FundAccountBookCreate);
        }
 
        /// <summary>
        /// 查询资金记账本的可用金额等信息
        /// 基于用户授权协议,平台可通过后台服务接口,为平台上的用户提供资金记账本相关信息查询服务
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task<FundAccountBookQueryResponse> FundAccountBookQuery(FundAccountBookQueryInput input)
        {
            return await base.Request<FundAccountBookQueryInput, FundAccountBookQueryResponse>(input, AlipayApiConstant.FundAccountBookQuery);
        }
 
 
        /// <summary>
        /// 单笔转账接口是基于支付宝的资金处理能力,为了满足支付宝商家的转账需求,针对有部分开发能力的商家,提供通过API接口完成企业自身支付宝账户到支付宝账户、企业自身支付宝账户到银行卡的转账功能。 
        /// 适用于:C2C现金红包的红包领取、B2C现金红包的红包发放、B2C单笔转账到支付宝账户、B2C单笔转账到银行卡等。
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task<FundTransUniTransferResponse> FundTransUniTransfer(FundTransUniTransferInput input)
        {
            return await base.Request<FundTransUniTransferInput, FundTransUniTransferResponse>(input, AlipayApiConstant.FundTransUniTransfer);
        }
 
        /// <summary>
        /// 转账业务单据查询接口
        /// 商户可通过该接口查询转账业务单据的状态,主要应用于统一转账接口(alipay.fund.trans.uni.transfer)、无线转账接口(alipay.fund.trans.app.pay)、单笔转账到支付宝账户接口(alipay.fund.trans.toaccount.transfer)
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task<FundTransCommonQueryResponse> FundTransCommonoQuery(FundTransCommonQueryInput input)
        {
            return await base.Request<FundTransCommonQueryInput, FundTransCommonQueryResponse>(input, AlipayApiConstant.FundTransCommonQuery);
        }
 
        /// <summary>
        /// 资金调拨到用户名下的发薪专项的页面付款接口
        /// 基于用户授权协议,平台通过页面接口形式唤起支付宝外部收银台。待用户核身确认后,支付宝服务端依据平台指令,将用户支付宝的可用资金划拨到用户名下的发薪专项不可用资金中,并将处理结果以异步消息方式通知到平台
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task<AlipayFundTransPagePayResponse> FundTransPagePay(FundTransPagePayInput input)
        {
            return await base.PageRequest<FundTransPagePayInput, AlipayFundTransPagePayResponse>(input, AlipayApiConstant.FundTransPagePay, _config.NotifyUrl + "/AliPayNotify/NotifyOrderChanged");
        }
 
        ///// <summary>
        ///// 基于付款方的委托授权,用于批量向指定支付宝账户/银行卡转账
        ///// 平台基于付款方的委托授权,将用户的专款资金批量转账到指定的支付宝账户
        ///// </summary>
        ///// <param name="input"></param>
        ///// <returns></returns>
        //public Task<FundBatchUniTransferResponse> FundBatchUniTransfer(FundBatchUniTransferInput input)
        //{
        //    return base.Request<FundBatchUniTransferInput, FundBatchUniTransferResponse>(input, AlipayApiConstant.FundBatchUniTransfer);
        //}
 
 
        ///// <summary>
        ///// 基于付款方的委托授权,
        ///// 场景一:当商户收到批次异步通知的后,可通过该接口查询批次下的明细信息;
        /////场景二:商户未收到批次异步通知时,商户通过此接口可以主动查询批次和批次下明细单据的状态
        ///// </summary>
        ///// <param name="input"></param>
        ///// <returns></returns>
        //public Task<FundBatchDetailQueryResponse> FundBatchDetailQuery(FundBatchDetailQueryInput input)
        //{
        //    return base.Request<FundBatchDetailQueryInput, FundBatchDetailQueryResponse>(input, AlipayApiConstant.FundBatchDetailQuery);
        //}
 
 
        ///// <summary>
        ///// 用于查询支付宝账户余额
        ///// </summary>
        ///// <param name="input"></param>
        ///// <returns></returns>
        //public Task<FundAccountQueryResponse> FundAccountQuery(FundAccountQueryInput input)
        //{
        //    return base.Request<FundAccountQueryInput, FundAccountQueryResponse>(input, AlipayApiConstant.FundAccountQuery);
        //}
 
        /// <summary>
        /// 申请电子回单
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task<DataBillErceiptApplyResponse> DataBillErceiptApply(DataBillErceiptApplyInput input)
        {
            return await base.Request<DataBillErceiptApplyInput, DataBillErceiptApplyResponse>(input, AlipayApiConstant.DataBillErceiptApply);
        }
 
        /// <summary>
        /// 查询电子回单状态
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task<DataBillEreceiptQueryResponse> DataBillEreceiptQuery(DataBillEreceiptQueryInput input)
        {
            return await base.Request<DataBillEreceiptQueryInput, DataBillEreceiptQueryResponse>(input, AlipayApiConstant.DataBillEreceiptQuery);
        }
 
        /// <summary>
        /// 账单下载
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task<DataDataserviceBillDownloadUrlQueryResponse> DataDataserviceBillDownloadUrlQuery(DataDataserviceBillDownloadUrlQueryInput input)
        {
            return await base.Request<DataDataserviceBillDownloadUrlQueryInput, DataDataserviceBillDownloadUrlQueryResponse>(input, AlipayApiConstant.DataDataserviceBillDownloadUrlQuery);
        }
 
        private static string GetPrivateKey(string appId)
        {
            IDictionary<string, string> json = JsonConvert.DeserializeObject<IDictionary<string, string>>(
                File.ReadAllText(DirFileHelper.GetSolutionBasePath() + "/privateKey.json"));
            return json[appId];
        }
    }
 
}