---
title: Stripe'i vaidlused
description: Hindab, kas Stripe'i makse vaidlustamine tasub end ära, ning kogub ja esitab tõendid.
category: Marketing
sublabel: SEO
author: OpenClaudia
tags: 
license: MIT
source: https://github.com/OpenClaudia/openclaudia-skills
---

# Stripe'i vaidluse hindamine ja tõendid

Hinda esmalt majanduslikku poolt. Kui vaidlustamine on põhjendatud ja heaks kiidetud, koosta tõendipakett ja esita see Stripe'ile. Töötab iga SaaS-i puhul, mis kasutab Stripe'i ja kasutajate andmebaasi, kus on sisselogimis- või kasutuslogid.

## Millal seda oskust kasutada

Kasuta seda oskust, kui kasutaja:

- saab Stripe'ilt tagasinõude (chargeback) teate ja soovib selle vaidlustada
- esitab vaidluse ID (`du_*`) ja palub selle „vastustada“ / „ümber lükata“ / „vaidlustada“
- küsib, kuidas koguda tõendeid vaidluse jaoks, mis on märgitud kui `fraudulent`, `product_not_received`, `product_unacceptable` või `subscription_canceled`
- soovib tegevuslogi PDF-i, mis näitab, et klient kasutas tema toodet

## Nõutud keskkonnamuutujad

```bash
STRIPE_SECRET_KEY=sk_live_...      # Stripe restricted/secret key with disputes:write scope
DATABASE_URL=postgres://...        # READ-ONLY connection to your app's user database (optional but recommended)
TERMS_URL=https://yoursite.com/terms   # URL to your published cancellation/refund policy
EVIDENCE_DIR=~/disputes            # Where to save the per-customer evidence folders
```

**Andmebaasi turvalisus:** kõik päringud on ainult SELECT-päringud. Ära kunagi lase sellel oskusel teha UPDATE/DELETE/INSERT-päringuid.

## Sisendid

Kasutaja esitab ühe järgmistest:
- Stripe'i vaidluse ID (`du_xxxxx`) – eelistatud
- Kliendi e-posti aadress – oskus otsib vaidluse üles
- Makse ID (`ch_xxxxx` või `py_xxxxx`)

## Otsusta esmalt, kas vaidlustada

Vaidlusega nõustumine võib olla õige tulemus. Ära kunagi esita tõendeid ainult seetõttu,
et juhtum on olemas.

1. Kontrolli Stripe'i kehtivat hinnakirja. Praeguse USA standardhinnakirja järgi võtab
   Stripe automaatselt 15-dollarilise vaidluse saamise tasu (dispute-received fee) ja veel
   15-dollarilise vaidlustamistasu (dispute-countered fee), kui tõendid esitatakse. Saamise
   tasu on igal juhul kadunud. Vaidlustamistasu tagastatakse ainult võidu korral. Kui need
   summad muutuvad, kasuta kehtivat hinnakirja.
2. Päri kaupmehe Stripe'i vaidluste ajalugu reaalajas. Kaitstud vaidluste võiduprotsendi
   jaoks loe ainult suletud vaidlusi, kus `evidence_details.submission_count > 0`. Erista
   esmaostud uuendustest ja kitsenda sama põhjuseni, kui valim seda võimaldab. Teata
   võitudest, kaotustest, avatud juhtumitest ja valimi suurusest. Ütle välja, kui täpselt
   kattuvat pretsedenti pole.
3. Arvuta tasuvuspiiri tõenäosus ja oodatav väärtus pärast vaidlustamistasu ja tõendite
   koostamise tööd. Ära mõtle tõenäosust välja ainult juhtumi tugevuse põhjal.
4. Kasuta konservatiivset 30% minimaalset võidutõenäosuse lävendit, kui kasutaja ei anna
   teistsugust lävendit. Kui võrreldavad andmed seda lävendit ei toeta, soovita jätta
   vaidlusele vastamata. Nii välditakse vaidlustamistasu, kuigi vaidlustatud summa ja
   saamise tasu jäävad kaotatuks.
5. Hangi kasutajalt selgesõnaline heakskiit enne failide koostamist, tõendite üleslaadimist
   või esitamist. Esitamine on lõplik ja tasuline.

## Sammud

### 1. Hangi vaidlus Stripe'ist

```bash
curl -s -u "$STRIPE_SECRET_KEY:" \
  "https://api.stripe.com/v1/disputes/$DISPUTE_ID" | python3 -m json.tool
```

