En utilisant le paiement tripartite fourni par .NET,
Payment
fournit des capacités de paiement de base. En raison des besoins du projet,Payment
prise en charge de Fuyou (Payment.Fuiou
) et Yinshengbao (Payment.Unspay
) est bien sûr étendue. les utilisateurs peuvent également étendre d'autres canaux de paiement basés sur le paiement ;
Je ne sais pas si les étudiants qui ont effectué un paiement ressentent la même chose que moi. Je pense que les aspects liés au paiement sont les suivants :
En bref, une division raisonnable nous aidera à travailler dans l'étape suivante. Comment réduire le couplage entre les modules et comment augmenter l'évolutivité est notre principe ; les modules sont divisés et les principes de fonctionnement sont clairs, je pense. savoir quoi faire.
C’est la façon de faire les choses, et nous faisons de notre mieux pour y parvenir. Après tout, l’effet est inattendu, parlons de ce projet ci-dessous.
Ce qu'on appelle agile signifie d'abord satisfaire la situation actuelle et le passé, et la régler en temps opportun sans laisser de dette technique.
Les étudiants qui lisent le code source constateront que le journal est commenté. C'est parce que ce programme est une version réduite et dépend fortement du journal de la plateforme. C'est très simple et nous pouvons l'ajouter nous-mêmes bien sûr ; la méthode de communication n'est pas http , à ce stade on peut mentionner une autre couche d'ICommunicate ;
原则是一样的,但是富有很强的灵活性,使我们所需掌握的
!
Prenons l'exemple des paramètres variables :
/// <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 ( ) ) ;
Est-ce simple et pratique ? Mais... ? Que dois-je faire si je change ce compte en Yinshengbao ? Ou que dois-je faire si je change de mode de paiement ?
Si vous trouvez ce problème, nous pouvons communiquer. Après tout, ce problème n'est pas difficile, car le paramètre est de type
AbsAccount
après tout, qu'en pensez-vous ?