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);
        }
    }
Beispiel #2
0
        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");
        }
Beispiel #3
0
        /// <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));
        }