# Merchant Integration

How to create a payment request link, encode it into a QR code, find the transaction, and validate it. This guide walks through an example of a QR code-based Point of Sale system that accepts payments via Stream**Pay™.**

### Requirements[​](https://docs.solanapay.com/#requirements) <a href="#requirements" id="requirements"></a>

Before you can receive payments, you'll need to obtain a native SOL address. This doesn't cost anything, and you can use any wallet to get started.

If you want to receive USDC, STRM or another SPL token on Solana, you'll need to create a token account, which may require a small amount of SOL.

One way to do both is to use Decentralized Exchange (DEX), which will provide a native STR/SOL deposit address and an associated USDC token account to receive payments.

### 1. Set up StreamPay[​](https://docs.solanapay.com/#1-set-up-solana-pay) app <a href="#id-1-set-up-solana-pay" id="id-1-set-up-solana-pay"></a>

Install the packages and import them in your code.

**npm**

```
npm install @stream-pay @solana/web3.js bignumber.js --save
```

or

**yarn**

```
yarn add @stream-pay @solana/web3.js bignumber.js
```

### &#x20;2. Create a payment request link[​](https://docs.solanapay.com/#2-create-a-payment-request-link)

Stream**Pay™** uses a [standard URL scheme](https://docs.solanapay.com/spec) across wallets for native SOL, STRM, and SPL Tokens payments. Several parameters are encoded within the link representing an intent to collect payment from a customer.

<details>

<summary>Create a payment request link with a <code>recipient</code>, <code>amount</code>, <code>label</code>, <code>message</code> ,  <code>memo</code> and <code>reference</code>.</summary>

</details>

\
\\
