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

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

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

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

底层接口设计

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

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

 

posted @ 2014-08-05 17:55  愤怒的蜗牛_雷聃  阅读(2318)  评论(0编辑  收藏  举报