Create an incoming payment
Once an authorized client obtains the requisite grant from the recipient’s authentication server, the client must create an incoming payment resource before any payments can be sent to the recipient’s wallet address.
These code snippets create an incoming payment of $10 USD at a given wallet address, allowing subsequent payments to be sent to that wallet address up to $10 USD.
Before you begin
We recommend creating a wallet account on the test wallet. Creating an account allows you to test your client against the Open Payments APIs by using an ILP-enabled wallet funded with play money.
Create an incoming payment resource
Initial configuration
If you’re using JavaScript, only do the first step.
- Add
"type": "module"
topackage.json
. - Add the following to
tsconfig.json
{"compilerOptions": {"target": "ES2022","module": "ES2022"}}
Import dependencies
import { createAuthenticatedClient } from "@interledger/open-payments";
Copied! Initialize Open Payments client
const client = await createAuthenticatedClient({
walletAddressUrl: WALLET_ADDRESS,
privateKey: PRIVATE_KEY_PATH,
keyId: KEY_ID,
});
Copied! Create incoming payment
const incomingPayment = await client.incomingPayment.create(
{
url: new URL(WALLET_ADDRESS).origin,
accessToken: INCOMING_PAYMENT_ACCESS_TOKEN,
},
{
walletAddress: WALLET_ADDRESS,
incomingAmount: {
value: "1000",
assetCode: "USD",
assetScale: 2,
},
expiresAt: new Date(Date.now() + 60_000 * 10).toISOString(),
},
);
Copied! Output
console.log("INCOMING PAYMENT URL =", incomingPayment.id);
Copied! For TypeScript, run tsx path/to/directory/index.ts
. View full TS source
For JavaScript, run node path/to/directory/index.js
. View full JS source
Import dependencies
use OpenPayments\AuthClient;
use OpenPayments\Config\Config;
Copied! Initialize Open Payments client
$config = new Config($WALLET_ADDRESS, $PRIVATE_KEY, $KEY_ID);
$opClient = new AuthClient($config);
Copied! Create incoming payment
$newIncomingPayment = $opClient->incomingPayment()->create(
[
"url" => $wallet->resourceServer,
"access_token" => $INCOMING_PAYMENT_GRANT_ACCESS_TOKEN,
],
[
"walletAddress" => $config->getWalletAddressUrl(),
"incomingAmount" => [
"value" => "130",
"assetCode" => "USD",
"assetScale" => 2,
],
"metadata" => [
"description" => 'Test php snippets transaction with $1,30 amount',
"externalRef" => "INVOICE-" . uniqid(),
],
"expiresAt" => (new \DateTime())
->add(new \DateInterval("PT59M"))
->format("Y-m-d\TH:i:s.v\Z"),
]
);
Copied! Output
$output->writeln("INCOMING_PAYMENT_URL: " . $newIncomingPayment->id);
Copied!