37 releases
0.12.3 | May 17, 2020 |
---|---|
0.12.1 | Feb 6, 2020 |
0.11.0 | Sep 11, 2019 |
0.10.5 | Jul 27, 2019 |
0.3.1 | Mar 31, 2017 |
#81 in Finance
72 downloads per month
Used in stripe-update-card
1MB
15K
SLoC
stripe-rust
Rust API bindings for the Stripe v1 HTTP API.
This is compatible with all currently supported versions of Stripe's client-side libraries including https://js.stripe.com/v2/ and https://js.stripe.com/v3/.
API Version
The 0.12.x version of the crate uses the 2019-09-09
version of the Stripe API.
Usage
Put this in your Cargo.toml
:
[dependencies]
stripe-rust = "0.12.*"
And this in your crate root:
extern crate stripe;
To see how the library is used, look through the examples folder.
Getting Started
To get started, we need to create a client:
let client = stripe::Client::new("sk_test_YOUR_STRIPE_SECRET");
Then we can begin making requests as we'd like. Most Stripe requests accept
many optional parameters, so we usually get the ::default()
params and then
set the ones we want from there.
Most requests for creating or updating a Stripe object use the same Rust struct, so you may frequently need to refer to the official API docs to determine which fields are required for either request.
/* Creating a Stripe Charge */
let token = "TOKEN_FROM_CHECKOUT".parse().expect("token to be valid");
let mut params = stripe::CreateCharge::new();
// NOTE: Stripe represents currency in the lowest denominations (e.g. cents)
params.amount = Some(1095); // e.g. $10.95
params.source = Some(stripe::ChargeSourceParams::Token(token));
// Example: Override currency to be in Canadian Dollars
params.currency = Some(stripe::Currency::CAD);
let charge = stripe::Charge::create(&client, params).unwrap();
println!("{:?}", charge); // => Charge { id: "ch_12345", amount: 1095, .. }
/* Listing Stripe Charges */
let params = stripe::ListCharges::new();
let charges = stripe::Charge::list(&client, params).unwrap();
println!("{:?}", charges); // => List { data: [Charge { id: "ch_12345", .. }] }
Using Custom Connect accounts
This crate supports impersonating a custom connect account.
To impersonate the account get a new Client and pass in the account id.
let mut headers = stripe::Headers::default();
headers.stripe_account = Some("acct_ABC".to_string());
headers.client_id = Some("ca_XYZ".to_string());
let client = client.with_headers(headers);
// Then, all requests can be made normally
let params = stripe::CustomerListParams::default();
let customers = stripe::Customer::list(&client, params).unwrap();
println!("{:?}", customers); // => List { data: [Customer { .. }] }
Feature Flags
By default the full
stripe api is enabled.
To reduce code size, disable default features and enable just the APIs you use:
# Example: Core-only (enough to create a `Charge` or `Card` or `Customer`)
stripe-rust = { version = "*", default-features = false, features = ["blocking"] }
# Example: Support for "Subscriptions" and "Invoices"
stripe-rust = { version = "*", default-features = false, features = ["blocking", "billing"] }
Refer to the Stripe API docs to determine which APIs are included as part of each feature flag.
Contributing
Code Generation
This library is (mostly) authored via code generation by parsing the OpenAPI specification for Stripe.
To update the generated code, use the included scripts:
# Generate files into the ./openapi/out directort (working directory must be project root)
> ./openapi/build
# Copy reviewed files to ./src/resources
> ./openapi/commit
Dependencies
~12–26MB
~407K SLoC