Как я могу проверить, действителен ли промо-код Stripe для Товара, перед оформлением заказа

#stripe-payments

#stripe-платежи

Вопрос:

Это проблема, которую я пытаюсь решить с помощью элементов Stripe.

Для купона Stripe я могу выбрать, чтобы он был действителен только для соответствующих продуктов.

Во время оформления заказа я хотел бы знать, когда пользователь выбрал продукт, применяется ли этот код, чтобы я мог предоставить правильную скидку на этот продукт (а не на другие продукты).

Когда я извлекаю промо-код, невозможно увидеть, какие идентификаторы продуктов применяются. Когда я извлекаю продукт, нет никаких подробностей о том, какие промо-коды работают с ним.

Есть ли какой-либо способ предварительно проверить купон на соответствие продукту?

Ответ №1:

Для людей, использующих cURL, это работает (при promo_id условии, что существует):

 curl https://api.stripe.com/v1/promotion_codes/promo_id 
  -u sk_test_redacted: 
  -d "expand[]"="coupon.applies_to" 
  -G
  

Отредактированный ответ:

 {
  "id": "promo_id",
  "object": "promotion_code",
  "active": true,
  "code": "MYCODE",
  "coupon": {
    "id": "couponId",
    "object": "coupon",
    "amount_off": null,
    "applies_to": {
      "products": [
        "prod_id"
      ]
    },
    "created": 1621194680,
    "currency": "usd",
    "duration": "repeating",
    "duration_in_months": 6,
    "livemode": false,
    "max_redemptions": 1,
    "metadata": {
    },
    "name": null,
    "percent_off": 75.0,
    "redeem_by": null,
    "times_redeemed": 0,
    "valid": true
  },
  "created": 1621194680,
  "customer": null,
  "expires_at": null,
  "livemode": false,
  "max_redemptions": null,
  "metadata": {
  },
  "restrictions": {
    "first_time_transaction": false,
    "minimum_amount": null,
    "minimum_amount_currency": null
  },
  "times_redeemed": 0
}
  

Если вы хотите напрямую использовать идентификатор купона, вы можете использовать это (при couponId условии, что он существует):

 curl https://api.stripe.com/v1/coupons/couponId 
  -u sk_test_redacted: 
  -d "expand[]"="applies_to" 
  -G
  

Отредактированный ответ:

 {
  "id": "couponId",
  "object": "coupon",
  "amount_off": null,
  "applies_to": {
    "products": [
      "prod_id"
    ]
  },
  "created": 1621194680,
  "currency": "usd",
  "duration": "repeating",
  "duration_in_months": 6,
  "livemode": false,
  "max_redemptions": 1,
  "metadata": {
  },
  "name": null,
  "percent_off": 75.0,
  "redeem_by": null,
  "times_redeemed": 0,
  "valid": true
}
  

Комментарии:

1. Вот ссылка на документацию Stripe о расширении ответов: stripe.com/docs/api/expanding_objects

Ответ №2:

При создании купона вы можете ограничить его определенными продуктами с products помощью массива: https://stripe.com/docs/api/coupons/create#create_coupon-applies_to-products (скажем, prod_123)

Затем вы создаете промо-код с этого купона. Для любых сеансов проверки, созданных для Prices (которые создаются из того же продукта prod_123), промо-код будет применим только к этим сеансам проверки. Оформление заказа автоматически проверяет этот промо-код.

Комментарии:

1. Я должен уточнить, я пытаюсь использовать элементы Stripe, а не оформлять заказ

Ответ №3:

Итак, я связался со службой поддержки Stripe и узнал, что некоторые свойства не загружаются по умолчанию, что я сделал, это извлек промокод, а затем выполнил новый поиск по купону, но запросил поле applies_to:

 val params = mapOf("code" to code)
val promotionCode = PromotionCode.list(params).first()

val expandList = listOf("data.applies_to")
        val couponParams = mapOf("expand" to expandList)
        val coupon =
            Coupon.list(couponParams).data.first { it.id == promotionCode.coupon.id }
  

Ссылка:
https://stripe.com/docs/api/expanding_objects