payment
1.0.0
用.NET提供的三方支付,
Payment
提供了基礎支付能力,因項目的需要在Payment
的基礎上,擴展對富友(Payment.Fuiou
)和銀生寶(Payment.Unspay
)的支持,當然用戶也可在Payment的基礎上擴展其它支付管道;
不知道做過支付的同學是不是和我的感覺一樣,我認為涉及到支付的方面如下:
總之合理的劃分,有助於我們下一步工作,如何降低模組之間的耦合,如何增加擴展性,是我們的原則;模組劃分開了,做事的原則高清啦,我想我們已經想到該怎麼做了。
這是做事的方式,我們盡量讓它落地,畢竟帶來的效果出其的不意;下面我們說說這個項目。
所謂敏捷,先滿足現狀和之前,及時整理,不留下技術債
讀原始碼的同學會發現,log給注掉了,這是因為本程式是切割版,對平台日誌有很強依賴關係,這塊很簡單,我們可以自己加;當然如果我們的通訊方式不是http ,這時候我們可以再提一層ICommunicate;
原则是一样的,但是富有很强的灵活性,使我们所需掌握的
!
以多變的參數為例:
/// <summary>
/// 支付基础参数
/// </summary>
public abstract class BaseParemetor : AbsAccount
{
#region Abstract Method
/// <summary>
/// 获取格式数据
/// </summary>
/// <returns></returns>
public abstract IDictionary < string , string > GetFormatData ( ) ;
/// <summary>
/// 获取访问的路径
/// </summary>
/// <returns></returns>
public abstract string GetRequestUrl ( ) ;
#endregion
}
public class FuiouParemetor : BaseParemetor
{
.. . .. .
/// <summary>
/// 获取签名数据
/// </summary>
/// <returns></returns>
public virtual string GetSignature ( )
{
.. . .. .
}
/// <summary>
/// 获取富有格式数据
/// </summary>
/// <returns></returns>
public override IDictionary < string , string > GetFormatData ( )
{
.. . .. .
}
public override string GetRequestUrl ( )
{
.. . .. .
}
.. . .. .
}
/// <summary>
/// 参数:42 商户P2P网站免登录用户更换银行卡接口
/// </summary>
public class ChangeCardParemetor : FuiouParemetor
{
/// <summary>
/// 个人用户
/// </summary>
[ Paremetor ( "login_id" ) ]
public string User { get ; set ; }
/// <summary>
/// 商户返回地址
/// </summary>
[ Paremetor ( "page_notify_url" ) ]
public string NotifyUrl { get ; set ; }
/// <summary>
/// 字段
/// </summary>
/// <returns></returns>
protected override string [ ] GetDataFields ( )
{
return new string [ ] { "login_id" , "mchnt_cd" , "mchnt_txn_ssn" , "page_notify_url" , "signature" } ;
}
/// <summary>
/// 获取访问的路径
/// </summary>
/// <returns></returns>
public override string GetRequestUrl ( )
{
return FuiouConfig . ApiAddress [ "Fuyou.ChangeCard.Action" ] ;
}
/// <summary>
/// 设置验证字段
/// </summary>
/// <returns></returns>
protected override IEnumerable < VALIDATE > SetValiDateFields ( )
{
yield return VALIDATE . NOTNULLANDLIMITLENGTH ( this . User , 11 , "用户登录ID" ) ;
yield return VALIDATE . NOTNULLANDLIMITLENGTH ( this . NotifyUrl , 200 , "商户前端接收交易结果地址" ) ;
}
}
/// <summary>
/// 银生宝基础接口
/// </summary>
public class UnspayParemetor : BaseParemetor
{
.. . .. .
/// <summary>
/// 获取签名数据
/// </summary>
/// <returns></returns>
public virtual string GetSignature ( )
{
.. . .. .
}
public override IDictionary < string , string > GetFormatData ( )
{
.. . .. .
}
.. . .. .
}
var response = new Provider ( ) . Process ( new Payment . Fuiou . Paremetors . ChangeCardParemetor ( ) ) ;
是不是簡單方便?但是...?如何這個帳號改成銀生寶了怎麼辦?或是改成其它支付方式了怎麼辦?
如果你發現這個問題,我們可以交流一下,畢竟這個問題不難,因為參數畢竟是
AbsAccount
類型,你說呢?