Utilizando el pago tripartito proporcionado por .NET,
Payment
proporciona capacidades de pago básicas. Debido a las necesidades del proyecto, basado enPayment
, se amplía el soporte para Fuyou (Payment.Fuiou
) y Yinshengbao (Payment.Unspay
). los usuarios también pueden ampliar otros canales de pago basados en el pago;
No sé si los estudiantes que han realizado pagos sienten lo mismo que yo. Creo que los aspectos relacionados con el pago son los siguientes:
En resumen, una división razonable nos ayudará a trabajar en el siguiente paso. Cómo reducir el acoplamiento entre módulos y cómo aumentar la escalabilidad es nuestro principio. Los módulos están divididos y creo que ya lo hemos descubierto. saber qué hacer.
Esta es la forma de hacer las cosas y hacemos todo lo posible para que esto suceda. Después de todo, el efecto es inesperado. Hablemos de este proyecto a continuación.
Lo llamado ágil significa primero satisfacer la situación actual y la del pasado, y solucionarla de manera oportuna sin dejar ninguna deuda técnica.
Los estudiantes que lean el código fuente encontrarán que el registro está comentado. Esto se debe a que este programa es una versión cortada y depende mucho del registro de la plataforma. Esto es muy simple y, por supuesto, podemos agregarlo nosotros mismos; El método de comunicación no es http. En este momento podemos mencionar otra capa de ICommunicate;
原则是一样的,但是富有很强的灵活性,使我们所需掌握的
!
Tome los parámetros variables como ejemplo:
/// <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 ( ) ) ;
¿Es simple y conveniente? Pero... ¿Qué debo hacer si cambio esta cuenta a Yinshengbao? ¿O qué debo hacer si cambio a otro método de pago?
Si encuentra este problema, podemos comunicarnos. Después de todo, este problema no es difícil, porque después de todo el parámetro es del tipo
AbsAccount
, ¿qué opinas?