第三方支付冻结,解冻,分账,退款等交易组件(一)
注册博客园已经几年了 看得多 写的少 这几年一直瞎忙着 唉
相信很多人都做过支付宝,块钱这类型交易平台的接口,开始的时候,接口不好测试,找相关技术人员不好找,接口里涉及的业务不清不楚。
这里描述下我做这些的思路,设计的不好的地方欢迎吐槽啊
底层接口设计
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 } }
下班要有事了 暂时就写这么多 改天跟进..