ICanPay 统一支付网关
生活随笔
收集整理的這篇文章主要介紹了
ICanPay 统一支付网关
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
https://github.com/hiihellox10/ICanPay?統一支付網關。對原代碼優化。支持NET46和NETSTANDARD2_0。支持支付寶,微信,銀聯支付渠道通過Web,App,Wap,QRCode方式支付。簡化訂單的創建、查詢、退款跟接收網關返回的支付通知等功能
初始網關信息
NET46,需依賴AuotoFac組件
var builder = new ContainerBuilder();builder.RegisterControllers(typeof(MvcApplication).Assembly);builder.Register(c =>{ var gateways = new Gateways();gateways.Add(new AlipayGateway(){Merchant = new Merchant(){AppId = ConfigurationManager.AppSettings["alipay.appid"],Partner = ConfigurationManager.AppSettings["alipay.partner"],Email = ConfigurationManager.AppSettings["alipay.seller_email"],Key = ConfigurationManager.AppSettings["alipay.key"],PublicKey = ConfigurationManager.AppSettings["alipay.publicKey"],PrivateKey = ConfigurationManager.AppSettings["alipay.privateKey"],NotifyUrl = new Uri(ConfigurationManager.AppSettings["alipay.notify_url"]),ReturnUrl = new Uri(ConfigurationManager.AppSettings["alipay.return_url"]),}}); return gateways;}).As<IGateways>().InstancePerDependency(); //autofac 注冊依賴IContainer container = builder.Build();DependencyResolver.SetResolver(new AutofacDependencyResolver(container));NETSTANDARD2_0,在Startup初始化
public?void?ConfigureServices(IServiceCollection services)?{services.AddMvc();services.AddSingleton<IConfiguration>(Configuration);services.AddICanPay(a =>{ var gateways = new Gateways();gateways.Add(new AlipayGateway(){Merchant = new Merchant(){AppId = Configuration["alipay:appid"],Partner = Configuration["alipay:partner"],Email = Configuration["alipay:seller_email"],Key = Configuration["alipay:key"],PublicKey = Configuration["alipay:publicKey"],PrivateKey = Configuration["alipay:privateKey"],NotifyUrl = new Uri(Configuration["alipay:notifyurl"]),ReturnUrl = new Uri(Configuration["alipay:returnurl"]),}}); return gateways;});}WebPayment(網站支付)
public?void?CreateOrder(GatewayType gatewayType)?{ var gateway = gateways.Get(gatewayType, GatewayTradeType.Web);
var paymentSetting = new PaymentSetting(gateway);paymentSetting.Order = new Order(){OrderAmount = 0.01,OrderNo = DateTime.Now.ToString("yyyyMMddhhmmss"),Subject = "WebPayment",PaymentDate = DateTime.Now};paymentSetting.Payment();}
WapPayment(手機網站支付)
public?void?CreateOrder(GatewayType gatewayType)?{ var gateway = gateways.Get(gatewayType, GatewayTradeType.Wap);
var paymentSetting = new PaymentSetting(gateway);paymentSetting.Order = new Order(){OrderAmount = 0.01,OrderNo = DateTime.Now.ToString("yyyyMMddhhmmss"),Subject = "WapPayment",PaymentDate = DateTime.Now};paymentSetting.Payment();}
QRCodePayment(二維碼支付)
public?void?CreateOrder(GatewayType gatewayType)?{ var gateway = gateways.Get(gatewayType, GatewayTradeType.QRCode);
var paymentSetting = new PaymentSetting(gateway);paymentSetting.Order = new Order(){OrderAmount = 0.01,OrderNo = DateTime.Now.ToString("yyyyMMddhhmmss"),Subject = "QRCodePayment",PaymentDate = DateTime.Now};paymentSetting.Payment();}
AppPayment(手機APP支付)
public?JsonResult?CreateOrder(GatewayType gatewayType)?{ var gateway = gateways.Get(gatewayType, GatewayTradeType.APP);
var paymentSetting = new PaymentSetting(gateway);paymentSetting.Order = new Order(){OrderAmount = 0.01,OrderNo = DateTime.Now.ToString("yyyyMMddhhmmss"),Subject = "AppPayment",PaymentDate = DateTime.Now}; return Json(paymentSetting.Payment());}
QueryPayment(查詢訂單)
public?void?QueryOrder(GatewayType gatewayType)?{ var gateway = gateways.Get(gatewayType);
var querySetting = new PaymentSetting(gateway);
// 查詢時需要設置訂單的Id與金額,在查詢結果中將會核對訂單的Id與金額,如果不相符會返回查詢失敗。querySetting.Order.OrderNo = "20";querySetting.Order.OrderAmount = 0.01;
if (querySetting.QueryNow()){ // 訂單已支付}}
Refund(退款和退款查詢)
public?void?CreateRefund(GatewayType gatewayType)?{ var gateway = gateways.Get(gatewayType);
var paymentSetting = new PaymentSetting(gateway);
if (paymentSetting.CanRefund){ var refund = new Refund();refund.OutRefundNo = "000000000000000";paymentSetting.BuildRefund(refund);paymentSetting.BuildRefundQuery(refund);}}
Notify(異步通知)
private readonly IGateways gateways; private PaymentNotify notify;
public?NotifyController(IGateways gateways)?{
this.gateways = gateways;notify = new PaymentNotify(gateways.Merchants);notify.PaymentSucceed += new PaymentSucceedEventHandler(notify_PaymentSucceed);notify.PaymentFailed += new PaymentFailedEventHandler(notify_PaymentFailed);notify.UnknownGateway += new UnknownGatewayEventHandler(notify_UnknownGateway);}
public?void?ServerNotify()?{ // 接收并處理支付通知notify.Received(PaymentNotifyMethod.ServerNotify);}
public?void?AutoReturn()?{ // 接收并處理支付通知notify.Received(PaymentNotifyMethod.AutoReturn);}
private?void?notify_PaymentSucceed(object?sender, PaymentSucceedEventArgs e)?{
// 支付成功時時的處理代碼if (e.PaymentNotifyMethod == PaymentNotifyMethod.AutoReturn){ // 當前是用戶的瀏覽器自動返回時顯示充值成功頁面} else{ // 支付結果的發送方式,以服務端接收為準}}
private?void?notify_PaymentFailed(object?sender, PaymentFailedEventArgs e)?{
// 支付失敗時的處理代碼}
private?void?notify_UnknownGateway(object?sender, UnknownGatewayEventArgs e)?{
// 無法識別支付網關時的處理代碼}
原文: https://github.com/milanyangbo/ICanPay
相關文章:?
C# 跨平臺的支付類庫ICanPay
原文:https://github.com/milanyangbo/ICanPay
.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com
總結
以上是生活随笔為你收集整理的ICanPay 统一支付网关的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET MVC使用Oauth2.
- 下一篇: 使用 dotnet core 和 Azu