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

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

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

这里描述下我作这些的思路,设计的很差的地方欢迎吐槽啊spa

底层接口设计设计

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);
    }
}

第三方交易平台枚举orm

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
    }
}

交易返回结果对象BusinessResultParamblog

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
    }
}

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