private void threadProc() { while (!_isbreak) { SortedList <string, string> list = BusinessDao.GetNeedCheckDebitRecords(); Log.WriteDebugLog("StatusCheckThread::threadProc", "存在{0}个需要确认的订单。", list.Count); foreach (string orderId in list.Keys) { string target = list[orderId]; Log.WriteDebugLog("StatusCheckThread::threadProc", "{0} 准备开始确认订单的状态,渠道{1}。", orderId, target); LoanBank bank = new LoanBank(); string merchantCode = String.Empty; InquriyTransferResponse response = bank.DuitkuOrderStatusInquiryRequest(orderId, target); if (response.statusCode == "00") { CallbackRequestModel callback = new CallbackRequestModel(); callback.amount = response.amount; callback.merchantOrderId = response.merchantOrderId; DataProviderResultModel resultModel = DuitkuProvider.SetDuitkuPaybackRecordStaus(callback); if (resultModel.result == Result.SUCCESS) { Log.WriteDebugLog("StatusCheckThread::threadProc", "[{0}]重做成功了。", orderId); } else { Log.WriteDebugLog("StatusCheckThread::threadProc", "[{0}]接口调用成功,但是数据库操作失败了。", orderId); } } else { Log.WriteDebugLog("StatusCheckThread::threadProc", "[{0}]重做失败了。", orderId); } ///重做次数+1 BusinessDao.UpdateRedoUserPayBackRecordStatus(orderId); } Thread.Sleep(10 * 60 * 1000); } }
public ActionResult <string> CallbackRequest([FromForm] CallbackRequestModel request) { Redis redis = new Redis(); string key = String.Format("CallbackRequest_{0}", request.merchantOrderId); try { if (!request.IsEmpty()) { if (redis.LockTake(key, 1, 20)) { try { string signature = String.Empty; string duitkuKey = getDuitkuKey(request.merchantCode); signature = request.merchantCode + request.amount + request.merchantOrderId + duitkuKey; signature = HelperProvider.MD532(signature); DataProviderResultModel result = DuitkuProvider.SaveDuitkuCallbackRecord(request); string guid = Convert.ToString(result.data); ///记录调用日志,最终需要写入数据库 Log.WriteLog("DuitkuController::CallbackRequest", "{0} - {1}", result.result, JsonConvert.SerializeObject(request)); //验证签名 if (signature == request.signature) { Log.WriteDebugLog("DuitkuController::CallbackRequest", "签名验证通过:{0} - 传入为:{1}", signature, request.signature); ///验证通过 DataProviderResultModel ret = DuitkuProvider.SetDuitkuPaybackRecordStaus(request); if (ret.result == Result.SUCCESS) { Log.WriteDebugLog("DuitkuController::CallbackRequest", "回调操作成功。"); DuitkuProvider.SetDuitkuCallbackRecordStatus(guid, 1); return("Success"); } else { Log.WriteErrorLog("DuitkuController::CallbackRequest", "回调操作失败。"); DuitkuProvider.SetDuitkuCallbackRecordStatus(guid, -1); return("Error"); } } else { Log.WriteDebugLog("DuitkuController::CallbackRequest", "签名验证没有通过:{0} - 传入为:{1}", signature, request.signature); ///签名不通过 return("Bad Signature"); } } finally { redis.LockRelease(key, 1); } } else { Log.WriteDebugLog("DuitkuController::CallbackRequest", "获取锁失败。{0}", JsonConvert.SerializeObject(request)); return("Get lock failed."); } } else { Log.WriteDebugLog("DuitkuController::CallbackRequest", "参数异常,缺少必要的参数:{0}", JsonConvert.SerializeObject(request)); return("Bad Parameter"); } } catch (Exception ex) { Log.WriteErrorLog("DuitkuController::CallbackRequest", "{0}", ex.Message); } finally { redis.LockRelease(key, 1); } return("Error"); }
/// <summary> /// 编辑用户联系信息接口 /// </summary> /// <returns></returns> public ActionResult <string> InquiryRequest([FromForm] DuitkuInquriyRequestModel request) { Redis redis = new Redis(); string key = String.Format("InquiryRequest_{0}", request.vaNo); DuitkuInquriyResponseModel response = new DuitkuInquriyResponseModel(); try { if (redis.LockTake(key, 1, 10)) { Log.WriteDebugLog("DuitkuController::InquiryRequest", "param is {0}", JsonConvert.SerializeObject(request)); string signature = String.Empty; string duitkuKey = getDuitkuKey(request.merchantCode); signature = request.merchantCode + request.action + request.vaNo + request.session + duitkuKey; signature = HelperProvider.MD532(signature); if (signature != request.signature) { response.statusCode = "01"; response.statusMessage = "signature is incorrect."; Log.WriteDebugLog("DuitkuController::InquiryRequest", "签名验证没有通过:{0} - 传入为:{1}", signature, request.signature); } else { response.statusCode = "01"; response.statusMessage = "Request is incorrect."; if (request.IsEmpty()) { response.statusCode = "01"; response.statusMessage = "Request content is empty."; Log.WriteDebugLog("DuitkuController::InquiryRequest", "参数异常,缺少必要的参数:{0}", JsonConvert.SerializeObject(request)); } else { /// 868005 = A,868007 = B if (request.bin == "868005" || request.bin == "868007" || request.bin == "119905" || request.bin == "119906") { string vaNo = request.vaNo.Replace(request.bin, ""); if (vaNo.Length == (16 - request.bin.Length)) { string type = vaNo.Substring(0, 1); string debitId = vaNo.Substring(1); int iDebitId = -1; request.merchantCode = String.Format("{0}{1}", request.bin, request.merchantCode); int.TryParse(debitId, out iDebitId); ///3 - 延期;4 - 还款 if (type == "3") { var ret = DebitProvider.GetUserExtendRecord(iDebitId); if (ret.result == Result.SUCCESS) { var model = ret.data as DebitExtendModel; //状态为未还款,还款失败,逾期才能进行延期 if (model.status == 1 || model.status == -2 || model.status == 4) { var result = DuitkuProvider.CreatePayBack(model.userId, iDebitId, type, request.merchantCode); if (result.result == Result.SUCCESS) { response.statusCode = "00"; response.statusMessage = "success"; response.merchantOrderId = Convert.ToString(result.data); response.vaNo = request.vaNo; response.amount = "0";//Convert.ToString(model.extendFee + model.overdueMoney); response.name = "DanaPinjam"; } else { response.statusCode = "01"; response.statusMessage = "Create extend record incorrect."; Log.WriteErrorLog("DuitkuController::InquiryRequest", "Create extend record incorrect:{0} - {1}", iDebitId, result.message); } } else { response.statusCode = "01"; response.statusMessage = "Only within loan, overdue, payback failed , can request extend"; Log.WriteErrorLog("DuitkuController::InquiryRequest", "记录的状态为:{0},不能申请延期 - {1}", model.status, iDebitId); } } else { response.statusCode = "01"; response.statusMessage = ret.message; Log.WriteErrorLog("DuitkuController::InquiryRequest", "Get extend record incorrect:{0} - {1}", iDebitId, ret.message); } } else if (type == "4") { var ret = DebitProvider.GetUserDebitRecord(iDebitId); if (ret.result == Result.SUCCESS) { var model = ret.data as DebitInfoModel; if (model.status == -2 || model.status == 1 || model.status == 4) { var result = DuitkuProvider.CreatePayBack(model.userId, iDebitId, type, request.merchantCode); if (result.result == Result.SUCCESS) { response.statusCode = "00"; response.statusMessage = "success"; response.merchantOrderId = Convert.ToString(result.data); response.vaNo = request.vaNo; response.amount = "0";//Convert.ToString(model.payBackMoney + model.overdueMoney); response.name = "DanaPinjam"; } else { response.statusCode = "01"; response.statusMessage = "Create payback record incorrect."; Log.WriteErrorLog("DuitkuController::InquiryRequest", "Create payback record incorrect:{0} - {1}", iDebitId, result.message); } } else { response.statusCode = "01"; response.statusMessage = "Only within loan, overdue, payback failed , can request payback."; Log.WriteErrorLog("DuitkuController::InquiryRequest", "记录的状态为:{0},不能申请延期 - {1}", model.status, iDebitId); } } else { response.statusCode = "01"; response.statusMessage = ret.message; Log.WriteErrorLog("DuitkuController::InquiryRequest", "get debit record incorrect.{0} message = {1}", iDebitId, ret.message); } } else { response.statusCode = "01"; Log.WriteErrorLog("DuitkuController::InquiryRequest", "param is incorrect. request.type:{0} debitId = {1}", type, iDebitId); } } else { response.statusCode = "01"; response.statusMessage = "va is incorrect."; Log.WriteErrorLog("DuitkuController::InquiryRequest", "va is incorrect. request.type:{0}", vaNo); } } else { response.statusCode = "01"; Log.WriteErrorLog("DuitkuController::InquiryRequest", "param is incorrect. request:{0}", JsonConvert.SerializeObject(request)); } } } redis.LockRelease(key, 1); } else { Log.WriteErrorLog("DuitkuController::InquiryRequest", "get lock fail.{0}", JsonConvert.SerializeObject(request)); } } catch (Exception ex) { response.statusCode = "01"; response.statusMessage = ex.Message; Log.WriteErrorLog("DuitkuController::InquiryRequest", "异常:{0}", ex.Message); } return(JsonConvert.SerializeObject(response)); }