paypal-checkout.js/test.js

157 lines
4.6 KiB
JavaScript

"use strict";
require("dotenv").config({ path: ".env" });
require("dotenv").config({ path: ".env.secret" });
if (!process.env.PAYPAL_CLIENT_ID) {
console.error(
"Please copy example.env to .env and update the values from the PayPal API Dashboard at https://developer.paypal.com/developer/applications"
);
process.exit(1);
}
let PayPal = require("./");
let { Plan, Product, Subscription } = PayPal;
async function test() {
console.info();
let product = await Product.create({
id: "PROD-test-product-10",
name: "Test Product #10",
description: "A great widget for gizmos and gadgets of all ages!",
type: Product.types.SERVICE,
category: Product.categories.SOFTWARE,
image_url: undefined,
home_url: undefined,
});
console.info("Product:");
console.info(JSON.stringify(product, null, 2));
console.info();
let plan = await Plan.create({
id: "PLAN-test-plan-001",
product_id: "PROD-2TS60422HM5801517", // product.id,
name: "Test Plan #1",
description: "A great plan for pros of all ages!",
billing_cycles: [
{
frequency: {
interval_unit: Plan.intervals.DAY,
interval_count: 1,
},
tenure_type: Plan.tenures.TRIAL,
total_cycles: 14,
},
{
frequency: {
interval_unit: Plan.intervals.YEAR,
interval_count: 1,
},
tenure_type: Plan.tenures.REGULAR,
total_cycles: 0,
pricing_scheme: {
fixed_price: {
value: "10.00",
currency_code: "USD",
},
},
},
],
payment_preferences: {
auto_bill_outstanding: true,
setup_fee: {
value: "10",
currency_code: "USD",
},
setup_fee_failure_action: "CONTINUE",
// suspend the subscription after N attempts
payment_failure_threshold: 3,
},
taxes: {
percentage: "10",
// was tax included?
inclusive: false,
},
});
console.info("Plan:");
console.info(JSON.stringify(plan, null, 2));
console.info();
let subscription = await Subscription.createRequest({
// See https://developer.paypal.com/docs/subscriptions/integrate/#use-the-subscriptions-api
plan_id: plan.id,
//start_time: "2018-11-01T00:00:00Z", (must be in the future)
//quantity: "20",
//shipping_amount: { currency_code: "USD", value: "10.00" },
subscriber: {
name: { given_name: "James", surname: "Doe" },
email_address: "customer@example.com",
/*
shipping_address: {
name: { full_name: "James Doe" },
address: {
address_line_1: "123 Sesame Street",
address_line_2: "Building 17",
admin_area_2: "San Jose",
admin_area_1: "CA",
postal_code: "95131",
country_code: "US",
},
},
*/
},
application_context: {
brand_name: "Bliss via The Root Group, LLC",
locale: "en-US",
shipping_preference: Subscription.shipping_preferences.NO_SHIPPING,
user_action: Subscription.actions.SUBSCRIBE_NOW,
payment_method: {
payer_selected: Subscription.payer_selections.PAYPAL,
payee_preferred:
Subscription.payee_preferences.IMMEDIATE_PAYMENT_REQUIRED,
},
return_url:
"https://example.com/api/paypal-checkout/return?my_token=abc123",
cancel_url:
"https://example.com/api/paypal-checkout/cancel?my_token=abc123",
},
});
console.info("Subscription (Before Approval):");
console.info(JSON.stringify(subscription, null, 2));
console.info();
// wait for user to click URL and accept
await new Promise(function (resolve) {
console.info();
console.info("Please approve the subscription at the following URL:");
console.info();
console.info(
"Approve URL:",
subscription.links.find(function (link) {
return "approve" === link.rel;
}).href
);
console.info("Username:", process.env.PAYPAL_SANDBOX_EMAIL);
console.info("Password:", process.env.PAYPAL_SANDBOX_PASSWORD);
console.info();
console.info("Did you approve it? Hit the <any> key to continue...");
console.info();
process.stdin.once("data", resolve);
});
process.stdin.pause();
let s = await Subscription.details(subscription.id);
console.info("Subscription: (After Approval)");
console.info(JSON.stringify(s, null, 2));
console.info();
}
if (require.main === module) {
PayPal.init(process.env.PAYPAL_CLIENT_ID, process.env.PAYPAL_CLIENT_SECRET);
test().catch(function (err) {
console.error("Something bad happened:");
console.error(JSON.stringify(err, null, 2));
});
}