Too välja: `amount`, `reason`, `charge`, `evidence_details.due_by`, `evidence_details.submission_count`, `status`.

Kui `submission_count > 0`, on vaidlus juba vaidlustatud – PEATU ja hoiata kasutajat.

### 2. Hangi ümbritsev kontekst

```bash
# Charge → tells you the payment method, risk score, billing details, customer ID
curl -s -u "$STRIPE_SECRET_KEY:" "https://api.stripe.com/v1/charges/$CHARGE_ID"

# Customer → name, email, default payment source
curl -s -u "$STRIPE_SECRET_KEY:" "https://api.stripe.com/v1/customers/$CUSTOMER_ID"

# All invoices for the customer → look for previously-undisputed payments
curl -s -u "$STRIPE_SECRET_KEY:" \
  "https://api.stripe.com/v1/invoices?customer=$CUSTOMER_ID&limit=100"

# Subscription (if recurring)
curl -s -u "$STRIPE_SECRET_KEY:" "https://api.stripe.com/v1/subscriptions/$SUB_ID"
```

Varasemad vaidlustamata maksed sama kaardiga on `fraudulent`-väidete puhul kasulik
lisakinnitus. Loe need alati kokku, kuid ära käsitle neid iseenesest tõendina.

### 3. Otsi klient oma rakenduse andmebaasist üles

Kohanda need päringud oma skeemiga. Kasulik tõendite kuju:

```sql
-- User profile and self-reported cancel reason
SELECT id, email, created_at, plan_tier, stripe_customer_id,
       cancel_reason, cancelled_at, delete_reason
FROM users WHERE email ILIKE :email;

-- Login activity (timestamps + country + device)
SELECT created_at, country_code, device
FROM user_activity WHERE user_id = :uid ORDER BY created_at;

-- Things the customer created/used in your product
SELECT name, type, created_at, updated_at
FROM projects WHERE user_id = :uid AND deleted = false ORDER BY created_at;

-- Checkout / payment-related actions (proves intent)
SELECT timestamp, endpoint, payload FROM action_logs
WHERE user_id = :uid
  AND endpoint ~* '(subscribe|checkout|stripe|upgrade|pay)'
ORDER BY timestamp DESC;
```

`product_not_received`-väidete puhul kontrolli kasutaja enda märgitud `cancel_reason`-it. Kui
ta tühistas põhjusega „Poor user experience“ või millegagi, mis kasutamist tunnistab, on see
väli väitega otseses vastuolus. Tsiteeri seda sõna-sõnalt, kuid ära tuleta ühe fakti põhjal võiduprotsenti.

### 4. Laadi alla toetavad dokumendid

```bash
FOLDER="$EVIDENCE_DIR/$(echo $CUSTOMER_NAME | tr '[:upper:] ' '[:lower:]-')-$(date +%Y-%m)"
mkdir -p "$FOLDER"

# Invoice PDFs (URLs come from the Stripe invoice objects)
curl -sL "$INVOICE_PDF_URL" -o "$FOLDER/invoice.pdf"
```

### 5. Salvesta oma tingimused / tühistamispoliitika PDF-ina

Playwrighti (Node) abil:

```bash
node -e "
const { chromium } = require('playwright');
(async () => {
  const browser = await chromium.launch();
  const page = await browser.newPage({ viewport: { width: 1280, height: 900 } });
  await page.goto(process.env.TERMS_URL, { waitUntil: 'networkidle' });
  await page.pdf({ path: process.argv[1], format: 'A4', printBackground: true });
  await browser.close();
})();
" "$FOLDER/cancellation_policy.pdf"
```

### 6. Genereeri tegevuslogi PDF

Koosta lühike, hõlpsasti ülevaadatav HTML-tegevuslogi ja teisenda see seejärel WeasyPrinti abil PDF-iks:

```python
from weasyprint import HTML
HTML('activity_log.html').write_pdf('activity_log.pdf')
```

**HTML peab sisaldama `<meta charset="UTF-8">`**, et vältida moonutatud tähemärke klientide nimedes/aadressides.

Hõlpsasti ülevaadatav paigutus:

