Create a quote grant request
Esta página aún no está disponible en tu idioma.
Before a client can call most of the Open Payments APIs, it must receive a grant from the appropriate authorization server.
The snippets below enable a client to request a grant for a quote. The request to the authorization server must indicate the quote access type the and actions the client wants to take at the resource server.
Before you begin
Section titled “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.
Request a quote grant
Section titled “Request a quote grant”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 dependenciesimport { createAuthenticatedClient } from '@interledger/open-payments'
// Initialize clientconst client = await createAuthenticatedClient({ walletAddressUrl: WALLET_ADDRESS, privateKey: PRIVATE_KEY_PATH, keyId: KEY_ID})
// Get wallet address informationconst walletAddress = await client.walletAddress.get({ url: WALLET_ADDRESS})
// Request quote grantconst grant = await client.grant.request( { url: walletAddress.authServer }, { access_token: { access: [ { type: 'quote', actions: ['create', 'read', 'read-all'] } ] } })
// Check grant stateif (isPendingGrant(grant)) { throw new Error('Expected non-interactive grant')}
// Outputconsole.log('QUOTE_ACCESS_TOKEN =', grant.access_token.value)console.log('QUOTE_ACCESS_TOKEN_MANAGE_URL = ', grant.access_token.manage)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 dependenciesuse open_payments::client::api::UnauthenticatedResources;use open_payments::client::AuthenticatedResources;use open_payments::snippets::utils::{create_authenticated_client, get_env_var, load_env};use open_payments::types::{ auth::{AccessItem, AccessTokenRequest, GrantRequest, QuoteAction}, GrantResponse,};
// Initialize client// Authenticated client can be also used for unauthenticated resourceslet client = create_authenticated_client()?;
// Get wallet address informationlet wallet_address_url = get_env_var("WALLET_ADDRESS_URL")?;let wallet_address = client.wallet_address().get(&wallet_address_url).await?;
// Request quote grantlet grant_request = GrantRequest::new( AccessTokenRequest { access: vec![AccessItem::Quote { actions: vec![QuoteAction::Create, QuoteAction::Read, QuoteAction::ReadAll], }], }, None,);
println!( "Grant request JSON: {}", serde_json::to_string_pretty(&grant_request)?);
let response = client .grant() .request(&wallet_address.auth_server, &grant_request) .await?;
// Outputmatch response { GrantResponse::WithToken { access_token, .. } => { println!("Received access token: {:#?}", access_token.value); println!( "Received access token manage URL: {:#?}", access_token.manage ); } GrantResponse::WithInteraction { .. } => { unreachable!("Interaction not required for quotes"); }}// Import dependenciesuse OpenPayments\AuthClient;use OpenPayments\Config\Config;
// Initialize client$config = new Config( $WALLET_ADDRESS, $PRIVATE_KEY, $KEY_ID);$opClient = new AuthClient($config);
// Get wallet address information$wallet = $opClient->walletAddress()->get([ 'url' => $config->getWalletAddressUrl()]);
// Request quote grant$grant = $opClient->grant()->request( [ 'url' => $wallet->authServer ], [ 'access_token' => [ 'access' => [ [ 'type' => 'quote', 'actions' => ['create', 'read', 'read-all'] ] ] ], 'client' => $config->getWalletAddressUrl() ]);
// Check grant stateif ($grant instanceof \OpenPayments\Models\PendingGrant) { throw new \Error('Expected non-interactive grant');}
// Outputecho 'QUOTE_ACCESS_TOKEN: ' . $grant->access_token->value . PHP_EOL;echo 'QUOTE_ACCESS_TOKEN_MANAGE_URL: ' . $grant->access_token->manage . PHP_EOL;
echo 'GRANT OBJECT: ' . PHP_EOL . print_r($grant, true);package main
// Import dependenciesimport ( "context" "encoding/json" "fmt" "log"
op "github.com/interledger/open-payments-go" as "github.com/interledger/open-payments-go/generated/authserver")
func main() { // Initialize client client, err := op.NewAuthenticatedClient(WALLET_ADDRESS_URL, PRIVATE_KEY_BASE_64, KEY_ID) if err != nil { log.Fatalf("Error creating authenticated client: %v\n", err) }
// Get wallet address information walletAddress, err := client.WalletAddress.Get(context.TODO(), op.WalletAddressGetParams{ URL: WALLET_ADDRESS_URL, }) if err != nil { log.Fatalf("Error fetching wallet address: %v\n", err) }
// Request quote grant quoteAccess := as.AccessQuote{ Type: as.Quote, Actions: []as.AccessQuoteActions{ as.Create, as.Read, }, } accessItem := as.AccessItem{} if err := accessItem.FromAccessQuote(quoteAccess); err != nil { log.Fatalf("Error creating AccessItem: %v\n", err) } accessToken := struct { Access as.Access `json:"access"` }{ Access: []as.AccessItem{accessItem}, }
grant, err := client.Grant.Request(context.TODO(), op.GrantRequestParams{ URL: *walletAddress.AuthServer, RequestBody: as.GrantRequestWithAccessToken{AccessToken: accessToken}, }) if err != nil { log.Fatalf("Error requesting grant: %v\n", err) }
// Check grant state if grant.IsInteractive() { log.Fatalf("Expected non-interactive grant") }
// Output grantJSON, err := json.MarshalIndent(grant, "", " ") if err != nil { log.Fatalf("Error marshaling grant: %v\n", err) } fmt.Println("GRANT:", string(grantJSON)) fmt.Println("QUOTE_ACCESS_TOKEN =", grant.AccessToken.Value) fmt.Println( "QUOTE_ACCESS_TOKEN_MANAGE_URL =", grant.AccessToken.Manage, )
}// Import dependenciesimport org.interledger.openpayments.httpclient.OpenPaymentsHttpClient;import org.interledger.openpayments.IOpenPaymentsClient;
// Initialize clientvar client = OpenPaymentsHttpClient.defaultClient("WalletAddress","PrivateKeyPEM","KeyId");
// Get wallet address informationvar senderWallet = client.getWalletAddress("https://cloudninebank.example.com/customer");
// Request quote grantvar grantRequest = this.client.createGrantQuote(senderWallet);
// Outputlog.info("QUOTE_GRANT: {}", grantRequest);