| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 | using System;using System.Threading.Tasks;using Essensoft.AspNetCore.Payment.Alipay;using Essensoft.AspNetCore.Payment.Alipay.Notify;using Essensoft.AspNetCore.Payment.WeChatPay;using Essensoft.AspNetCore.Payment.WeChatPay.Notify;using Microsoft.AspNetCore.Mvc;using Microsoft.Extensions.Options;namespace WebApplicationSample.Controllers{    #region 支付宝异步通知    [Route("notify/alipay")]    public class AlipayNotifyController : Controller    {        private readonly IAlipayNotifyClient _client;        private readonly IOptions<AlipayOptions> _optionsAccessor;        public AlipayNotifyController(IAlipayNotifyClient client, IOptions<AlipayOptions> optionsAccessor)        {            _client = client;            _optionsAccessor = optionsAccessor;        }        /// <summary>        /// 扫码支付异步通知        /// </summary>        /// <returns></returns>        [Route("precreate")]        [HttpPost]        public async Task<IActionResult> Precreate()        {            try            {                var notify = await _client.ExecuteAsync<AlipayTradePrecreateNotify>(Request, _optionsAccessor.Value);                if (notify.TradeStatus == AlipayTradeStatus.Success)                {                    Console.WriteLine("OutTradeNo: " + notify.OutTradeNo);                    return AlipayNotifyResult.Success;                }                return NoContent();            }            catch            {                return NoContent();            }        }        /// <summary>        /// APP支付异步通知        /// </summary>        /// <returns></returns>        [Route("apppay")]        [HttpPost]        public async Task<IActionResult> AppPay()        {            try            {                var notify = await _client.ExecuteAsync<AlipayTradeAppPayNotify>(Request, _optionsAccessor.Value);                if (notify.TradeStatus == AlipayTradeStatus.Success)                {                    Console.WriteLine("OutTradeNo: " + notify.OutTradeNo);                    return AlipayNotifyResult.Success;                }                return NoContent();            }            catch            {                return NoContent();            }        }        /// <summary>        /// 电脑网站支付异步通知        /// </summary>        /// <returns></returns>        [Route("pagepay")]        [HttpPost]        public async Task<IActionResult> PagePay()        {            try            {                var notify = await _client.ExecuteAsync<AlipayTradePagePayNotify>(Request, _optionsAccessor.Value);                if (notify.TradeStatus == AlipayTradeStatus.Success)                {                    Console.WriteLine("OutTradeNo: " + notify.OutTradeNo);                    return AlipayNotifyResult.Success;                }                return NoContent();            }            catch            {                return NoContent();            }        }        /// <summary>        /// 手机网站支付异步通知        /// </summary>        /// <returns></returns>        [Route("wappay")]        [HttpPost]        public async Task<IActionResult> WapPay()        {            try            {                var notify = await _client.ExecuteAsync<AlipayTradeWapPayNotify>(Request, _optionsAccessor.Value);                if (notify.TradeStatus == AlipayTradeStatus.Success)                {                    Console.WriteLine("OutTradeNo: " + notify.OutTradeNo);                    return AlipayNotifyResult.Success;                }                return NoContent();            }            catch            {                return NoContent();            }        }    }    #endregion    #region 微信支付异步通知    [Route("notify/wechatpay")]    public class WeChatPayNotifyController : Controller    {        private readonly IWeChatPayNotifyClient _client;        private readonly IOptions<WeChatPayOptions> _optionsAccessor;        public WeChatPayNotifyController(IWeChatPayNotifyClient client, IOptions<WeChatPayOptions> optionsAccessor)        {            _client = client;            _optionsAccessor = optionsAccessor;        }        /// <summary>        /// 统一下单支付结果通知        /// </summary>        /// <returns></returns>        [Route("unifiedorder")]        [HttpPost]        public async Task<IActionResult> Unifiedorder()        {            try            {                var notify = await _client.ExecuteAsync<WeChatPayUnifiedOrderNotify>(Request, _optionsAccessor.Value);                if (notify.ReturnCode == WeChatPayCode.Success)                {                    if (notify.ResultCode == WeChatPayCode.Success)                    {                        Console.WriteLine("OutTradeNo: " + notify.OutTradeNo);                        return WeChatPayNotifyResult.Success;                    }                }                return NoContent();            }            catch            {                return NoContent();            }        }        /// <summary>        /// 退款结果通知        /// </summary>        /// <returns></returns>        [Route("refund")]        [HttpPost]        public async Task<IActionResult> Refund()        {            try            {                var notify = await _client.ExecuteAsync<WeChatPayRefundNotify>(Request, _optionsAccessor.Value);                if (notify.ReturnCode == WeChatPayCode.Success)                {                    if (notify.RefundStatus == WeChatPayCode.Success)                    {                        Console.WriteLine("OutTradeNo: " + notify.OutTradeNo);                        return WeChatPayNotifyResult.Success;                    }                }                return NoContent();            }            catch            {                return NoContent();            }        }    }    #endregion}
 |