public static void updateClient(MGClient _client, MGPurchase _purchase) { List <MGClient> clients = new List <MGClient>(); using (SqlConnection connection = new SqlConnection(LUDBcononnectionString)) { using (SqlCommand command = new SqlCommand()) { connection.Open(); command.CommandText = "[dbo].[SP_UpdateClient]"; command.CommandType = CommandType.StoredProcedure; command.Connection = connection; command.Prepare(); command.Parameters.Add("@clientId", SqlDbType.NVarChar).Value = _client.Id; command.Parameters.Add("@name", SqlDbType.NVarChar).Value = _client.Name; command.Parameters.Add("@telNumCt", SqlDbType.NVarChar).Value = _client.TelContact; command.Parameters.Add("@telNumApp", SqlDbType.NVarChar).Value = _client.TelMGProd; command.Parameters.Add("@street", SqlDbType.NVarChar).Value = _client.Street; command.Parameters.Add("@city", SqlDbType.NVarChar).Value = _client.City; command.Parameters.Add("@postalCode", SqlDbType.NVarChar).Value = _client.PCode; command.Parameters.Add("@tokensLeft", SqlDbType.Int).Value = _client.Tokens; command.Parameters.Add("@packQt", SqlDbType.Int).Value = _purchase.Quantity; command.Parameters.Add("@packCost", SqlDbType.Decimal).Value = _purchase.Cost; command.Parameters.Add("@packCastingId", SqlDbType.Int).Value = _purchase.PackId; command.ExecuteNonQuery(); } } }
static void Main(string[] args) { // MGClient client = CreateClientWithEnvVarExample(); MGClient client = CreateClientWithExplicitConfig(); DepositExample(client); QueryOrderExample(client); PayoutExample(client); ParseCallbackExample(client); }
public static MGClient CreateClientWithExplicitConfig() { // Credentials are hardcoded for showcase purposes - do not use hardcoded credentials on live environment MGClient clientWithConfig = new MGClient( merchantSecret: "merchant-secret-key", endpointId: "400007", merchantId: "merchant-id", requestUrl: "https://secure.zotapay-stage.com" ); return(clientWithConfig); }
public async Task CardDepositShouldShowFullErrorMessage() { // Arrange MGDepositCardRequest DepositOrderRequest = Mocks.GetFullDepositCardRequest(); MGClient clientWithConfig = Mocks.GetMockedMGClient(null); string expectedErrorMessage = "The CardExpirationYear field is required. | The CardCvv field is required. | The CardExpirationMonth field is required. | The CardHolderName field is required. | The CardNumber field is required."; // Act var actualResult = await clientWithConfig.InitCardDeposit(DepositOrderRequest); // Assert Assert.IsFalse(actualResult.IsSuccess); Assert.AreEqual(expectedErrorMessage, actualResult.Message); }
public void MGClientConstructorShouldFail() { // Arrange MGClient client = new MGClient(useConstantUrl: false); MGDepositRequest request = new MGDepositRequest(); string expectedErrorMessage = "MGClient missing parameters: endpoint merchantSecret requestUrl merchantId"; // Act MGDepositResult actual = client.InitDeposit(request).Result; // Assert Assert.IsFalse(actual.IsSuccess); Assert.AreEqual(expectedErrorMessage, actual.Message); }
public void MGClientProperlyCreatedWithStringConstructor() { // Arrange string merchantSecret = "12345"; string endpointId = "400009"; string requestUrl = "https://google.com"; string merchantId = "merchant_id"; // Act MGClient client = new MGClient(merchantSecret, endpointId, requestUrl, merchantId); // Assert Assert.IsNotNull(client); }
public void PayoutOrderSuccess() { // Arrange MGPayoutResult expectedResult = new MGPayoutResult() { IsSuccess = true, Code = "200", Message = null, Data = new MGPayoutData { orderID = "123456", merchantOrderID = "merch-order" } }; string messageSuccess = "{ \"code\": \"200\", \"data\": { \"orderID\": \"123456\", \"merchantOrderID\": \"merch-order\"} }"; var httpMock = Mocks.GetMockedHttp(HttpStatusCode.OK, messageSuccess); MGClient client = Mocks.GetMockedMGClient(httpClient: httpMock); var payoutRequest = new MGPayoutRequest { MerchantOrderID = "Q44mHY18", CustomerBankCode = "BBL", OrderAmount = "100.00", CustomerBankAccountNumber = "1234567", CustomerBankAccountName = "Don Jhoe", CustomerEmail = "*****@*****.**", CustomerBankBranch = "bankBranch", CustomerBankProvince = "province", CustomerBankArea = "bankArea", CustomerBankRoutingNumber = "000", OrderCurrency = "USD", MerchantOrderDesc = "desc", CustomerFirstName = "John", CustomerLastName = "Doe", CustomerBankAddress = "The Moon, hill 42", CustomerBankZipCode = "1303", CustomerPhone = "123", CustomerIP = "127.0.0.1", RedirectUrl = "https://example-merchant.com/payment/return", CheckoutUrl = "https://example-merchant.com/deposit", CallbackUrl = "https://example-merchant.com/callback", }; // Act MGPayoutResult actual = client.InitPayout(payoutRequest).Result; // Assert Assert.IsTrue(actual.IsSuccess); Assert.AreEqual(expectedResult.Code, actual.Code); Assert.AreEqual(expectedResult.Message, actual.Message); Assert.AreEqual(expectedResult.Data.orderID, actual.Data.orderID); Assert.AreEqual(expectedResult.Data.merchantOrderID, actual.Data.merchantOrderID); }
public void DepositSuccess() { // Arrange MGDepositResult expectedResult = new MGDepositResult() { IsSuccess = true, Code = "200", Message = null, Data = new DepositResponseData() { DepositUrl = "https://api.zotapay.com/api/v1/deposit/init/8b3a6b89697e8ac8f45d964bcc90c7ba41764acd/", MerchantOrderID = "QvE8dZshpKhaOmHY", OrderID = "8b3a6b89697e8ac8f45d964bcc90c7ba41764acd", } }; string messageSuccess = "{ \"code\": \"200\", \"data\": { \"depositUrl\": \"https://api.zotapay.com/api/v1/deposit/init/8b3a6b89697e8ac8f45d964bcc90c7ba41764acd/\", \"merchantOrderID\": \"QvE8dZshpKhaOmHY\", \"orderID\": \"8b3a6b89697e8ac8f45d964bcc90c7ba41764acd\" } }"; var httpMock = Mocks.GetMockedHttp(HttpStatusCode.OK, messageSuccess); MGClient client = Mocks.GetMockedMGClient(httpClient: httpMock); var DepositRequest = new MGDepositRequest { MerchantOrderID = "QvE8dZshpKhaOmHY", OrderAmount = "100.00", CustomerEmail = "*****@*****.**", OrderCurrency = "USD", MerchantOrderDesc = "desc", CustomerFirstName = "John", CustomerLastName = "Doe", CustomerAddress = "The Moon, hill 42", CustomerCity = "Sofia", CustomerCountryCode = "BG", CustomerZipCode = "1303", CustomerPhone = "123", CustomerIP = "127.0.0.1", RedirectUrl = "https://example-merchant.com/payment/return", CheckoutUrl = "https://example-merchant.com/deposit" }; // Act MGDepositResult actual = client.InitDeposit(DepositRequest).Result; // Assert Assert.IsTrue(actual.IsSuccess); Assert.AreEqual(expectedResult.Data.DepositUrl, actual.Data.DepositUrl); Assert.AreEqual(expectedResult.Data.MerchantOrderID, actual.Data.MerchantOrderID); Assert.AreEqual(expectedResult.Data.OrderID, actual.Data.OrderID); Assert.AreEqual(expectedResult.Code, actual.Code); Assert.AreEqual(expectedResult.Message, actual.Message); }
public void DepositCatchesUnexpectedResponse() { // Arrange string responseMessage = "!@#$%^&*() -- not a valid json message, that will cause an exception -- !@#$%^&*()"; var httpMock = Mocks.GetMockedHttp(HttpStatusCode.InternalServerError, responseMessage); MGClient client = Mocks.GetMockedMGClient(httpClient: httpMock); var DepositRequest = Mocks.GetFullDepositRequest(); string expectedErrorMessage = "Unexpected character encountered while parsing value: !. Path '', line 0, position 0.: \n" + "Raw Response: !@#$%^&*() -- not a valid json message, that will cause an exception -- !@#$%^&*()"; // Act MGDepositResult actual = client.InitDeposit(DepositRequest).Result; // Assert Assert.IsFalse(actual.IsSuccess); Assert.AreEqual(expectedErrorMessage, actual.Message); }
public static void ParseCallbackExample(MGClient client) { string exampleRawJson = "{\"type\":\"SALE\",\"status\":\"APPROVED\",\"errorMessage\":\"\",\"endpointID\":\"400009\",\"processorTransactionID\":\"279198e3-7277-4e28-a490-e02deec1a3cc\",\"orderID\":\"32453550\",\"merchantOrderID\":\"QvE8dZshpKhaOmHY1\",\"amount\":\"100.00\",\"currency\":\"USD\",\"customerEmail\":\"[email protected]\",\"customParam\":\"\",\"extraData\":{\"dcc\":false,\"paymentMethod\":\"ONLINE\"},\"originalRequest\":{\"merchantOrderID\":\"QvE8dZshpKhaOmHY1\",\"merchantOrderDesc\":\"desc\",\"orderAmount\":\"100.00\",\"orderCurrency\":\"USD\",\"customerEmail\":\"[email protected]\",\"customerFirstName\":\"John\",\"customerLastName\":\"Doe\",\"customerAddress\":\"The Moon, hill 42\",\"customerCountryCode\":\"BG\",\"customerCity\":\"Sofia\",\"customerZipCode\":\"1303\",\"customerPhone\":\"123\",\"customerIP\":\"127.0.0.1\",\"redirectUrl\":\"https://example-merchant.com/payment/return\",\"callbackUrl\":\"https://ens39ypv7jld8.x.pipedream.net\",\"checkoutUrl\":\"https://example-merchant.com/deposit\",\"signature\":\"0ca81b0354fd669b602b683ca11859635a1831d438ef276289ab653a310c8f76\",\"requestedAt\":\"0001-01-01T00:00:00Z\"},\"signature\":\"7df9a67035e2c2f145c51653bd25aa56658954dac114ce8f77ddc4f991ecab1a\"}"; MGCallback callback = client.Parse(exampleRawJson); // handle errors or unverified signatures if (!callback.IsVerified) { string reason = callback.ErrorMessage; // ... return; } string orderStatus = callback.Status; Console.WriteLine(orderStatus); }
public static void PayoutExample(MGClient client) { // Assemble payout order data MGPayoutRequest payoutRequest = new MGPayoutRequest { MerchantOrderID = "Q44mHY18", CustomerBankCode = "BBL", OrderAmount = "100.00", CustomerBankAccountNumber = "1234567", CustomerBankAccountName = "Don Jhoe", CustomerEmail = "*****@*****.**", CustomerBankBranch = "bankBranch", CustomerBankProvince = "province", CustomerBankArea = "bankArea", CustomerBankRoutingNumber = "000", OrderCurrency = "USD", MerchantOrderDesc = "desc", CustomerFirstName = "John", CustomerLastName = "Doe", CustomerBankAddress = "The Moon, hill 42", CustomerBankZipCode = "1303", CustomerPhone = "123", CustomerIP = "127.0.0.1", RedirectUrl = "https://example-merchant.com/payment/return", CheckoutUrl = "https://example-merchant.com/deposit", CallbackUrl = "https://ens39ypv7jld8.x.pipedream.net", }; // Initiate deposit order request MGPayoutResult resp = client.InitPayout(payoutRequest).Result; // Check the request status if (!resp.IsSuccess) { // handle unsuccessful request string reasonForFailure = resp.Message; // ... return; } // Capture ZotaPay order id string zotapayOrderId = resp.Data.orderID; Console.WriteLine(zotapayOrderId); }
public void EmptyRequestShowsFullErrorMessage() { // Arrange MGClient clientMock = Mocks.GetMockedMGClient(null); MGDepositRequest depositRequest = new MGDepositRequest(); string expectedErrorMessage = "The MerchantOrderID field is required. | The MerchantOrderDesc field is required. |" + " The OrderAmount field is required. | The OrderCurrency field is required. | The CustomerFirstName field is required. |" + " The CustomerLastName field is required. | The CustomerAddress field is required. | The CustomerCountryCode field is required. |" + " The CustomerCity field is required. | The CustomerZipCode field is required. | The CustomerPhone field is required. |" + " The CustomerIP field is required. | The RedirectUrl field is required. | The CheckoutUrl field is required."; // Act MGDepositResult actualDepositResult = clientMock.InitDeposit(depositRequest).Result; // Assert Assert.IsFalse(actualDepositResult.IsSuccess); Assert.AreEqual(expectedErrorMessage, actualDepositResult.Message); }
public static MGClient CreateClientWithEnvVarExample() { /* * The following are to be set as environment variables: * "ZOTAPAY_MERCHANT_ID" * "ZOTAPAY_MERCHANT_SECRET_KEY" * "ZOTAPAY_ENDPOINT_ID" * "ZOTAPAY_REQUEST_URL"; */ // Environment variables set in the code only for showcase purposes - do not use hardcoded credentials on live environment Environment.SetEnvironmentVariable(Constants.ENV.ENDPOINT_ID, "400009"); Environment.SetEnvironmentVariable(Constants.ENV.MERCHANT_ID, "merchant-id"); Environment.SetEnvironmentVariable(Constants.ENV.MERCHANT_SECRET_KEY, "merchant-secret-key"); // ZotaPay's Meta Gate client constructed with environment variables MGClient client = new MGClient(useConstantUrl: true, environment: Constants.MGEnvironment.Sandbox); // Constants.MGEnvironment.Live return(client); }
public static void QueryOrderExample(MGClient client) { // Initialize query status payload & send request var queryStatusCheckRequest = new MGQueryTxnRequest { MerchantOrderID = "QvE8dZshpKhaOmHY1", OrderID = "32453550" }; MGQueryTxnResult orderResponse = client.CheckOrderStatus(queryStatusCheckRequest).Result; if (!orderResponse.IsSuccess) { // Check reason and handle failure string reason = orderResponse.Message; // ... return; } // Order status string status = orderResponse.Data.status; Console.WriteLine(status); }
public static void DepositExample(MGClient client) { // Assemble deposit order data MGDepositRequest DepositOrderRequest = new MGDepositRequest { MerchantOrderID = "QvE8dZshpKhaOmHY1", OrderAmount = "100.00", CustomerEmail = "*****@*****.**", OrderCurrency = "USD", MerchantOrderDesc = "desc", CustomerFirstName = "John", CustomerLastName = "Doe", CustomerAddress = "The Moon, hill 42", CustomerCity = "Sofia", CustomerCountryCode = "BG", CustomerZipCode = "1303", CustomerPhone = "123", CustomerIP = "127.0.0.1", RedirectUrl = "https://example-merchant.com/payment/return", CheckoutUrl = "https://example-merchant.com/deposit", CallbackUrl = "https://example-merchant.com/payment/callback", }; // Initiate deposit order request MGDepositResult resp = client.InitDeposit(DepositOrderRequest).Result; // Check the request status if (!resp.IsSuccess) { // handle unsuccessful request string reasonForFailure = resp.Message; // ... return; } // Redirect the end user to the payment url string paymentUrl = resp.Data.DepositUrl; Console.WriteLine(paymentUrl); }
public static List <MGClient> GetClients(String _search) { List <MGClient> clients = new List <MGClient>(); using (SqlConnection connection = new SqlConnection(LUDBcononnectionString)) { IDataReader dataReader; using (SqlCommand command = new SqlCommand()) { connection.Open(); command.CommandText = "[dbo].[SP_GetClientsByName]"; command.CommandType = CommandType.StoredProcedure; command.Connection = connection; command.Prepare(); command.Parameters.Add("@Param1", SqlDbType.NVarChar).Value = _search; dataReader = command.ExecuteReader(); MGClient client; while (dataReader.Read()) { client = new MGClient(); client.Name = dataReader.GetString(0); client.TelMGProd = dataReader.GetString(1); client.TelContact = dataReader.GetString(2); client.Street = dataReader.GetString(3); client.City = dataReader.GetString(4); client.PCode = dataReader.GetString(5); client.Tokens = dataReader.GetInt32(6); clients.Add(client); } } } return(clients); }
public static List <MGClient> GetClients() { List <MGClient> clients = new List <MGClient>(); using (IDbConnection connection = new SqlConnection(LUDBcononnectionString)) { IDataReader dataReader; using (IDbCommand command = new SqlCommand()) { connection.Open(); command.CommandText = "[SP_GetClients]"; command.CommandType = CommandType.StoredProcedure; command.Connection = connection; dataReader = command.ExecuteReader(); MGClient client; while (dataReader.Read()) { client = new MGClient(); client.Id = dataReader.GetInt32(0); client.Name = dataReader.GetString(1); client.TelMGProd = dataReader.GetString(2); client.TelContact = dataReader.GetString(3); client.Street = dataReader.GetString(4); client.City = dataReader.GetString(5); client.PCode = dataReader.GetString(6); client.Tokens = dataReader.GetInt32(7); clients.Add(client); } } } return(clients); }
public void DepositUnsuccessful() { // Arrange MGDepositResult expectedResult = new MGDepositResult() { IsSuccess = false, Code = "400", Message = "endpoint currency mismatch", Data = null, }; string responseMessage = "{ \"code\": \"400\", \"message\": \"endpoint currency mismatch\" } "; var httpMock = Mocks.GetMockedHttp(HttpStatusCode.BadRequest, responseMessage); MGClient client = Mocks.GetMockedMGClient(httpClient: httpMock); var DepositRequest = Mocks.GetFullDepositRequest(); // Act MGDepositResult actual = client.InitDeposit(DepositRequest).Result; // Assert Assert.IsFalse(actual.IsSuccess); Assert.AreEqual(expectedResult.Data, actual.Data); Assert.AreEqual(expectedResult.Code, actual.Code); Assert.AreEqual(expectedResult.Message, actual.Message); }