日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ICanPay 统一支付网关

發布時間:2023/12/4 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 统一支付网关的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。