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];
|
}
|
}
|
|
}
|