1. **Kokkuvõtlik ruudustik** – klient / e-post / sisemine kasutaja-ID / Stripe'i kliendi-ID / konto loomise aeg / pakett / tellimuse algus / tühistamise ajatempel (koos vahega registreerumisest) / kliendi märgitud tühistamise põhjus / kasutatud krediidid või ühikud / ostu IP / arveldusaadress / makseviis (viimased 4, kaardibränd) / Stripe'i riskihinnang / viitaja allikas / makse käivitaja
2. **Maksete ajaloo tabel** – iga arve koos kuupäeva, summa ja staatusega. **Tõsta vaidlustatud rida** punasega esile. Lisa veerg „Vaidlustatud?“ selgesõnalise Jah/Ei-ga.
3. **Ostukorvi katsete tabel** – tõendab teadlikku ostukavatsust (kummutab laiemalt ka `fraudulent`-väite)
4. **Loodud / kasutatud elementide tabel** – nimed, tüübid, ajatemplid. Konkreetne kasutus > omadussõnad.
5. **Sisselogimiste logi** – iga sessioon: ajatempel, riik, seade. Järjepidevus = sama kaardiomanik.
6. **Ajajoone kokkuvõte** – üks kronoloogiline jutustus, mis lõpeb lausega „ja seejärel esitati $DATE vaidlus.“
7. **Kokkuvõtlik lõik** – tsiteeri kasutaja enda `cancel_reason`-it vaidluse märgitud põhjuse vastu, kui need on vastuolus.

Eelista konkreetseid numbreid omadussõnadele. „29 sisselogimissessiooni, 3 nimega projekti,
29 960 kasutatud krediiti“ on kasulikum kui „kasutas põhjalikult“.

### 7. Näita kõike kasutajale enne esitamist

```bash
open "$FOLDER"
```

Näita vastuväite teksti, tõendifaile ja oma võidutõenäosuse hinnangut. **Oota kasutaja selgesõnalist heakskiitu.**

### 8. Laadi tõendifailid Stripe'i üles

**Failid lähevad aadressile `files.stripe.com`, MITTE `api.stripe.com`** – erinev host:

```bash
curl -s -u "$STRIPE_SECRET_KEY:" \
  -F "purpose=dispute_evidence" \
  -F "file=@$FOLDER/activity_log.pdf" \
  https://files.stripe.com/v1/files
```

Tagastab `{"id": "file_xxx", ...}`. Salvesta `id` – sellele viitad tõendiväljades.

**Üks file_id vaidluse kohta.** Stripe lükkab tagasi veaga `400 "That file is already attached to something else"`, kui proovid `file_id`-d eri vaidlustes taaskasutada (eriti `service_documentation` puhul). Kui vaidlustad sama kliendi N vaidlust, laadi iga ühise PDF-i üles N koopiana – sama sisu, iga kord uus `file_id`.

### 9. Esita tõendid (üks katse – `submit=true` on lõplik)

```bash
curl -s -u "$STRIPE_SECRET_KEY:" \
  -X POST "https://api.stripe.com/v1/disputes/$DISPUTE_ID" \
  -d "evidence[uncategorized_text]=$REBUTTAL_TEXT" \
  -d "evidence[uncategorized_file]=$ACTIVITY_LOG_FILE_ID" \
  -d "evidence[receipt]=$INVOICE_FILE_ID" \
  -d "evidence[cancellation_policy]=$TERMS_FILE_ID" \
  -d "evidence[cancellation_policy_disclosure]=$CANCEL_DISCLOSURE_TEXT" \
  -d "evidence[refund_policy]=$TERMS_FILE_ID" \
  -d "evidence[refund_policy_disclosure]=$REFUND_DISCLOSURE_TEXT" \
  -d "evidence[cancellation_rebuttal]=$CANCEL_REBUTTAL_TEXT" \
  -d "evidence[access_activity_log]=$ACCESS_LOG_SUMMARY" \
  -d "evidence[service_date]=$SERVICE_START_DATE" \
  -d "evidence[product_description]=$PRODUCT_DESCRIPTION" \
  -d "evidence[customer_email_address]=$CUSTOMER_EMAIL" \
  -d "evidence[customer_name]=$CUSTOMER_NAME" \
  -d "evidence[customer_purchase_ip]=$PURCHASE_IP" \
  -d "evidence[billing_address]=$BILLING_ADDRESS" \
  -d "submit=true" \
  "https://api.stripe.com/v1/disputes/$DISPUTE_ID"
```

Kontrolli vastust:
- `status` peaks olema `under_review`
- `evidence_details.has_evidence` peaks olema `true`
- `evidence_details.submission_count` peaks olema `1`

## Tõendistrateegia vaidluse põhjuse järgi

