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 统一支付网关相关推荐
- 中国电信翼支付网关接口接入
最近在做中国电信的翼支付网关接口的接入,正好拿Java练练手.到目前为止,唯一不太适应的就是自己的Java积累几乎为0,什么都要重头写起,不像C#有这么多年的沉淀,可以随手拿来用. 废话先不多说. ...
- 银行统一支付平台(介绍、架构)
介绍: 统一支付服务平台是提供规范管理功能及整合服务功能的支付清算业务平台,它以技术规范.业务规范为设计基础,以支付服务功能作为平台主体,既可以作为独立支付服务平台,以整合的支付服务功能为主,将行内已 ...
- 【学习笔记】- 支付网关的设计
大部分内容,来自大佬[凤凰牌老熊]博客:http://doc.cocolian.cn/essay/,外加我乱加的一些标签和乱找的一些注解. 文章目录 支付网关的设计 功能概述 支付(API)网关 支付 ...
- 【支付系统学习笔记】-二支付系统设计(支付网关设计)
前言: 本文属于学习笔记,首先感谢原作者:凤凰牌老熊,博客链接:http://blog.lixf.cn/ 一 概述 在支付系统中,支付网关和支付渠道的对接是最核心的功能.其中支付网关是对外提供服务的接 ...
- 支付网关的设计:核心模块的功能需求、软件架构设计以及注意要点
2019独角兽企业重金招聘Python工程师标准>>> 在支付系统中,支付网关和支付渠道的对接是最核心的功能.其中支付网关是对外提供服务的接口,所有需要渠道支持的资金操作都需要通过网 ...
- android webview 网关,在Android webview中CC Avenue支付网关会话过期问题
"Your session has been expired. Please re-initiate your transaction. Don't worry... It happens ...
- Magicodes.Pay,打造开箱即用的统一支付库,已提供ABP模块封装
Magicodes.Pay,打造开箱即用的统一支付库,已提供ABP模块封装 简介 Magicodes.Pay,是心莱科技团队提供的统一支付库,相关库均使用.NET标准库编写,支持.NET Framew ...
- 支付时报错java.lang.RuntimeException: 【微信统一支付】发起支付, returnCode != SUCCESS, returnMsg = appid和mch_id不匹配
1.问题 Hibernate: select ordermaste0_.order_id as order_id1_1_0_, ordermaste0_.buyer_address as buyer_ ...
- java在线支付---09,10,11,12_在线支付_分析易宝支付网关的应答协议与处理代码,完成用于处理支付响应的Servlet的初步编写和调试,完成处理支付网关响应结果的Servlet,支付实现
09_在线支付_分析易宝支付网关的应答协议与处理代码 创梦综合技术qq交流群:CreDream:251572072 对支付结果返回的数据加密生成md5-hmac public static boole ...
最新文章
- div块内的CSS中心文本(水平和垂直)
- php数组选择随机元素,php 数组随机选择一个元素显示的简单示例
- Winforn中实现ZedGraph自定义添加右键菜单项(附源码下载)
- docker(三) 制作自己的镜像
- 事情在不断的解决中,想念巫英才和张国振
- Java的学习与java大数运算
- python NoSuchElementException异常处理
- html水调歌头实验总结,水调歌头明月几时有反思小结
- ajax数据显示,使用js通用模板
- 13. PHP 数组
- app下载获取邀请码php,PHP根据id生成邀请码
- c#中将word转成图片,无水印
- Php网站手机能wifi上不了,解决手机能连上WIFI却上不了网故障
- CVE-2015-1427 ElasticSearch(Groovy 沙盒绕过 代码执行漏洞)
- 中英双语版Arnold for Cinema 4D 2023(c4d阿诺德渲染器插件)
- Spark核心编程系列(一)——RDD详解
- 数学符号归纳 常用数学符号名称中英文对照
- TDengine集群搭建
- 【物联网】老程序教你一招,10行代码让超声波模块秒变声控开关
- java js highcharts_highcharts java饼图