Added docs and test

This commit is contained in:
Savya Bikram Shah
2026-05-07 17:33:26 +05:45
parent 3c17829453
commit 9f620084b2
112 changed files with 589 additions and 574 deletions

View File

@@ -0,0 +1,22 @@
using System;
namespace Darkmatter.Fonepay
{
public sealed class FonepayError : Exception
{
public int ErrorCode { get; }
public string Docs { get; }
public FonepayError(int errorCode, string message, string docs)
: base(message)
{
ErrorCode = errorCode;
Docs = docs ?? throw new ArgumentNullException(nameof(docs));
}
public override string ToString()
{
return $"{base.ToString()} (ErrorCode: {ErrorCode}, Docs: {Docs})";
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 46adc238f3552442bad6f68d9b2ee68a

View File

@@ -0,0 +1,29 @@
using System;
namespace Darkmatter.Fonepay
{
/// <summary>
/// User-facing QR request. Credentials (merchantCode/username/password) and the
/// HMAC dataValidation are injected by FonepayApiClient at send time.
/// </summary>
[Serializable]
public struct QrRequest
{
public float amount;
public string remarks1;
public string remarks2;
}
[Serializable]
internal struct QrRequestPayload
{
public float amount;
public string prn;
public string remarks1;
public string remarks2;
public string merchantCode;
public string dataValidation;
public string username;
public string password;
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 255c2e13d0ed54987904cd65a5349d29

View File

@@ -0,0 +1,29 @@
using System;
using UnityEngine;
namespace Darkmatter.Fonepay
{
[Serializable]
public struct QrResult
{
public string message;
public Texture2D qrCode;
public string status;
public int statusCode;
public bool success;
public string thirdpartyQrWebSocketUrl;
public string qrMessage;
}
[Serializable]
internal struct QrResponse
{
public string message;
public string qrMessage;
public string status;
public int statusCode;
public bool success;
public string thirdpartyQrWebSocketUrl;
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 405247a27c684f08ab11d6ea33d250c0
timeCreated: 1778138521

View File

@@ -0,0 +1,32 @@
using System;
namespace Darkmatter.Fonepay
{
/// <summary>
/// User-facing tax refund request. Credentials and HMAC dataValidation are
/// injected by FonepayApiClient at send time.
/// </summary>
[Serializable]
public struct TaxRefundRequest
{
public string fonepayTraceId;
public string merchantPRN;
public string invoiceNumber;
public DateTime invoiceDate;
public float transactionAmount;
}
[Serializable]
internal struct TaxRefundRequestPayload
{
public string fonepayTraceId;
public string merchantPRN;
public string invoiceNumber;
public string invoiceDate;
public float transactionAmount;
public string merchantCode;
public string dataValidation;
public string username;
public string password;
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 328f1e46b5a941bbbf5c0e8294fc9c34
timeCreated: 1778140313

View File

@@ -0,0 +1,9 @@
namespace Darkmatter.Fonepay
{
public struct TaxRefundResponse
{
public string fonepayTraceId;
public string message;
public bool success;
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: ccdcd51d0dc843eabdb25aa3312bd91a
timeCreated: 1778140771

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 0b231c6bbbdf4b519ac94e2d745b84c4
timeCreated: 1778143935

View File

@@ -0,0 +1,9 @@
namespace Darkmatter.Fonepay
{
public enum PaymentOutcome
{
Failed,
Complete,
CancelledByUser
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: b18f877972094e3993a95d2ae363f12a

View File

@@ -0,0 +1,27 @@
using System;
namespace Darkmatter.Fonepay
{
[Serializable]
public struct QRPaymentStatus
{
public string remarks1;
public string remarks2;
public string transactionDate;
public string productNumber;
public float amount;
public string message;
public bool success;
public string commissionType;
public float commissionAmount;
public float totalCalculatedAmount;
public bool paymentSuccess;
public PaymentOutcome Outcome => (success, paymentSuccess) switch
{
(true, true) => PaymentOutcome.Complete,
(true, false) => PaymentOutcome.CancelledByUser,
(false, _) => PaymentOutcome.Failed,
};
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 5ee6badc7f924737865c86113de9d2ac
timeCreated: 1778144200

View File

@@ -0,0 +1,12 @@
using System;
namespace Darkmatter.Fonepay
{
[Serializable]
public struct QRVerificationStatus
{
public bool success;
public string message;
public bool qrVerified;
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: f26424156fc543c487793821806dd8c7
timeCreated: 1778144700

View File

@@ -0,0 +1,9 @@
using System;
namespace Darkmatter.Fonepay
{
[Serializable]
public struct TransactionStatus
{
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: d83df4253afa4d4b968ad3b8c88da203
timeCreated: 1778143652

View File

@@ -0,0 +1,14 @@
using System;
using UnityEngine;
namespace Darkmatter.Fonepay
{
[Serializable]
public struct WebsocketMessage<T>
{
public string merchantId;
public string deviceId;
public string transactionStatus;
public T Status => JsonUtility.FromJson<T>(transactionStatus);
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: f74983b79502486a891686f80f33737c
timeCreated: 1778143616