Skip to main content
Glama

Payware MCP Server

Official
by payware
get-status.js6.51 kB
import axios from 'axios'; import { createJWTToken } from '../../core/auth/jwt-token.js'; import { getSandboxUrl, getProductionUrl, getPartnerIdSafe, getPrivateKeySafe } from '../../config/env.js'; /** * Get transaction status from payware API * @param {Object} params - Parameters for status request * @returns {Object} Transaction status response */ export async function getTransactionStatus({ transactionId, partnerId, privateKey, useSandbox = true }) { if (!transactionId) { throw new Error('Transaction ID is required'); } if (!partnerId || !privateKey) { throw new Error('Partner ID and private key are required for proper JWT creation'); } // Create JWT token without body (GET request - no contentMd5 required) const tokenData = createJWTToken(partnerId, privateKey, null); // Required headers as per payware API documentation const headers = { 'Authorization': `Bearer ${tokenData.token}`, 'Content-Type': 'application/json', 'Api-Version': '1' // Required: current API version }; try { const baseUrl = useSandbox ? getSandboxUrl() : getProductionUrl(); const response = await axios.get(`${baseUrl}/transactions/${transactionId}`, { headers }); return { success: true, transaction: response.data, requestId: response.headers['x-request-id'], timestamp: new Date().toISOString() }; } catch (error) { return { success: false, error: { message: error.response?.data?.message || error.message, status: error.response?.status, code: error.response?.data?.code, details: error.response?.data }, timestamp: new Date().toISOString() }; } } /** * Format transaction status for display */ function formatTransactionStatus(transaction) { const statusEmojis = { 'ACTIVE': '⏳' }; // If a transaction is returned from GET /transactions/{id}, it's always ACTIVE // (transactions with final statuses are only available via /transactions-history) const status = transaction.status || 'ACTIVE'; const emoji = statusEmojis[status] || '⏳'; return { emoji, status, formatted: `${emoji} ${status}` }; } /** * Get transaction status tool implementation */ export const getTransactionStatusTool = { name: "payware_operations_get_transaction_status", description: `Get status of an ACTIVE transaction by ID (for completed/expired transactions use transaction history tool). **Endpoint:** GET /transactions/{transactionId} **Use Case:** Check status of ACTIVE transactions only. This endpoint only returns transactions with ACTIVE status. **Note:** For transactions with final statuses (CONFIRMED, DECLINED, FAILED, EXPIRED, CANCELLED), use 'payware_transactions_get_history' instead.`, inputSchema: { type: "object", properties: { transactionId: { type: "string", description: "Transaction ID to check status for" }, partnerId: { type: "string", description: "Partner ID from payware dashboard. Can use PAYWARE_PARTNER_ID env var as default.", default: getPartnerIdSafe() }, privateKey: { type: "string", description: "RSA private key for JWT token creation. Can use PAYWARE_PRIVATE_KEY_PATH env var as default.", default: getPrivateKeySafe() }, useSandbox: { type: "boolean", description: "Use sandbox environment for testing", default: true } }, required: ["transactionId"], additionalProperties: false }, async handler(args) { const { transactionId, partnerId = getPartnerIdSafe(), privateKey = getPrivateKeySafe(args.useSandbox ?? true), useSandbox = true } = args; if (!transactionId) { throw new Error("Transaction ID is required"); } if (!partnerId) { throw new Error("Partner ID is required. Provide via 'partnerId' parameter or set PAYWARE_PARTNER_ID environment variable."); } if (!privateKey) { throw new Error("Private key is required. Provide via 'privateKey' parameter or set PAYWARE_PRIVATE_KEY environment variable."); } const result = await getTransactionStatus({ transactionId, partnerId, privateKey, useSandbox }); if (result.success) { const statusInfo = formatTransactionStatus(result.transaction); return { content: [{ type: "text", text: `📊 **Transaction Status Retrieved** **Transaction:** ${transactionId} **Status:** ${statusInfo.formatted} **Transaction Details:** - ID: ${result.transaction.id || 'N/A'} - Type: ${result.transaction.type || 'N/A'} - Amount: ${result.transaction.trData ? `${result.transaction.trData.amount} ${result.transaction.trData.currency}` : 'N/A'} - Description: ${result.transaction.description || 'N/A'} - Created: ${result.transaction.createdAt || 'N/A'} - Updated: ${result.transaction.updatedAt || 'N/A'} **Full Response:** \`\`\`json ${JSON.stringify(result.transaction, null, 2)} \`\`\` **Request ID:** ${result.requestId || 'N/A'} **Timestamp:** ${result.timestamp} **Status Meanings:** - ⏳ ACTIVE: Active transaction pending processing or finalizing **Note:** Only ACTIVE transactions are returned by this endpoint. For final statuses (CONFIRMED, DECLINED, FAILED, EXPIRED, CANCELLED), use the transaction history tool.` }] }; } else { return { content: [{ type: "text", text: `❌ **Failed to Get Transaction Status** **Transaction ID:** ${transactionId} **Error Details:** - Message: ${result.error.message} - Status: ${result.error.status || 'N/A'} - Code: ${result.error.code || 'N/A'} **Full Error Response:** \`\`\`json ${JSON.stringify(result.error.details || result.error, null, 2)} \`\`\` **Timestamp:** ${result.timestamp} **Possible Causes:** 1. Transaction ID not found or invalid 2. JWT token expired or invalid 3. No access permission to this transaction 4. API connectivity issues 5. Transaction belongs to different partner **Troubleshooting:** 1. Verify the transaction ID is correct 2. Check if JWT token is valid and not expired 3. Ensure you have access to this transaction 4. Try creating a new transaction if this one is very old` }] }; } } };

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/payware/mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server