### `fraudulent`
Eesmärk: tõesta, et ostu tegi kaardiomanik.
- Varasemad vaidlustamata maksed sama kaardiga (tugevaim)
- OAuth-sisselogimine (Google/Apple) = isikutuvastusega registreerumine
- Järjepidev IP / riik / seade eri sessioonides
- Mitu ostukorvi katset enne ostu = päris inimene, kes kaalub
- Stripe'i enda riskihinnang oli `normal`
- Tellimus on endiselt aktiivne ega ole tühistatud

### `product_not_received`
Eesmärk: tõesta kättetoimetamist + kasutamist.
- Sisselogimiste logi
- Tootes loodud elemendid / tehtud toimingud
- **Kliendi enda märgitud tühistamise põhjus**, kui ta tühistas – tsiteeritud sõna-sõnalt vaidlusväite vastu
- Kviitung ja tervituskiri

### `product_unacceptable`
Eesmärk: näita, et toode vastas oma kirjeldusele ja klient kasutas seda.
- Sama mis `product_not_received` puhul PLUSS sinu kasutustingimuste sõnastus kvaliteedi / tagasimaksepoliitika kohta
- Too esile, et klient ei avanud kunagi tugipiletit

### `subscription_canceled`
Eesmärk: tõesta, et klient ei tühistanud kunagi (või tühistas pärast uuendamist).
- Tellimuse objekt, mis näitab uuendamise kuupäeval `cancel_at_period_end=false`
- Kogu sisselogimis-/kasutustegevus pärast uuendamise kuupäeva
- Tingimuste sõnastus, mille kohaselt aastatellimuste uuendamine nõuab selgesõnalist tühistamist

## Vastuväidete mallid

### `uncategorized_text`
> [Kliendi nimi] lõi [Toote nimi] konto [kuupäev] meetodil [autentimismeetod] ja tellis paketi [pakett] ($[summa]/[intervall]) sama [kaardibränd]-kaardiga. Esimest [N] makset ei vaidlustatud kunagi. Klient kasutas teenust aktiivselt: [N] sisselogimissessiooni riigist [riik] seadmes [seade], [N] loodud elementi ([loend]) ja [N] kasutatud [ühikut]. Vaidlustatud makse on [uuendus-/esialgne] makse kuupäeval [kuupäev]. Tellimus oli [staatus] ja on endiselt [aktiivne/tühistatud]. Klient ei võtnud kunagi tühistamiseks ega tagasimakse taotlemiseks ühendust klienditoega. Meie tühistamis- ja tagasimaksepoliitika on avaldatud aadressil [TERMS_URL]. Tegu ei ole pettusliku tehinguga – see on õiguspärane ost kaardiomanikult, kes [tegi/on teinud] sellel kontol [N] muud vaidlustamata makset.

### `cancellation_policy_disclosure`
> Meie tühistamispoliitika on avaldatud aadressil [TERMS_URL]. Tellijad võivad igal ajal tühistada ja säilitavad juurdepääsu arveldusperioodi lõpuni. See klient ei tühistanud kunagi.

### `refund_policy_disclosure`
> Meie tagasimaksepoliitika on avaldatud aadressil [TERMS_URL]. Pakume [N]-päevast raha tagasi garantiid. Klient ei taotlenud tagasimakset selle aja jooksul ega ka mitte kunagi hiljem.

## Olulised märkused

- Failide üleslaadimine käib aadressile `files.stripe.com`, MITTE `api.stripe.com`
- Üks esitamine vaidluse kohta. `submit=true` on lõplik
- Tõendite tähtaeg on `evidence_details.due_by` (unixi ajatempel). Pärast seda ei saa enam esitada
- Andmebaasipäringud peavad olema AINULT LUGEMISEKS – piira võimaluse korral ühenduse rolli
- Ära kunagi lisa tegevuslogi PDF-i teiste klientide andmeid
- Salvesta iga tõendipakett kettale juhuks, kui pead sellele sama kliendi tulevaste vaidluste puhul viitama

## Suure väärtusega vastuolumuster

> Klient registreerub, kasutab toodet põgusalt, tühistab mõne tunni jooksul, märkides rakendusesiseses tühistamisvormis põhjuseks „Poor user experience“, ja esitab paar päeva hiljem tagasinõude väitega „toodet ei saadud kätte“.

Tühistamisvormi põhjus on tagasinõude väitega otseses vastuolus. Tsiteeri seda vastuväites sõna-sõnalt,
rakendades samal ajal siiski tasude ja varasemate tulemuste otsustusväravat.

Kontrolli ALATI ESMALT `users.cancel_reason`-it (või oma vastet), kui vaidluse põhjus on `product_not_received` või `product_unacceptable`.