第三方支付凍結,解凍,分帳,退款等交易組件(一)

註冊博客園已經幾年了 看得多 寫的少 這幾年一直瞎忙着 唉異步

相信不少人都作過支付寶,塊錢這類型交易平臺的接口,開始的時候,接口很差測試,找相關技術人員很差找,接口裏涉及的業務不清不楚。測試

這裏描述下我作這些的思路,設計的很差的地方歡迎吐槽啊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
    }
}

下班要有事了 暫時就寫這麼多 改天跟進..

相關文章
相關標籤/搜索