# MB WAY payments

Learn how to accept the MB WAY payment method.

MB WAY is a digital wallet payment method in Portugal. When paying with MB WAY, customers initiate payments using their phone number, and [authenticate and approve](https://docs.stripe.com/payments/payment-methods.md#customer-actions) them using their MB WAY app.

You get [immediate notification](https://docs.stripe.com/payments/payment-methods.md#payment-notification) of whether the payment succeeded or failed.

> MB WAY supports international phone numbers, but the majority of customers use a Portuguese phone number starting with +351. You can test your integration in a *sandbox* (A sandbox is an isolated test environment that allows you to test Stripe functionality in your account without affecting your live integration. Use sandboxes to safely experiment with new features and changes) using [test phone numbers](https://docs.stripe.com/payments/mb-way/accept-a-payment.md#web-test-integration).

# Checkout


## Determine compatibility

**Supported business locations**: Europe, US, CA, NZ, SG, HK, JP, AU, MX

**Supported currencies**: `eur`

**Presentment currencies**: `eur`

**Payment mode**: Yes

**Setup mode**: No

**Subscription mode**: No

A Checkout Session must satisfy all of the following conditions to support MB WAY:

- You must express *Prices* (Prices define how much and how often to charge for products. This includes how much the product costs, what currency to use, and the interval if the price is for subscriptions) for all line items in Euros (currency code `eur`).

## Accept a MB WAY payment

> Build an integration to [accept a payment](https://docs.stripe.com/payments/accept-a-payment.md?integration=checkout) with Checkout before using this guide.

Enable MB WAY by making the following updates to your integration.

When creating a [Checkout Session](https://docs.stripe.com/api/checkout/sessions.md), you must:

- [Enable MB WAY](https://dashboard.stripe.com/settings/payment_methods) in your Dashboard. Stripe automatically displays MB WAY to eligible customers using [dynamic payment methods](https://docs.stripe.com/payments/payment-methods/dynamic-payment-methods.md). If you currently specify `payment_method_types`, see the [migration guide](https://docs.stripe.com/payments/dashboard-payment-methods.md).
- Make sure all `line_items` use the `eur` currency.

#### Stripe-hosted page

```curl
curl https://api.stripe.com/v1/checkout/sessions \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "line_items[0][price_data][currency]=eur" \
  -d "line_items[0][price_data][product_data][name]=T-shirt" \
  -d "line_items[0][price_data][unit_amount]=2000" \
  -d "line_items[0][quantity]=1" \
  -d mode=payment \
  --data-urlencode "success_url=https://example.com/success"
```

#### Full embedded page

```curl
curl https://api.stripe.com/v1/checkout/sessions \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "line_items[0][price_data][currency]=eur" \
  -d "line_items[0][price_data][product_data][name]=T-shirt" \
  -d "line_items[0][price_data][unit_amount]=2000" \
  -d "line_items[0][quantity]=1" \
  -d mode=payment \
  --data-urlencode "return_url=https://example.com/return" \
  -d ui_mode=embedded_page
```

### Fulfill your orders

After accepting a payment, learn how to [fulfill orders](https://docs.stripe.com/checkout/fulfillment.md).

## Handle refunds

Learn more about [MB WAY refunds](https://docs.stripe.com/payments/mb-way.md#refunds).

## Test your integration

Test your MB WAY integration by using the following test phone numbers. Each set of details reproduces a common live mode scenario.

| Phone number           | Description                                                                                                                                                                   |
| ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `+351911111112`        | The PaymentIntent status transitions from `requires_action` to `succeeded` after approximately 30 seconds.                                                                    |
| `+351911111113`        | The PaymentIntent status transitions from `requires_action` to `requires_payment_method` immediately. Stripe returns the `payment_method_not_available` error code.           |
| `+351911111114`        | The PaymentIntent status transitions from `requires_action` to `requires_payment_method` immediately. Stripe returns the `payment_method_provider_decline` error code.        |
| `+351911111115`        | The PaymentIntent status transitions from `requires_action` to `requires_payment_method` immediately. Stripe returns the `payment_intent_payment_attempt_expired` error code. |
| `+351911111116`        | The PaymentIntent status transitions from `requires_action` to `requires_payment_method` immediately. Stripe returns the `payment_method_customer_decline` error code.        |
| Any other phone number | The PaymentIntent status immediately transitions from `requires_action` to `succeeded`.                                                                                       |

## See also

- [Checkout fulfillment](https://docs.stripe.com/checkout/fulfillment.md)
- [Customizing checkout](https://docs.stripe.com/payments/checkout/customization.md)

