本篇文章主要介绍了"微信JSApi支付~订单号和微信交易号",主要涉及到sap,订单号方面的内容,对于软件工程感兴趣的同学可以参考一下:
谈谈transactionId和out_trade_no前一篇微信JSApi支付~坑和如何填坑文章反映不错,所以又写了个后篇,呵呵。每个第三方在线支付系统中都会...
谈谈transactionId和out_trade_no
前一篇微信JSApi支付~坑和如何填坑文章反映不错,所以又写了个后篇,呵呵。
每个第三方在线支付系统中都会有至少两类订单号,其一为支付系统的订单号,我们称为transactionId,其二为商户平台的订单号,我们通常称为out_trade_no,这两个号一般用来对账,在第三方支付平台你可以通过这两个订单号来查询订单的状态,而在商户自己的网站后台,也可以查询它的状态,一般地,transactionId由支付系统生成,并在回调时转回给商户;而out_trade_no一般在商户平台生成,自己可以设计自己的规则,然后把这个ID转到第三方支付平台,在支付成功后,第三方同样把这个号转回来,我们通过这个号进行商户系统的其它操作。
看一下第三方支付的流程图

对第三方支付的封装
封装要求通用,对任何一个项目都可以灵活的使用它,这是最重要的,要想实现松耦合,需要记住委托的概念,我们在订单回调时,定义一个订单所要数据的实体,然后以这个实体做为参数,定义一个委托,当然你完全可以使用.net为我们提供的Action,Func等通用的委托对象,这在大叔框架里通常被看到,也是大叔的常客!
下面是微信支付的封装,可以看到业务代码只写自己业务,而不处理任务微信API相关的东西
////// 返回链接串
//////publicstring Get()
{
int money = 10;
string orderID = "Lind0001";
Logger.LoggerFactory.Instance.Logger_Info("发送订单号" + orderID);
return JsApiImplement.Send(money, orderID);
}
//微信回调publicvoid Notify()
{
JsApiImplement.Notify((model) => {
Logger.LoggerFactory.Instance.Logger_Info("回调订单号" + model.Out_Trade_No);
//更新领域订单状态,用户账户数据,流水等 });
}
微信回调实体是大叔自己定义的,应该可以满足大部分业务的需要了,主要用于回调业务层的方法
////// 微信回调数据模型
///publicclass NotifyModel
{
////// 当次交易存储到微信平台的订单号
///publicstring Transaction_Id { get; set; }
////// 系统本身生成的订单号
///publicstring Out_Trade_No { get; set; }
////// 对应当前公众号的用户OpenId
///publicstring OpenId { get; set; }
////// 微信用户唯一标识
///publicstring UniqueId { get; set; }
}
而对于方法回调JsApiImplement.Notify方法,我们在底层进行了封装,对外公开一个委托,这个委托实现了方法的回调,当执行到微信核心业务时,回调业务层的方法即可。