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

相关文章: 


原文:https://github.com/milanyangbo/ICanPay


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

目的支付宝的demo很搓项目需要接入很多支付,磋上加搓,不是特别好管理本类库的目标完成跟支付宝手机网关支付对接的功能便于后面扩展(利用各种Handler),可测试如何使用本类库?1. 预先加载配置目前提供文件的方式加载配置use HuNanZai\Component\Pay\Package\Alipay_wap\Api as AlipayApi; use HuNanZai\Component\Pay\Package\Alipay_wap\Handler\PhpFileConfigHandler as ConfigHandler; $config_handler = new ConfigHandler(__DIR__.'/config.php'); $alipay_api = new AlipayApi($config_handler->getConfig());config.php<?php return array(     'partner'   => 'xxxxxxxxxxxxxxxx',     'seller_id' => 'xxxxxxxxxxxxxxxx',     'private_key_path'  => __DIR__.'/resource/rsa_private_key.pem',     'public_key_path'   => __DIR__.'/resource/rsa_public_key.pem',     'cacert'            => __DIR__.'resource/cacert.pem', );调用对应的api即可支付use HuNanZai\Component\Pay\Package\Alipay_wap\Handler\ArrayPayParamHandler as PayParamHandler; $pay_param_handler  = new PayParamHandler(array(     'out_trade_no'  => date('YmdHis),     'subject'       => '',     'total_fee'     => '0.01',     //可空     'notify_url'    => '',     'return_url'    => '', )); $alipay_api->pay($pay_param_handler->getParam());支付同步返回验证...略过上面的类似步骤 $callback_param_handler   = new CallbackParamHander($_GET); $res = $alipay_api->verifyCallback($callback_param_handler->getParam());支付异步通知验证$notify_param_handler   = new NotifyParamHandler($_POST); $res    = $alipay_api->verifyNotify($notify_param_handler->getParam());查询订单$param_handler = new SearchRequestParamHandler(array(     'trade_no'     => '',     'out_trade_no' => '', )); $result = $alipay_api->search($param_handler->getParam());退款$refund_param_handler   = new RefundParamHandler(array(     'refund_date'   => date('Y-m-d H:i:s'),     'batch_no'      => date('YmdHis'),     'batch_num'     => 1,     'detail_data'   => 'xxxx^0.01^测试退款', )); $result = $alipay_api->refund($refund_param_handler->getParam()); 标签:alipay
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值