ismaiwz adlı üyeden alıntı: mesajı görüntüle
15 yaşında yazdığım bu scriptin amacı: Papara hesabınıza gelen ödemeleri otomatik olarak işlemek ve açıklamalarını kontrol ederek SMM yazılımıma kayıtlı kullanıcıya bakiyeyi eklemekti. Tam anlamıyla çalışan bu kodum en son 2023 Kasım ayında düzeltilmiştir. Bu yazılım ile kendi ödeme platformum olan payparayı kurmaya çalıştım ve yarıda bıraktım.

const express = require('express');
const app = express();
const { JsonDatabase } = require('wio.db');
const session = require('express-session');
const axios = require('axios')
const puppeteer = require('puppeteer-extra')
const path = require('path')
const fs = require('fs')
var favicon = require('serve-favicon')
const config = require('./config.json')
const { SHA1 } = require('crypto-js')
const Base64 = require('crypto-js/enc-base64');
const querystring = require('querystring');

const apiKey = config.shipy;

const db = new JsonDatabase({
    databasePath: "./database.json"
});

const api = new JsonDatabase({
    databasePath: "./api.json"
});

const services = new JsonDatabase({
    databasePath: "./services.json"
});

const payments = new JsonDatabase({
    databasePath: "./payments.json"
});

process.on('uncaughtException', (error) => {
    console.error('Yakalanamayan bir hata oluştu:');
    console.error(error);
  });
  
  process.on('unhandledRejection', (reason, promise) => {
    console.error('Yakalanamayan bir vaat reddedildi:');
    console.error('Vaatin sebebi:', reason);
    console.error('Vaat:', promise);
  });
  
// Puppeteer


const StealthPlugin = require('puppeteer-extra-plugin-stealth')
puppeteer.use(StealthPlugin())

puppeteer.launch({ headless: false }).then(async browser => {
    const page = await browser.newPage()
    await page.setViewport({ width: 800, height: 600 })
    await page.goto('https://www.papara.com/personal/auth')
    const logininput = await page.waitForSelector('input[name="emailOrPhone"]');
    const btn = await page.waitForSelector('div.relative > a.btn-primary');
    await logininput.type(config.paparaphone)
    await btn.click()
    console.log('phone ok')
    const passinput = await page.waitForSelector('input[maxlength="6"]');
    const passbtn = await page.waitForSelector('a[data-testid="onClickButton"]');
    await passinput.type(config.paparapassword)
    await passbtn.click()
    const userInput = await getUserInput('Lütfen bir değer girin: ');
    await page.waitForTimeout(30000);
    const code = await page.waitForSelector('input[maxlength="6"]');
    const codebtn = await page.waitForSelector('a[data-testid="onClickButton"]');
    await code.type(userInput)
    await codebtn.click()
    console.log('mail onay')
    await page.waitForTimeout(60000);
    await page.goto('https://www.papara.com/personal/transaction-history/list')
    setInterval(async() => {
        const ledgers = await page.evaluate(async () => {
            const response = await fetch("https://webapi.papara.com/user/ledgers", {
              "headers": {
                "accept": "application/json",
                "access-control-allow-origin": "https://www.papara.com",
                "content-type": "application/json; charset=utf-8",
                "sec-fetch-dest": "empty",
                "sec-fetch-mode": "cors",
                "sec-fetch-site": "same-site",
                "x-papara-app-dark-mode-enabled": "true",
                "x-resource-language": "tr-TR"
              },
              "referrer": "https://www.papara.com/personal/transaction-history/list",
              "referrerPolicy": "no-referrer-when-downgrade",
              "body": "{\"pageSize\":20,\"page\":1,\"currency\":null,\"category\":4}",
              "method": "POST",
              "mode": "cors",
              "credentials": "include"
            });
            fetch('https://webapi.papara.com/user/refreshtoken')
            const data = await response.json();
            return data;
          })
          payments.set('ledgers', ledgers.data.items)
    }, 60000)
  })
setInterval(() => {
    if(payments.get('ledgers')) {
        
    payments.get('ledgers').forEach((q) => {
        if(payments.get('completeds').includes(q.transactionId)) {
            return;
        } else {
            if(q.description) {
            if(db.get(`${q.description}`)) {
                if(q.amount >= 20) {
                    if(q.amount >= 200) {
                payments.push('completeds', q.transactionId)
                db.math(q.description + ".cash", "+", q.amount + (q.amount / 100 * 5))
                db.push(q.description + ".deposits", {
                    name: q.descriptionTitle,
                    date: Date.now(),
                    cash: q.amount,
                    bonus: (q.amount / 100 * 5)
                })
            } else {
                payments.push('completeds', q.transactionId)
                db.math(q.description + ".cash", "+", q.amount)
                db.push(q.description + ".deposits", {
                    name: q.descriptionTitle,
                    date: Date.now(),
                    cash: q.amount
                })
            }
            } else {
                return;
            }
            } else {
                return;
            }
        }
    }
    })
    } else {
        return
    }
}, 60000)


setInterval(() => {
    db.all().forEach((q) => {
        if(q.data.orders && typeof(q.data.orders) == "object") {
            q.data.orders.forEach((x) => {
                getorder(x.order).then(result => {
                    if(result == "Canceled") {
                        db.math(q.ID, "+", x.price)
                        console.log('iade gerçekleşti ' + q.ID)
                    }
                })
            })
        }
    })
}, 60000)

async function getUserInput(prompt) {
    const readline = require('readline').createInterface({
      input: process.stdin,
      output: process.stdout
    });
  
    return new Promise((resolve) => {
      readline.question(prompt, (userInput) => {
        readline.close();
        resolve(userInput);
      });
    });
  }






Çok uzun bir script yazmışsınız hocam. Gelen ödemeleri açıkcası mailden parse etmeniz son derece basit ve bu kadar zahmete değmezdi.

Paylaşım için teşekkürler.