//! Payment Link //! ============ //! //! Reference: //! //! This example shows how to create a payment link for //! a particular product and price. The nice thing with //! this API is the lack of associated customer. use stripe::{ Client, CreatePaymentLink, CreatePaymentLinkLineItems, CreatePrice, CreateProduct, Currency, IdOrCreate, PaymentLink, Price, Product, }; #[tokio::main] async fn main() { let secret_key = std::env::var("STRIPE_SECRET_KEY").expect("Missing STRIPE_SECRET_KEY in env"); let client = Client::new(secret_key); // create a new example project let product = { let mut create_product = CreateProduct::new("T-Shirt"); create_product.metadata = Some([("async-stripe".to_string(), "true".to_string())].iter().cloned().collect()); Product::create(&client, create_product).await.unwrap() }; // and add a price for it in USD let price = { let mut create_price = CreatePrice::new(Currency::USD); create_price.product = Some(IdOrCreate::Id(&product.id)); create_price.metadata = Some([("async-stripe".to_string(), "true".to_string())].iter().cloned().collect()); create_price.unit_amount = Some(1000); create_price.expand = &["product"]; Price::create(&client, create_price).await.unwrap() }; println!( "created a product {:?} at price {} {}", product.name.unwrap(), price.unit_amount.unwrap() / 100, price.currency.unwrap() ); let payment_link = PaymentLink::create( &client, CreatePaymentLink::new(vec![CreatePaymentLinkLineItems { quantity: 3, price: price.id.to_string(), ..Default::default() }]), ) .await .unwrap(); println!("created a payment link {}", payment_link.url); }