Commit c6d00769 authored by 吴春's avatar 吴春

提交代码

parent 752e5c15
......@@ -59,6 +59,10 @@ namespace Edu.WebApi.Controllers.WeChatPay
JObject jobj = JObject.Parse(RequestParm.Msg.ToString());
int contractId = jobj.GetInt("contractId");
var orderModle = educationContractModule.GetEducationContractModule(contractId);
if (orderModle.Status == 4)
{
return ApiResult.Failed("合同已取消");
}
var orderNumber = $"{DateTime.Now:yyyyMMddHHmmssfff}{contractId}";
LogHelper.WriteInfo("合同Id:" + contractId + " 商户订单号:" + orderNumber);
var helper = new WxPayHelper(WxPayConst.appid, WxPayConst.mchid, WxPayConst.serialNo, WxPayConst.privateKey);
......@@ -66,7 +70,7 @@ namespace Edu.WebApi.Controllers.WeChatPay
Task<WxPayRespModel> payodel = helper.UnionGenerateOrder(orderModle.CourseName, Convert.ToInt32(orderModle.Money * 100), orderNumber, notify_url, orderModle.OrderId.ToString());
#region APP生成下单所需的参数,看个人实际需求,也可以APP自己生成所需的参数
#region 调用微信支付
var signModel = WxPayForAppHelper.GetSign(WxPayConst.appid, payodel.Result.code_url, WxPayConst.privateKey);
......@@ -125,7 +129,7 @@ namespace Edu.WebApi.Controllers.WeChatPay
return viewModel;
}
/// <summary>
/// 生成财务单据以及生成支付记录
/// </summary>
......@@ -268,18 +272,24 @@ namespace Edu.WebApi.Controllers.WeChatPay
};
}
bool result = educationContractModule.SetEducationContractFinance(model, orderRecordModel);
Cache.User.UserReidsCache.Set(Cache.CacheKey.WeChatPay_Callback_Key + payModel.out_trade_no, payModel.out_trade_no, 1);
}
Cache.User.UserReidsCache.Set(Cache.CacheKey.WeChatPay_Callback_Key + payModel.out_trade_no, payModel.out_trade_no, 1);
}
else {
else
{
LogHelper.WriteInfo("存在Key" + System.DateTime.Now);
}
}
/// <summary>
/// 根据商户订单号查询订单支付信息
/// </summary>
/// <param name="orderNumber"></param>
/// <returns></returns>
[AllowAnonymous]
public async Task<WxPayStatusRespModel> QueryOrder(string orderNumber)
{
......@@ -291,7 +301,11 @@ namespace Edu.WebApi.Controllers.WeChatPay
/// <summary>
/// 申请支付退款
/// </summary>
/// <param name="orderNumber"></param>
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
public async Task<RefundsRespModel> Refunds(string orderNumber)
......@@ -324,7 +338,6 @@ namespace Edu.WebApi.Controllers.WeChatPay
[AllowAnonymous]
public async Task<RefundsCallbackRespModel> RefundsCallback(RefundsCallbackModel wxPayNotifyModel)
{
//我没有使用官方的那种验证数据安全性的方法,我解密出来数据之后,直接拿着商户退款订单号再去查询一下订单状态,然后再更新到数据库中。我嫌麻烦……
var resource = wxPayNotifyModel?.resource ?? new RefundsCallbackResourceModel();
var decryptStr = AesGcmHelper.AesGcmDecrypt(resource.associated_data, resource.nonce, resource.ciphertext, WxPayConst.APIV3Key);
......@@ -341,11 +354,66 @@ namespace Edu.WebApi.Controllers.WeChatPay
// var payModel = await QueryRefunds(decryptModel.out_refund_no);
if (payModel != null && payModel.refund_status == "SUCCESS")//生成财务单据
{
int contractId = Convert.ToInt32(payModel.out_trade_no[17..]);
UpdateRefundsCallbackFinance(payModel);
//int contractId = Convert.ToInt32(payModel.out_trade_no[17..]);
//var orderModle = educationContractModule.GetEducationContractModule(contractId);
//var orderModel = orderModule.GetClassOrderInfo(orderModle.OrderId);
//var oldOrderRecordModel = educationContractModule.GetOrderRecordList(new RB_Finance_OrderRecord { ContractId = contractId, OutTradeNo = payModel.out_trade_no }).FirstOrDefault();
//var userInfo = employeeModule.GetEmployeeListModule(new Model.ViewModel.User.Employee_ViewModel { Id = orderModel.EnterID, Group_Id = orderModel.Group_Id }).ToList().FirstOrDefault();
//var OriginalFee = Math.Round(Convert.ToDecimal((Convert.ToDecimal(Config.SettlementRate) / 100) * (Convert.ToDecimal(payModel.amount.payer_total) / 100)), 2, MidpointRounding.AwayFromZero);//手续费
//RB_Online_Trade_Detail model = new RB_Online_Trade_Detail();
//RB_Finance_OrderRecord orderRecordModel = new RB_Finance_OrderRecord
//{
// ID = 0,
// Type = 2,
// FinanceId = 0,
// OrderId = orderModle.OrderId,
// ContractId = orderModle.Id,
// CreateDate = System.DateTime.Now,
// RB_Group_Id = orderModle.Group_Id,
// RB_School_Id = orderModle.School_Id,
// OutTradeNo = payModel.out_refund_no,
// OrderRecordId = oldOrderRecordModel?.ID ?? 0,
// TransactionId = payModel.refund_id,
// TotalPrice = Convert.ToDecimal(payModel.amount.payer_total) / 100,
// ServiceFee = OriginalFee
//};
//bool result = educationContractModule.SetEducationContractFinance(model, orderRecordModel);
viewModel.code = "SUCCESS";
viewModel.message = "";
}
//然后进行数据库更新处理……等等其他操作
}
return viewModel;
}
[AllowAnonymous]
public async Task UpdateRefundsCallbackFinance(RefundsCallbackDecryptModel payModel)
{
int contractId = Convert.ToInt32(payModel.out_trade_no[17..]);
bool isAdd = false;
if (!Cache.User.UserReidsCache.Exists(Cache.CacheKey.WeChatPay_Callback_Key + payModel.out_trade_no))
{
LogHelper.WriteInfo(payModel.out_trade_no + "我是回调:" + System.DateTime.Now);
Cache.User.UserReidsCache.Set(Cache.CacheKey.WeChatPay_Callback_Key + payModel.out_trade_no, payModel.out_trade_no, 1800);
isAdd = true;
Cache.User.UserReidsCache.Set(Cache.CacheKey.WeChatPay_Callback_Key + payModel.out_trade_no, payModel.out_trade_no, 1800);
var oldOrderRecordModel = educationContractModule.GetOrderRecordList(new RB_Finance_OrderRecord { ContractId = contractId, OutTradeNo = payModel.out_trade_no }).FirstOrDefault();
if (oldOrderRecordModel == null || oldOrderRecordModel.ID == 0)
{
isAdd = true;
}
if (isAdd)
{
var orderModle = educationContractModule.GetEducationContractModule(contractId);
var orderModel = orderModule.GetClassOrderInfo(orderModle.OrderId);
var oldOrderRecordModel = educationContractModule.GetOrderRecordList(new RB_Finance_OrderRecord { ContractId = contractId, OutTradeNo = payModel.out_trade_no }).FirstOrDefault();
var payOrderRecordModel = educationContractModule.GetOrderRecordList(new RB_Finance_OrderRecord { ContractId = contractId, OutTradeNo = payModel.out_trade_no }).FirstOrDefault();
var userInfo = employeeModule.GetEmployeeListModule(new Model.ViewModel.User.Employee_ViewModel { Id = orderModel.EnterID, Group_Id = orderModel.Group_Id }).ToList().FirstOrDefault();
var OriginalFee = Math.Round(Convert.ToDecimal((Convert.ToDecimal(Config.SettlementRate) / 100) * (Convert.ToDecimal(payModel.amount.payer_total) / 100)), 2, MidpointRounding.AwayFromZero);//手续费
RB_Online_Trade_Detail model = new RB_Online_Trade_Detail();
......@@ -360,20 +428,20 @@ namespace Edu.WebApi.Controllers.WeChatPay
RB_Group_Id = orderModle.Group_Id,
RB_School_Id = orderModle.School_Id,
OutTradeNo = payModel.out_refund_no,
OrderRecordId = oldOrderRecordModel?.ID ?? 0,
OrderRecordId = payOrderRecordModel?.ID ?? 0,
TransactionId = payModel.refund_id,
TotalPrice = Convert.ToDecimal(payModel.amount.payer_total) / 100,
ServiceFee = OriginalFee
};
bool result = educationContractModule.SetEducationContractFinance(model, orderRecordModel);
viewModel.code = "SUCCESS";
viewModel.message = "";
Cache.User.UserReidsCache.Set(Cache.CacheKey.WeChatPay_Callback_Key + payModel.out_trade_no, payModel.out_trade_no, 1);
}
//然后进行数据库更新处理……等等其他操作
}
else
{
LogHelper.WriteInfo("存在Key" + System.DateTime.Now);
}
return viewModel;
}
/// <summary>
......@@ -389,131 +457,7 @@ namespace Edu.WebApi.Controllers.WeChatPay
return payModel;
}
[AllowAnonymous]
public ApiResult TestQueryOrder()
{
var payModel = Common.Plugin.JsonHelper.DeserializeObject<WxPayStatusRespModel>(RequestParm.Msg.ToString());
int contractId = Convert.ToInt32(payModel.out_trade_no[17..]);
var orderModle = educationContractModule.GetEducationContractModule(contractId);
var orderModel = orderModule.GetClassOrderInfo(orderModle.OrderId);
var financeConfig = educationContractModule.GetFinanceConfigList(new Model.ViewModel.Course.RB_Finance_Config_ViewModel { Group_Id = orderModle.Group_Id, Type = Common.Enum.Course.FinanceConfigTypeEnum.Tuition }).FirstOrDefault();
if (financeConfig == null)
{
financeConfig = new Model.ViewModel.Course.RB_Finance_Config_ViewModel();
}
var userInfo = employeeModule.GetEmployeeListModule(new Model.ViewModel.User.Employee_ViewModel { Id = orderModel.EnterID, Group_Id = orderModel.Group_Id }).ToList().FirstOrDefault();
var OriginalFee = Math.Round((Convert.ToDecimal(Config.SettlementRate) / 100) * (Convert.ToDecimal(payModel.amount.payer_total) / 100), 2, MidpointRounding.AwayFromZero);//手续费
RB_Online_Trade_Detail model = new RB_Online_Trade_Detail();
RB_Finance_OrderRecord orderRecordModel = new RB_Finance_OrderRecord
{
ID = 0,
Type = 1,
FinanceId = 0,
OrderId = orderModle.OrderId,
ContractId = orderModle.Id,
CreateDate = System.DateTime.Now,
RB_Group_Id = orderModle.Group_Id,
RB_School_Id = orderModle.School_Id,
OutTradeNo = payModel.out_trade_no,
TransactionId = payModel.transaction_id,
TotalPrice = Convert.ToDecimal(payModel.amount.payer_total) / 100,
ServiceFee = OriginalFee
};
var detailList = new List<object>();
detailList.Add(new
{
CostTypeId = financeConfig?.CostTypeId ?? 533,
Number = 1,
OriginalMoney = Convert.ToDecimal((payModel.amount.payer_total / 100)),
UnitPrice = Convert.ToDecimal((payModel.amount.payer_total / 100)),
Remark = orderModle.StudentName + orderModle.CourseName + payModel.out_trade_no
});
var financeObj = new
{
IsPublic = 1,
BType = 1,//item.AccountType,
AccountId = financeConfig?.ClientID ?? 54,
WBMoney = Convert.ToDecimal((payModel.amount.payer_total / 100)),
TradeDate = System.DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd"),
AccountNumber = System.DateTime.Now.AddDays(-1).ToString("yyyyMMdd"),
TemplateId = financeConfig?.TempleteId ?? 139,
OrderSource = 17,
Remark = System.DateTime.Now.ToString("yyyy年MM月dd日") + "自动生成财务单据",
detailList,
OriginalFee,
CreateBy = userInfo.Id,
RemitterName = orderModle.StudentName,
RB_Branch_Id = userInfo.School_Id,
RB_Group_Id = userInfo.Group_Id,
RB_Depart_Id = userInfo.Dept_Id,
RB_CreateByName = userInfo.EmployeeName,
RB_DepartName = userInfo.DeptName,
RB_BranchName = userInfo.SchoolName,
RB_GroupName = userInfo.GroupName,
FinanceType = 2,
GuestId = orderModle.GuestId,
OrderId = orderModle.OrderId,
TCIDList = orderModel.ClassId > 0 ? new List<int>() { orderModel.ClassId } : new List<int>(),
};
string sign = EncryptionHelper.AesEncrypt(JsonHelper.Serialize(financeObj), Config.FinanceKey);
var resultInfo = new
{
msg = sign,
};
string apiResult = Common.Plugin.HttpHelper.HttpPost(Config.ReadConfigKey("PaymentFinanceApi"), JsonHelper.Serialize(resultInfo), "");
JObject parmsJob = JObject.Parse(apiResult);
string resultCode = parmsJob.GetStringValue("resultCode");
int frid = parmsJob.GetInt("data", 0);
if (resultCode == "1" && frid > 0)//新增记录
{
orderRecordModel.FinanceId = frid;
// var Pay_Date = !string.IsNullOrWhiteSpace(payModel?.success_time ?? "") ? Convert.ToDateTime(payModel.success_time) : Convert.ToDateTime("1990-01-01");
DateTime myDt = DateTime.SpecifyKind(Convert.ToDateTime(payModel.success_time), DateTimeKind.Utc);
model = new RB_Online_Trade_Detail
{
ID = 0,
Type = 1,
OrderSource = 18,
OrderId = orderModle.OrderId,
Pay_Order = "",
Trade_Order = payModel.out_trade_no,
Third_Order = payModel.transaction_id,
Money = Convert.ToDecimal((payModel.amount.payer_total / 100)),
Pay_Way = 1,
Interface_Company = 0,
Version = "",
Mch_Id = WxPayConst.mchid,
User_Id = orderModle.GuestId.ToString(),
Is_follow = 0,
AppId = WxPayConst.appid,
OpenId = payModel?.payer?.openid ?? "",
Currency_Type = payModel.amount.payer_currency,
Institution_Type = "",
Card_Type = 0,
Remarks = "教育订单信息财务单据:" + frid,
Pay_Result = 0,
Pay_Date = myDt,
Payer_Id = orderModle.GuestId,
Payer_Type = 0,
Data_Source = frid,
RB_Group_Id = orderModle.Group_Id,
RB_Branch_Id = orderModle.School_Id,
IsRefund = 0,
RefundTrade_Order = "",
RefundMoney = 0,
RefundStatus = 0,
FinanceId = 0,
};
}
bool result = educationContractModule.SetEducationContractFinance(model, orderRecordModel);
return result ? ApiResult.Success("") : ApiResult.Failed("失败");
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment