USE [FastMoneyPro_Remit] GO /****** Object: StoredProcedure [dbo].[ws_proc_PayTXNConfirm] Script Date: 9/27/2019 1:30:14 PM ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROC [dbo].[ws_proc_PayTXNConfirm] ( @ACCESSCODE VARCHAR(50) ,@USERNAME VARCHAR(50) ,@PASSWORD VARCHAR(50) ,@REFNO VARCHAR(20) ,@AGENT_SESSION_ID VARCHAR(150) ,@PAY_TOKEN_ID BIGINT = NULL ,@RECEIVER_ID_TYPE VARCHAR(20) = NULL ,@RECEIVER_ID_NO VARCHAR(20) = NULL ,@RECEIVER_ID_ISSUE_PLACE VARCHAR(20) = NULL ,@RECEIVER_ID_ISSUE_DATE VARCHAR(20) = NULL ,@RECEIVER_DOB VARCHAR(20) = NULL ,@REMARKS VARCHAR(20) = '' ,@RECEIVER_OCCUPATION VARCHAR(20) = NULL ) AS SET NOCOUNT ON; SET XACT_ABORT ON; BEGIN TRY DECLARE @apiRequestId BIGINT INSERT INTO apiRequestLogPay( ACCESSCODE ,USERNAME ,PASSWORD ,REFNO ,AGENT_SESSION_ID ,PAY_TOKEN_ID ,requestedDate ) SELECT @ACCESSCODE ,@USERNAME ,@PASSWORD ,@REFNO ,@AGENT_SESSION_ID ,@PAY_TOKEN_ID ,GETDATE() SET @apiRequestId = SCOPE_IDENTITY() DECLARE @errCode INT, @controlNoEnc VARCHAR(50) = dbo.FNAENcryptString(@REFNO) DECLARE @autMsg VARCHAR(500), @errorCode VARCHAR(10), @errorMsg VARCHAR(MAX) EXEC ws_proc_checkAuthntication @USERNAME, @PASSWORD, @ACCESSCODE, @errCode OUT, @autMsg OUT IF @errCode = '1' BEGIN SELECT @errorCode = '1002', @errorMsg = ISNULL(@autMsg,'Authentication Fail') EXEC ws_proc_responseLog @flag = 'p', @requestId = @apiRequestId, @errorCode = @errorCode, @errorMsg = @errorMsg, @remarks = @remarks SELECT @errorCode CODE, @errorMsg MESSAGE, @AGENT_SESSION_ID AGENT_SESSION_ID, Confirm_ID = NULL, PAYOUT_COMM = NULL, REFNO = @REFNO RETURN END IF EXISTS(SELECT 'X' FROM applicationUsers WITH (NOLOCK) WHERE userName = @USERNAME AND forceChangePwd = 'Y') BEGIN SELECT @errorCode = '1002', @errorMsg = 'You are required to change your password' EXEC ws_proc_responseLog @flag = 'p', @requestId = @apiRequestId, @errorCode = @errorCode, @errorMsg = @errorMsg, @remarks = @remarks SELECT @errorCode CODE, @errorMsg MESSAGE, @AGENT_SESSION_ID AGENT_SESSION_ID, Confirm_ID = NULL, PAYOUT_COMM = NULL, REFNO = @REFNO RETURN END ------------------VALIDATION------------------------------- IF @AGENT_SESSION_ID IS NULL BEGIN SELECT '1001' CODE,'AGENT SESSION ID Field is Required' MESSAGE ,@AGENT_SESSION_ID AGENT_SESSION_ID, Confirm_ID = NULL, PAYOUT_COMM = NULL, REFNO = @REFNO RETURN END IF @REFNO IS NULL BEGIN SELECT @errorCode = '1001', @errorMsg = 'REFNO Field is Required' EXEC ws_proc_responseLog @flag = 'p', @requestId = @apiRequestId, @errorCode = @errorCode, @errorMsg = @errorMsg, @remarks = @remarks SELECT @errorCode CODE, @errorMsg MESSAGE, @AGENT_SESSION_ID AGENT_SESSION_ID, Confirm_ID = NULL, PAYOUT_COMM = NULL, REFNO = @REFNO RETURN END IF ISNUMERIC(@REFNO) = 0 AND @REFNO IS NOT NULL BEGIN SELECT @errorCode = '2003', @errorMsg = 'Technical Error: REFNO must be numeric' EXEC ws_proc_responseLog @flag = 'p', @requestId = @apiRequestId, @errorCode = @errorCode, @errorMsg = @errorMsg, @remarks = @remarks SELECT @errorCode CODE, @errorMsg MESSAGE, @AGENT_SESSION_ID AGENT_SESSION_ID, Confirm_ID = NULL, REFNO = @REFNO RETURN END IF @PAY_TOKEN_ID IS NULL BEGIN SELECT @errorCode = '1001', @errorMsg = 'PAY TOKEN ID Field is Required' EXEC ws_proc_responseLog @flag = 'p', @requestId = @apiRequestId, @errorCode = @errorCode, @errorMsg = @errorMsg, @remarks = @remarks SELECT @errorCode CODE, @errorMsg MESSAGE, @AGENT_SESSION_ID AGENT_SESSION_ID, Confirm_ID = NULL, PAYOUT_COMM = NULL, REFNO = @REFNO RETURN; END IF @RECEIVER_ID_TYPE IS NULL BEGIN SELECT @errorCode = '1005', @errorMsg = 'RECEIVER ID Field is Required' EXEC ws_proc_responseLog @flag = 'p', @requestId = @apiRequestId, @errorCode = @errorCode, @errorMsg = @errorMsg, @remarks = @remarks SELECT @errorCode CODE, @errorMsg MESSAGE, @AGENT_SESSION_ID AGENT_SESSION_ID, Confirm_ID = NULL, PAYOUT_COMM = NULL, REFNO = @REFNO RETURN END IF @RECEIVER_ID_NO IS NULL BEGIN SELECT @errorCode = '1005', @errorMsg = 'RECEIVER ID NUMBER Field is Required' EXEC ws_proc_responseLog @flag = 'p', @requestId = @apiRequestId, @errorCode = @errorCode, @errorMsg = @errorMsg, @remarks = @remarks SELECT @errorCode CODE, @errorMsg MESSAGE, @AGENT_SESSION_ID AGENT_SESSION_ID, Confirm_ID = NULL, PAYOUT_COMM = NULL, REFNO = @REFNO RETURN END IF @RECEIVER_DOB IS NOT NULL AND ISDATE(@RECEIVER_DOB) = 0 BEGIN SELECT @errorCode = '1005', @errorMsg = 'RECEIVER DOB Field is not a valid date' EXEC ws_proc_responseLog @flag = 'p', @requestId = @apiRequestId, @errorCode = @errorCode, @errorMsg = @errorMsg, @remarks = @remarks SELECT @errorCode CODE, @errorMsg MESSAGE, @AGENT_SESSION_ID AGENT_SESSION_ID, Confirm_ID = NULL, PAYOUT_COMM = NULL, REFNO = @REFNO RETURN END DECLARE @pAgent INT, @pAgentName VARCHAR(200), @pSuperAgent INT, @pSuperAgentName VARCHAR(100), @tranId BIGINT, @tranStatus VARCHAR(30), @tokenId VARCHAR(40), @paymentMethod VARCHAR(100), @lock_status VARCHAR(50), @lock_by VARCHAR(50), @status VARCHAR(50), @pAgentComm MONEY -- PICK AGENTID ,COUNTRY FROM USER SELECT @pAgent = agentId FROM applicationUsers WITH(NOLOCK) WHERE userName = @USERNAME AND ISNULL(isDeleted, 'N') = 'N' AND isActive = 'Y' SELECT @pAgentName = sAgentName,@pSuperAgent = sSuperAgent,@pSuperAgentName = sSuperAgentName FROM dbo.FNAGetBranchFullDetails(@pAgent) SELECT @tranId = rt.id ,@tranStatus = rt.tranStatus ,@tokenId = rt.payTokenId ,@paymentMethod = rt.paymentMethod ,@lock_status = rt.lockStatus ,@lock_by = rt.lockedBy ,@status = rt.payStatus ,@pAgentComm = rt.pAgentComm FROM RemitTran rt WITH(NOLOCK) INNER JOIN TranSenders sen WITH(NOLOCK) ON rt.id = sen.tranId INNER JOIN TranReceivers rec WITH(NOLOCK) ON rt.id = rec.tranId WHERE controlNo = @controlNoEnc AND pAgent = @pAgent AND tranStatus = 'Payment' AND payStatus = 'Unpaid' AND paymentMethod = 'Cash Payment' AND lockStatus = 'locked' IF @tranStatus IS NULL BEGIN SELECT @errorCode = '2003', @errorMsg = 'Transaction does not exist. Please check your GME No(GME NUMBER).' EXEC ws_proc_responseLog @flag = 'p', @requestId = @apiRequestId, @errorCode = @errorCode, @errorMsg = @errorMsg, @remarks = @remarks SELECT @errorCode CODE, @errorMsg MESSAGE, @AGENT_SESSION_ID AGENT_SESSION_ID, Confirm_ID = NULL, PAYOUT_COMM = NULL, REFNO = @REFNO RETURN END IF (@lock_by <> @USERNAME) BEGIN SELECT @errorCode = '2003', @errorMsg = 'You are not authorized to pay: ' + @REFNO + '' EXEC ws_proc_responseLog @flag = 'p', @requestId = @apiRequestId, @errorCode = @errorCode, @errorMsg = @errorMsg, @remarks = @remarks SELECT @errorCode CODE, @errorMsg MESSAGE, @AGENT_SESSION_ID AGENT_SESSION_ID, Confirm_ID = NULL, PAYOUT_COMM = NULL, REFNO = @REFNO RETURN END IF (@status = 'Paid') BEGIN SELECT @errorCode = '2001', @errorMsg = 'Transaction ' + @REFNO + ' is already PAID' EXEC ws_proc_responseLog @flag = 'p', @requestId = @apiRequestId, @errorCode = @errorCode, @errorMsg = @errorMsg, @remarks = @remarks SELECT @errorCode CODE, @errorMsg MESSAGE, @AGENT_SESSION_ID AGENT_SESSION_ID, Confirm_ID = NULL, PAYOUT_COMM = NULL, REFNO = @REFNO RETURN END --IF @paymentMethod <> 'Cash Payment' --BEGIN -- SELECT @errorCode = '2005', @errorMsg = 'This transaction is not Cash Pay Transaction' -- EXEC ws_proc_responseLog @flag = 'p', @requestId = @apiRequestId, @errorCode = @errorCode, @errorMsg = @errorMsg, @remarks = @remarks -- SELECT @errorCode CODE, @errorMsg MESSAGE, @AGENT_SESSION_ID AGENT_SESSION_ID, Confirm_ID = NULL, PAYOUT_COMM = NULL, REFNO = @REFNO -- RETURN; --END IF ISNULL(@PAY_TOKEN_ID, 0) <> ISNULL(@tokenId,1) BEGIN SELECT @errorCode = '1004', @errorMsg = 'Invalid Token ID' EXEC ws_proc_responseLog @flag = 'p', @requestId = @apiRequestId, @errorCode = @errorCode, @errorMsg = @errorMsg, @remarks = @remarks SELECT @errorCode CODE, @errorMsg MESSAGE, @AGENT_SESSION_ID AGENT_SESSION_ID, Confirm_ID = NULL, PAYOUT_COMM = NULL, REFNO = @REFNO RETURN; END --IF (@pAgent IS NOT NULL AND @expected_payoutagentid <> @pAgent) --BEGIN -- SELECT @errorCode = '2003', @errorMsg = 'This transaction belongs to : ' + @pAgentName -- EXEC ws_proc_responseLog @flag = 'p', @requestId = @apiRequestId, @errorCode = @errorCode, @errorMsg = @errorMsg, @remarks = @remarks -- SELECT @errorCode CODE, @errorMsg MESSAGE, @AGENT_SESSION_ID AGENT_SESSION_ID, Confirm_ID = NULL, PAYOUT_COMM = NULL, REFNO = @REFNO -- RETURN --END IF (@tranStatus LIKE '%Hold%') BEGIN SELECT @errorCode = '2006', @errorMsg = 'The Transaction is not approved. Kindly contact info@gmeremit.com to approve the transction.' EXEC ws_proc_responseLog @flag = 'p', @requestId = @apiRequestId, @errorCode = @errorCode, @errorMsg = @errorMsg, @remarks = @remarks SELECT @errorCode CODE, @errorMsg MESSAGE, @AGENT_SESSION_ID AGENT_SESSION_ID, Confirm_ID = NULL, PAYOUT_COMM = NULL, REFNO = @REFNO RETURN END IF (ISNULL(@tranStatus,'') <> 'Payment') BEGIN SELECT @errorCode = '2006', @errorMsg = 'This transaction is not currently available for payment. Kindly contact info@gmeremit.com.np for the details.' EXEC ws_proc_responseLog @flag = 'p', @requestId = @apiRequestId, @errorCode = @errorCode, @errorMsg = @errorMsg, @remarks = @remarks SELECT @errorCode CODE, @errorMsg MESSAGE, @AGENT_SESSION_ID AGENT_SESSION_ID, Confirm_ID = NULL, PAYOUT_COMM = NULL, REFNO = @REFNO RETURN END IF (ISNULL(@Status,'') <> 'Unpaid') BEGIN SELECT @errorCode = '2006', @errorMsg = 'This transaction is not currently available for payment. Kindly contact info@gmeremit.com.np for the details.' EXEC ws_proc_responseLog @flag = 'p', @requestId = @apiRequestId, @errorCode = @errorCode, @errorMsg = @errorMsg, @remarks = @remarks SELECT @errorCode CODE, @errorMsg MESSAGE, @AGENT_SESSION_ID AGENT_SESSION_ID, Confirm_ID = NULL, PAYOUT_COMM = NULL, REFNO = @REFNO RETURN END --IF (@lock_status <> 'locked') --BEGIN -- SELECT '2004' CODE -- ,'Transaction ' + @REFNO + ' is not in LOCK Stage' MESSAGE -- ,@AGENT_SESSION_ID AGENT_SESSION_ID -- ,Confirm_ID = NULL, REFNO = @REFNO -- RETURN --END DECLARE @Confirm_ID VARCHAR(40) SET @Confirm_ID = LEFT(CAST(ABS(CHECKSUM(NEWID())) AS VARCHAR(10)) + '0000000', 7) BEGIN TRANSACTION UPDATE remitTran SET pAgent = @pAgent ,pAgentName = @pAgentName ,pSuperAgent = @pSuperAgent ,pSuperAgentName = @pSuperAgentName ,lockStatus = 'unlocked' ,tranStatus = 'Paid' ,payStatus = 'Paid' ,paidDate = GETDATE() ,paidDateLocal = GETDATE() ,paidBy = @USERNAME ,payTokenId = @Confirm_ID ,postedBy = @USERNAME ,postedDate = GETDATE() WHERE controlNo = @controlNoEnc UPDATE tranReceivers SET idType = @RECEIVER_ID_TYPE ,idNumber = @RECEIVER_ID_NO ,idPlaceOfIssue = @RECEIVER_ID_ISSUE_PLACE ,issuedDate = @RECEIVER_ID_ISSUE_DATE ,occupation = @RECEIVER_OCCUPATION ,dob = @RECEIVER_DOB WHERE tranId = @tranId IF @@TRANCOUNT > 0 COMMIT TRANSACTION SELECT CODE = '0' ,MESSAGE = 'Transaction Paid Successfully Success' ,AGENT_SESSION_ID = @AGENT_SESSION_ID ,Confirm_ID = @Confirm_ID ,REFNO = @REFNO ,PAYOUT_COMM = @pAgentComm SELECT @errorCode = '0', @errorMsg = 'Pay Success' EXEC ws_proc_responseLog @flag = 'p', @requestId = @apiRequestId, @errorCode = @errorCode, @errorMsg = @errorMsg, @remarks = @remarks ---- pay voucher---- EXEC FastMoneyPro_Account.dbo.proc_remittanceVoucher_Paid @controlNo = @REFNO,@pAgent = @pAgent ,@USER = @USERNAME RETURN END TRY BEGIN CATCH IF @@TRANCOUNT > 0 ROLLBACK TRAN DECLARE @errorLogId BIGINT INSERT INTO Logs (errorPage, errorMsg, errorDetails, createdBy, createdDate) SELECT 'API SP Error',@errorMsg MESSAGE, 'ws_proc_PayTXNConfirm', @USERNAME, GETDATE() SET @errorLogId = SCOPE_IDENTITY() SELECT @errorCode = '9001', @errorMsg = 'Technical Error : ' + ERROR_MESSAGE() + ', Error Log Id : ' + CAST(@errorLogId AS VARCHAR) EXEC ws_proc_responseLog @flag = 'p', @requestId = @apiRequestId, @errorCode = @errorCode, @errorMsg = @errorMsg, @remarks = @remarks SELECT @errorCode CODE, 'Technical Error occurred, Error Log Id : ' + CAST(@errorLogId AS VARCHAR) MESSAGE, PAYOUT_COMM = NULL, @AGENT_SESSION_ID AGENT_SESSION_ID, Confirm_ID = NULL, REFNO = @REFNO END CATCH /* EXEC ws_proc_PayTXNConfirm @ACCESSCODE='GMKOR1037', @USERNAME='IMENepal',@PASSWORD='123456', @AGENT_SESSION_ID='1234567', @REFNO='80147248605', @PAY_TOKEN_ID='16829397' */ GO