Handle Recharge Completion

Overview

Once a user completes the payment on the UMIVERSE platform, the platform will send a notification to the merchant’s configured callback URL. The game can use this notification to process the recharge result.

Callback Notification Format

The UMIVERSE platform sends the following information to the merchant’s callback URL:

const params = {
    tradeState: "SUCCESS",           // String: Transaction status ("SUCCESS" or "FAIL")
    platformOrderId: "PLATFORM123",  // String: UMIVERSE platform transaction ID
    merchantId: "MERCHANT01",        // String: Merchant ID to prevent tampering
    orderId: "ORDER12345",           // String: Order ID to uniquely identify the transaction
    amount: 50,                      // Number: Recharge amount in USD
    description: "Game coins",       // String: Description of the order
    extraParams: "game-specific-data", // String: Additional data from the original request
    ts: Math.floor(Date.now() / 1000), // Number: Current timestamp
    sign: "callback_signature",      // String: Signature for verification
};

Signature Verification

To verify the authenticity of the notification:

1. Concatenate the values in the params object into a string (excluding sign).

2. Append the current timestamp (ts) and the secret key (UMI-API-SECRET) to the string.

3. Generate the MD5 hash and compare it to the sign value in the notification.

function verifySign(ts, params, key = "UMI-API-SECRET") {
    let str = "";
    for (const key in params) {
        if (key !== "sign" && params.hasOwnProperty(key)) {
            str += `${params[key]}`;
        }
    }
    str += `${ts}${key}`;
    const generatedSign = MD5(str).toString();
    return generatedSign === params.sign;
}

Example Notification Handler:

app.post("/recharge/callback", (req, res) => {
    const params = req.body;

    // Verify the signature
    const isValid = verifySign(params.ts, params, "UMI-API-SECRET");
    if (isValid && params.tradeState === "SUCCESS") {
        // Process the successful recharge
        console.log("Recharge successful:", params);
        res.status(200).send("Recharge processed successfully");
    } else {
        // Handle failure or invalid signature
        console.error("Invalid recharge notification or failure:", params);
        res.status(400).send("Invalid recharge notification");
    }
});

Recharge Workflow Summary

1. Initiate Recharge Request:

• The game iframe sends a postMessage with recharge details to the UMIVERSE platform.

2. User Completes Payment:

• The UMIVERSE platform presents the payment interface to the user.

3. Process Recharge Notification:

• The UMIVERSE platform sends a callback to the configured URL upon payment completion.

• The game server verifies the notification and updates the user’s account accordingly.

Last updated