使用谷歌脚本生成经常支付链接条纹

2022-09-25 08:22:09标签apigoogle-apps-scriptstripe-payments
提问

我是API世界的初学者,我正在尝试开发新的技能。 我在网上找到了这条代码。我很了解它,但我想添加一个选项,在我的支付链接生成中添加一个描述,但我不习惯这种格式。我搜索了条状文档,但谷歌脚本需要转换才能正常工作,所以在条状doc中看起来不一样。 为了完成我想要创建一个经常的支付链接,而不是一次性的支付链接。 我不知道我是否足够清楚。 问候 问候 为了在您的支付链接中添加一个描述,当您在getProductId()方法中创建产品时,您需要通过一个描述参数,并将其传递给您的postData。 在从您的支付链接中创建一个订阅方面,您需要添加重复的。区间参数对您的getPriceId()方法的价格创建,并通过您的postData传递。

/**
 *
 *  Author   :  Amit Agarwal
 *  Email    :  amit@labnol.org
 *  Website  :  https://digitalinspiration.com/
 *  License. :  MIT Attribution required
 *
 * */
const StripeAPI = {
  getCache(key) {
    return CacheService.getScriptCache().get(key);
  },
  setCache(key, value) {
    CacheService.getScriptCache().put(key, value, 21600);
  },
  convertPayload(params = {}) {
    return Object.entries(params)
      .map(([key, value]) => [encodeURIComponent(key), encodeURIComponent(value)].join('='))
      .join('&');
  },
  getData(endpoint, params) {
    const response = UrlFetchApp.fetch(`${endpoint}?${this.convertPayload(params)}`, {
      headers: {
        Authorization: `Bearer ${STRIPE_API_KEY}`,
      },
      muteHttpExceptions: true,
    });
    return JSON.parse(response);
  },
  postData(endpoint, params) {
    const response = UrlFetchApp.fetch(endpoint, {
      method: 'POST',
      headers: {
        Authorization: `Bearer ${STRIPE_API_KEY}`,
        'Content-Type': 'application/x-www-form-urlencoded',
      },
      muteHttpExceptions: true,
      payload: this.convertPayload(params),
    });
    return JSON.parse(response);
  },
  getProductId(name) {
    const productId = this.getCache(name);
    if (productId) return productId;
    const api = 'https://api.stripe.com/v1/products';
    const { data = [] } = this.getData(api, { limit: 100 });
    const { id: newProductId } =
      data.find(({ name: productName }) => productName === name) || this.postData(api, { name });
    this.setCache(name, newProductId);
    return newProductId;
  },
  getPriceId(name, price = '1234', currency = 'USD') {
    const product_id = this.getProductId(name);
    const key = product_id + price + currency;
    const priceId = this.getCache(key);
    if (priceId) return priceId;
    const api = 'https://api.stripe.com/v1/prices';
    const { data = [] } = this.getData(api, { limit: 100, currency, product: product_id });
    const { id: newPriceId } =
      data.find(({ unit_amount }) => String(unit_amount) === String(price)) ||
      this.postData(api, { currency, product: product_id, unit_amount: price });
    this.setCache(key, newPriceId);
    return newPriceId;
  },
  createLink(name, amount, currency) {
    const key = `link${amount}${currency}${name}`;
    const paymentLink = this.getCache(key);
    if (paymentLink) return paymentLink;
    const priceId = this.getPriceId(name, Math.ceil(amount * 100), currency);
    const { url } = this.postData('https://api.stripe.com/v1/payment_links', {
      'line_items[0][price]': priceId,
      'line_items[0][quantity]': 1,
    });
    this.setCache(key, url);
    return url;
  },
  createSession(name, amount, currency) {
    const STRIPE_SUCCESS_URL = 'youtube.com';
    const STRIPE_CANCEL_URL = 'bing.fr';
    const key = `session${amount}${currency}${name}`;
    const sessionLink = this.getCache(key);
    if (sessionLink) return sessionLink;
    const { url } = this.postData('https://api.stripe.com/v1/checkout/sessions', {
      cancel_url: STRIPE_CANCEL_URL,
      success_url: STRIPE_SUCCESS_URL,
      mode: 'payment',
      billing_address_collection: 'required',
      'payment_method_types[]': 'card',
      'line_items[0][price_data][currency]': currency,
      'line_items[0][price_data][product_data][name]': name,
      'line_items[0][price_data][unit_amount]': Math.ceil(amount * 100),
      'line_items[0][quantity]': 1,
    });
    this.setCache(key, url);
    return url;
  },
};
回答

▼版权说明

相关文章也很精彩
推荐内容
更多标签
相关热门
全站排行
随便看看

错说cuoshuo.com——程序员的报错记录

部分内容根据CC版权协议转载,如果您希望取消转载请发送邮件到cuoshuo8@163.com

辽ICP备19011660号-5