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 optionsMonitor, ILogger logger) : base(optionsMonitor, logger) { _config = optionsMonitor.CurrentValue; } /// /// 支付宝用户协议签约接口 /// 支持用户在支付宝页面完成支付宝协议的签约,目前支持支付宝钱包H5页面签约、扫码签约等方式。 /// 此接口并非直接调用的接口,需拼接跳转链接唤起,具体方式见下文“无线端唤起签约说明” /// /// /// public async Task UserAgreementPageSign(UserAgreementPageSignInput input) { return await base.PageRequest(input, AlipayApiConstant.UserAgreementPageSign, _config.NotifyUrl + "/api/AliPayNotify/NotifyOrderChanged ", "GET"); } /// /// 支付宝用户协议查询接口 /// 人资协议授权签约查询 /// /// /// public async Task UserAgreementQuery(UserAgreementQueryInput input) { return await base.Request(input, AlipayApiConstant.UserAgreementQuery); } /// /// 支付宝用户协议解约接口 /// 人资协议解约 /// /// /// public async Task UserAgreementUnsign(UserAgreementUnsignInput input) { return await base.Request(input, AlipayApiConstant.UserAgreementUnsign); } /// /// 资金记账本开通 /// /// /// public async Task FundAccountbookCreate(FundAccountbookCreateInput input) { return await base.Request(input, AlipayApiConstant.FundAccountBookCreate); } /// /// 查询资金记账本的可用金额等信息 /// 基于用户授权协议,平台可通过后台服务接口,为平台上的用户提供资金记账本相关信息查询服务 /// /// /// public async Task FundAccountBookQuery(FundAccountBookQueryInput input) { return await base.Request(input, AlipayApiConstant.FundAccountBookQuery); } /// /// 单笔转账接口是基于支付宝的资金处理能力,为了满足支付宝商家的转账需求,针对有部分开发能力的商家,提供通过API接口完成企业自身支付宝账户到支付宝账户、企业自身支付宝账户到银行卡的转账功能。 /// 适用于:C2C现金红包的红包领取、B2C现金红包的红包发放、B2C单笔转账到支付宝账户、B2C单笔转账到银行卡等。 /// /// /// public async Task FundTransUniTransfer(FundTransUniTransferInput input) { return await base.Request(input, AlipayApiConstant.FundTransUniTransfer); } /// /// 转账业务单据查询接口 /// 商户可通过该接口查询转账业务单据的状态,主要应用于统一转账接口(alipay.fund.trans.uni.transfer)、无线转账接口(alipay.fund.trans.app.pay)、单笔转账到支付宝账户接口(alipay.fund.trans.toaccount.transfer) /// /// /// public async Task FundTransCommonoQuery(FundTransCommonQueryInput input) { return await base.Request(input, AlipayApiConstant.FundTransCommonQuery); } /// /// 资金调拨到用户名下的发薪专项的页面付款接口 /// 基于用户授权协议,平台通过页面接口形式唤起支付宝外部收银台。待用户核身确认后,支付宝服务端依据平台指令,将用户支付宝的可用资金划拨到用户名下的发薪专项不可用资金中,并将处理结果以异步消息方式通知到平台 /// /// /// public async Task FundTransPagePay(FundTransPagePayInput input) { return await base.PageRequest(input, AlipayApiConstant.FundTransPagePay, _config.NotifyUrl + "/AliPayNotify/NotifyOrderChanged"); } ///// ///// 基于付款方的委托授权,用于批量向指定支付宝账户/银行卡转账 ///// 平台基于付款方的委托授权,将用户的专款资金批量转账到指定的支付宝账户 ///// ///// ///// //public Task FundBatchUniTransfer(FundBatchUniTransferInput input) //{ // return base.Request(input, AlipayApiConstant.FundBatchUniTransfer); //} ///// ///// 基于付款方的委托授权, ///// 场景一:当商户收到批次异步通知的后,可通过该接口查询批次下的明细信息; /////场景二:商户未收到批次异步通知时,商户通过此接口可以主动查询批次和批次下明细单据的状态 ///// ///// ///// //public Task FundBatchDetailQuery(FundBatchDetailQueryInput input) //{ // return base.Request(input, AlipayApiConstant.FundBatchDetailQuery); //} ///// ///// 用于查询支付宝账户余额 ///// ///// ///// //public Task FundAccountQuery(FundAccountQueryInput input) //{ // return base.Request(input, AlipayApiConstant.FundAccountQuery); //} /// /// 申请电子回单 /// /// /// public async Task DataBillErceiptApply(DataBillErceiptApplyInput input) { return await base.Request(input, AlipayApiConstant.DataBillErceiptApply); } /// /// 查询电子回单状态 /// /// /// public async Task DataBillEreceiptQuery(DataBillEreceiptQueryInput input) { return await base.Request(input, AlipayApiConstant.DataBillEreceiptQuery); } /// /// 账单下载 /// /// /// public async Task DataDataserviceBillDownloadUrlQuery(DataDataserviceBillDownloadUrlQueryInput input) { return await base.Request(input, AlipayApiConstant.DataDataserviceBillDownloadUrlQuery); } private static string GetPrivateKey(string appId) { IDictionary json = JsonConvert.DeserializeObject>( File.ReadAllText(DirFileHelper.GetSolutionBasePath() + "/privateKey.json")); return json[appId]; } } }