# Print Receipt In-App Integration

## **Processing a Print Receipt Request**

To print a receipt using the **In-App Integration** method, utilize Easypay's internal `PrintImage` handler to send the base64-encoded receipt data directly within the Easypay app environment.

**Example Code:**

```javascript
// Function to print receipt using In-App Integration
async function printReceiptInApp(base64Receipt) {
    // Check if the PrintImage handler is available
    if (window.PrintImage) {
        const printRequest = {
            method: "PrintImage",
            data: base64Receipt, // Base64-encoded receipt image
        };
        
        // Convert the request to JSON
        const message = JSON.stringify(printRequest);

        try {
            // Send the print request to Easypay's PrintImage handler
            await window.PrintImage.postMessage(message);
            console.log("Print request sent (In-App):", printRequest);
        } catch (error) {
            console.error("Failed to send print request (In-App):", error);
            // Optionally, notify the user or implement fallback logic
        }
    } else {
        console.error("PrintImage handler is not available.");
        // Optionally, fallback to WebSocket Integration or notify the user
    }
}

// Example usage:
const base64Receipt = "your_base64_receipt_here"; // Replace with your base64 receipt
printReceiptInApp(base64Receipt);
```

**Explanation:**

* **Method:** `"PrintImage"`
* **Purpose:**\
  Sends the base64-encoded receipt image to Easypay's `PrintImage` handler within the Easypay app for printing.
* **Parameters:**
  * `method`: Specifies the action to perform, which is `"PrintImage"` in this case.
  * `data`: The receipt image encoded in base64 format.

## **Processing Open Cash Drawer Request**

```javascript
// Function to open the cash drawer using In-App Integration
function openCashDrawerInApp() {
    // Check if the OpenDrawer handler is available
    if (window.OpenDrawer) {
        const message = JSON.stringify({ method: "OpenDrawer" });
        try {
            // Send the open drawer request to Easypay
            window.OpenDrawer.postMessage(message);
            console.log("Open drawer request sent to Easypay.");
        } catch (error) {
            console.error("Failed to send open drawer request:", error);
            // Optionally, notify the user about the failure
        }
    } else {
        console.error("OpenDrawer handler is not available.");
        // Optionally, fallback to WebSocket Integration or notify the user
    }
}

// Example usage:
openCashDrawerInApp();
```

**Explanation:**

* **Method:** `"OpenDrawer"`
* **Purpose:**\
  Sends a request within the Easypay app to open the physical cash drawer. This method is suitable for scenarios where user interaction within the app environment initiates the cash drawer opening.
* **Parameters:**
  * `method`: Specifies the action to perform, which is `"OpenDrawer"` in this case.
  * **No additional parameters** are required for this method.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.easypay.sa/easypay/print-receipt-integration-guide/print-receipt-in-app-integration.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
