> ## Documentation Index
> Fetch the complete documentation index at: https://flutterwaveinc.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Ghana Mobile Money

> Learn about Mobile Money support in Ghana.

<Info>
  We recommend checking out the [introductory
  section](/payment-api/introduction) to understand the basics of direct
  charge first. This guide assumes you've read that.
</Info>

If you're collecting money in `GHS`, your customers can pay with Ghana mobile money services.

## The Process

This involves the following steps:

1. You call our API to create a charge and pass in the customer's mobile number.
2. Your customer completes the payment by authorizing it with their mobile money provider.

<img src="https://mintcdn.com/flutterwaveinc/8LJ4mpYLmd_SNb9Z/images/ghs_momo.png?fit=max&auto=format&n=8LJ4mpYLmd_SNb9Z&q=85&s=d03069cd6ae045aba92de1d65ade0984" alt="xaf_mono" width="5760" height="13212" data-path="images/ghs_momo.png" />

## Initiating the Payment

First, you'll need the customer's mobile money `network` (either `"MTN"`, `"VODAFONE"`, or `"TIGO"`) and `phone_number`.

Combine that with the rest of the payment details to create the payload and send it to our [charge Ghana mobile money endpoint](/api-reference/charges#mobile-money-ghana). You'll need to specify `amount`, `currency`, `email`, `country` and a unique `tx_ref`.

You can also specify more details, such as the customer's `fullname` and custom `meta` information. See the [endpoint documentation](/api-reference/charges#mobile-money-ghana) for details.

<CodeGroup>
  ```javascript Node.js theme={null}
  // Install with: npm i flutterwave-node-v3

  const Flutterwave = require('flutterwave-node-v3');
  const flw = new Flutterwave(process.env.FLW_PUBLIC_KEY, process.env.FLW_SECRET_KEY);
  const payload = {
      phone_number: '054709929220',
      amount: 1500,
      currency: 'GHS',
      network: "TIGO",
      email: 'JoeBloggs@acme.co',
      tx_ref: this.generateTransactionReference(),
  }
  flw.MobileMoney.ghana(payload)
      .then(console.log)
      .catch(console.log);
  ```

  ```php PHP theme={null}
  // Install with: composer require flutterwavedev/flutterwave-v3

  $flw = new \Flutterwave\Rave(getenv('FLW_SECRET_KEY'));
  // Set `PUBLIC_KEY` as an environment variable
  $mobileMoneyService = new \Flutterwave\MobileMoney();
  $payload = [
      "phone_number" => '25454709929220',
      "amount" => 1500,
      "currency" => 'GHS',
      "network" => "TIGO",
      "email" => 'JoeBloggs@acme.co',
      "tx_ref" => $this->generateTransactionReference(),
  ];
  $response = $mobileMoneyService->mobilemoney($payload);
  print_r($response);
  ```

  ```ruby Ruby theme={null}
  # Install with: gem install flutterwave_sdk

  require 'flutterwave_sdk'

  flw = Flutterwave.new(ENV["FLW_PUBLIC_KEY"], ENV["FLW_SECRET_KEY"], ENV["FLW_ENCRYPTION_KEY"])
  charge = MobileMoney.new(flw)
  payload = {
      phone_number: '054709929220',
      amount: 1500,
      currency: 'GHS',
      network: "TIGO",
      email: 'JoeBloggs@acme.co',
      tx_ref: generate_transaction_reference,
  }
  response = charge.initiate_charge payload
  print response
  ```

  ```json cURL theme={null}
  curl --request POST \
     --url https://api.flutterwave.com/v3/charges?type=mobile_money_ghana \
     --header 'Authorization: Bearer YOUR_SECRET_KEY' \
     --header 'content-type: application/json' \
     --data '{
       "phone_number": "054709929220",
       "amount": 1500,
       "currency": "GHS",
       "network": "TIGO",
       "email": "JoeBloggs@acme.co",
       "tx_ref": "BJUYU399fcd43"
  }'
  ```
</CodeGroup>

## Handling the Response

You'll get a response that looks like this:

```json Success theme={null}
{
  "status": "success",
  "message": "Charge initiated",
  "meta": {
    "authorization": {
      "redirect": "https://ravemodal-dev.herokuapp.com/captcha/verify/144:16cbc719bf66ded37d5522de185f6a58",
      "mode": "redirect"
    }
  }
}
```

The `meta.authorization` object contains the details needed to complete the transaction. The `mode` is `"redirect"`, meaning you should redirect your customer to the provided URL to complete the payment.

## Completing the Payment

To complete the payment, the customer needs to be authorized with their mobile money provider (for instance, via a push notification from the app).

<Note>
  **Testing Tip**

  In [Test Mode](/authentication), you can complete the transaction by visiting the returned redirect URL and entering `123456` as the OTP.
</Note>

When the payment is completed, we'll send you a webhook notification. Here's what the response would look like:

```json theme={null}
{
  "event": "charge.completed",
  "data": {
    "id": 2073992,
    "tx_ref": "BJUYU399fcd43",
    "flw_ref": "flwm3s4m0c1620380894041",
    "device_fingerprint": "N/A",
    "amount": 1500,
    "currency": "RWF",
    "charged_amount": 1500,
    "app_fee": 43.5,
    "merchant_fee": 0,
    "processor_response": "Approved",
    "auth_model": "MOBILEMONEY",
    "ip": "::ffff:10.30.86.54",
    "narration": "MerchantName",
    "status": "successful",
    "payment_type": "mobilemoneyrw",
    "created_at":"2021-05-07T09:48:13.000Z",
    "account_id": 732559,
    "meta": null,
    "customer":{
      "id": 841600,
      "name": "Anonymous Customer",
      "phone_number": "054709929220",
      "email": "JoeBloggs@acme.co",
      "created_at":"2021-05-07T09:48:13.000Z"
    }
  }
```

In your webhook handler, you can then verify the payment and credit your customers with whatever they paid for. See our guide to [transaction verification](/transaction-verification) for details.
