0.1.0
Fonepay Unity
Fonepay payment integration for Unity. Request QR codes, await payment confirmation over websocket, process tax refunds — all from a single async-friendly client.
Requirements
- Unity 6000.4+
- UniTask (for sample only — runtime uses
System.Threading.Tasks)
Setup
- Install the package via Package Manager (Git URL or local).
- Open Tools > Fonepay > Settings to create the
FonepayConfigasset and enter your merchant credentials. Credentials are kept out of source control and baked at build time. - (Optional) Window > Package Manager > Fonepay Unity > Samples > Import to drop the example MonoBehaviour into your project.
Usage
1. Request a QR
using Darkmatter.Fonepay;
var fonepay = new FonepayClient();
QrResult qr = await fonepay.PurchaseAsync(new QrRequest
{
amount = 100f,
remarks1 = "order #1234"
}, ct);
// qr.qrCode is a Texture2D ready to render
// qr.thirdpartyQrWebSocketUrl — pass to AwaitPaymentAsync
2. Await payment
QRPaymentStatus result = await fonepay.AwaitPaymentAsync(
qr.thirdpartyQrWebSocketUrl,
onQrVerified: verified => Debug.Log($"QR scanned: {verified}"),
ct: ct);
switch (result.Outcome)
{
case PaymentOutcome.Complete: // success
case PaymentOutcome.CancelledByUser: // user dismissed in app
case PaymentOutcome.Failed: // server rejected
}
AwaitPaymentAsync opens the websocket, fires onQrVerified when the QR is scanned, then resolves on the terminal payment frame and disconnects.
3. Cancellation & timeout
var cts = CancellationTokenSource.CreateLinkedTokenSource(destroyCancellationToken);
cts.CancelAfter(TimeSpan.FromMinutes(15)); // QR validity
try
{
var payment = await fonepay.AwaitPaymentAsync(qr.thirdpartyQrWebSocketUrl, ct: cts.Token);
}
catch (OperationCanceledException) { /* user cancelled or timed out */ }
catch (InvalidOperationException) { /* server closed websocket early */ }
catch (FonepayError e) { /* API error — e.ErrorCode, e.Docs */ }
Calling cts.Cancel() from a button handler aborts the await and disconnects the socket.
4. Tax refund
TaxRefundResponse refund = await fonepay.PostTaxRefundAsync(new TaxRefundRequest
{
fonepayTraceId = "...",
merchantPRN = "...",
invoiceNumber = "INV-001",
invoiceDate = DateTime.UtcNow,
transactionAmount = 100f,
}, ct);
Errors
FonepayError (extends Exception) carries ErrorCode and Docs. Throw paths:
- Missing/invalid
FonepayConfigasset or credentials - Non-2xx HTTP responses from Fonepay
- HMAC signing failures
Samples
Import Example Payment Flow from the Package Manager. Wires a button → QR image → success/fail panels with cancel support.
Tests
Editor tests live under Tests/Editor (NUnit). Run via Window > General > Test Runner > EditMode.
Description
Languages
ShaderLab
43.2%
C#
32.6%
GLSL
12.7%
HLSL
11.5%