• 第三方支付冻结,解冻,分账,退款等交易组件(一)


    注册博客园已经几年了 看得多 写的少 这几年一直瞎忙着 唉

    相信很多人都做过支付宝,块钱这类型交易平台的接口,开始的时候,接口不好测试,找相关技术人员不好找,接口里涉及的业务不清不楚。

    这里描述下我做这些的思路,设计的不好的地方欢迎吐槽啊

    底层接口设计

    namespace Business
    {
        using System;
        using System.Collections.Specialized;
        /// <summary>
        /// 接口: 交易底层规范
        /// 编写: leizhongliang
        /// </summary>
        public interface IBusiness
        {
            /// <summary>
            /// 交易第三方
            /// </summary>
            BusinessThirdParty ThirdParty { get; }
            /// <summary>
            /// 交易类型
            /// </summary>
            BusinessType Type { get; }
            /// <summary>
            /// 交易返回结果
            /// 注意: 每个第三方交易平台的每个业务都有自己的结果类型
            /// </summary>
            BusinessResultParam Result { get; }
            /// <summary>
            /// 交易请求
            /// </summary>
            /// <param name="requestParam">请求配置: 每个第三方交易平台的每个业务都有自己的配置</param>
            /// <returns>BusinessSign == SUCCESS 标识成功(唯一标识)</returns>
            BusinessSign Request(BusinessRequestParam requestParam);
            /// <summary>
            /// 用户异步接收第三方返回结果
            /// </summary>
            /// <param name="coll">返回数据</param>
            /// <param name="partner">合作者在第三方身分ID</param>
            /// <param name="key">合作伙伴key</param>
            /// <returns>BusinessSign == SUCCESS 标识成功(唯一标识)</returns>
            BusinessSign Receive(NameValueCollection coll, string partner, string key);
        }
    }
    

    第三方交易平台枚举

    namespace Business
    {
        using System;
        /// <summary>
        /// 枚举: 第三方交易平台
        /// 编写: leizhongliang
        /// </summary>
        public enum BusinessThirdParty
        {
            /// <summary>
            /// 空
            /// </summary>
            Null = 0,
            /// <summary>
            /// 支付宝
            /// </summary>
            AliPay = 1,
            /// <summary>
            /// 财付通
            /// </summary>
            TenPay = 2,
            /// <summary>
            /// 汇付天下
            /// </summary>
            ChinaPay = 3
        }
    }
    

    第三方交易平台业务枚举 做过统计大体业务都差不多

    namespace Business
    {
        using System;
        /// <summary>
        /// 枚举: 交易业务
        /// 编写: leizhongliang
        /// </summary>
        public enum BusinessType
        {
            /// <summary>
            /// 即时到账交易
            /// 目的: 让支付的钱存在中间帐号, 等待订单操作完成分账
            /// </summary>
            Payment,
            /// <summary>
            /// 分账
            /// 目的: 当订单操作完成后分账
            /// </summary>
            Assign,
            /// <summary>
            /// 支付并分账
            /// </summary>
            PaymentAndAssign,
            /// <summary>
            /// 冻结
            /// 目的: 分销商申请退款后, 冻结供应商或者平台账户里此个订单的交易金额
            /// </summary>
            Freeze,
            /// <summary>
            /// 解除冻结
            /// 目的: 平台或者供应商退款前, 解除此订单开始冻结的金额
            /// </summary>
            UnFreeze,
            /// <summary>
            /// 分账退回
            /// 目的: 退款接口, 退回分账账户的订单交易金额, 退款回中间帐号
            /// </summary>
            AssignCallBack,
            /// <summary>
            /// 平台退款
            /// 目的: 退款接口, 分账退回完成后, 从中间账户退款回付款账户
            /// </summary>
            PlatformRefund
        }
    }
    

    交易返回结果对象BusinessResultParam

    BusinessResultParam是个抽象类,每个业务的返回对象都继承这个抽象类

    namespace Business
    {
        using System;
        /// <summary>
        /// 抽象: 第三方返回结果
        /// 编写: leizhongliang
        /// </summary>
        public abstract class BusinessResultParam { }
    }
    

    请求配置对象BusinessRequestParam

    BusinessRequestParam是个抽象类 每个业务的请求配置都继承这个抽象类

    namespace Business
    {
        using System;
        /// <summary>
        /// 第三方交易请求对象抽象
        /// 编写: leizhongliang
        /// </summary>
        public abstract class BusinessRequestParam
        {
            /// <summary>
            /// 提交第三方http/https地址,网关
            /// </summary>
            public string gateway
            {
                get;
                set;
            }
            /// <summary>
            /// 合作者在第三方身分ID
            /// </summary>
            public string partner
            {
                get;
                set;
            }
            /// <summary>
            /// 合作伙伴key
            /// </summary>
            public string key
            {
                get;
                set;
            }
        }
    }
    

    交易业务成功失败标识枚举 BusinessSign

    namespace Business
    {
        using System;
        /// <summary>
        /// 枚举: 交易标识
        /// 编写: leizhongliang
        /// </summary>
        public enum BusinessSign
        {
            /// <summary>
            /// 成功
            /// </summary>
            [SignAttribute(CodeDirections = "成功")]
            SUCCESS = 0,
            /// <summary>
            /// 请求参数为空
            /// </summary>
            [SignAttribute(CodeDirections = "请求参数对象为空")]
            PARAM_IS_NULL = 1,
            /// <summary>
            /// 请求参数订单号码为空
            /// </summary>
            [SignAttribute(CodeDirections = "请求参数订单号码为空")]
            PARAM_OUT_ORDER_IS_NULL = 2
        }
    }
    

    下班要有事了 暂时就写这么多 改天跟进..

  • 相关阅读:
    log4j使用方法(一)——先跑起来再说
    umasuo—ubuntu G++的安装
    Linux使用SVN server的简单介绍
    BeanUtils中copyProperties方法的使用
    标准化安装_RHEL5.5(X64)_Oracle10gR2
    Learn How To Use Oracle Flashback
    Learn How To Use Oracle Audit
    idea导入本地的eclipse项目
    Docker 资源汇总
    Docker Dockerfile
  • 原文地址:https://www.cnblogs.com/ChinaRen/p/3892864.html
Copyright © 2020-2023  润新知