Usando o pagamento de três partes fornecido pelo .NET,
Payment
fornece recursos básicos de pagamento. Devido às necessidades do projeto, com base noPayment
, o suporte para Fuyou (Payment.Fuiou
) e Yinshengbao (Payment.Unspay
) é expandido. os usuários também podem expandir outros canais de pagamento baseados em pagamento;
Não sei se os alunos que fizeram o pagamento sentem o mesmo que eu. Acho que os aspectos relacionados ao pagamento são os seguintes:
Em suma, a divisão razoável nos ajudará a trabalhar na próxima etapa. Como reduzir o acoplamento entre os módulos e como aumentar a escalabilidade é o nosso princípio, os módulos estão divididos e os princípios de fazer as coisas são claros. fora o que fazer.
Essa é a maneira de fazer as coisas, e nós tentamos ao máximo fazer isso acontecer. Afinal, o efeito é inesperado, vamos falar sobre esse projeto a seguir.
O chamado ágil significa primeiro satisfazer a situação atual e o passado, e resolvê-la em tempo hábil, sem deixar qualquer dívida técnica.
Os alunos que lerem o código-fonte descobrirão que o log está comentado. Isso ocorre porque este programa é uma versão cortada e tem uma forte dependência do log da plataforma. Isso é muito simples e podemos adicioná-lo nós mesmos, se for nosso. o método de comunicação não é http, neste momento podemos citar outra camada do ICommunicate;
原则是一样的,但是富有很强的灵活性,使我们所需掌握的
!
Tomemos os parâmetros variáveis como exemplo:
/// <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 ( ) ) ;
É simples e conveniente? Mas...? O que devo fazer se mudar esta conta para Yinshengbao? Ou o que devo fazer se mudar para outro método de pagamento?
Se você encontrar esse problema, podemos comunicar. Afinal, esse problema não é difícil, pois afinal o parâmetro é do tipo
AbsAccount
, o que você acha?