claabs / epicgames-freegames-node

Automatically login and find available free games the Epic Games Store. Sends you a prepopulated checkout link so you can complete the checkout after logging in. Supports multiple accounts, login sessions, and scheduled runs.
https://hub.docker.com/r/charlocharlie/epicgames-freegames
MIT License
1.33k stars 89 forks source link

"errorCode": "errors.com.epicgames.purchase.purchase.captcha.challenge" #14

Closed Freekers closed 4 years ago

Freekers commented 4 years ago

I pulled the latest Docker image which worked fine for one account, but fails on a second account even though it says 'Done purchasing'. It looks like it fails on the captcha challenge while confirming the 'purchase'. Both accounts make use of the same region (EURO), yet use endpoint en-us strangely enough.

Below is the complete log, I hope it helps the troubleshooting.

Thank you!

> epicgames-freegames-node@1.0.0 start /usr/app
> node dist/index.js

[2020-05-29 17:23:34.975 +0000] INFO  (17 on f027d15bed9b): Successfully refreshed login
[2020-05-29 17:23:36.772 +0000] INFO  (17 on f027d15bed9b): Available free games
    availableGames: [
      "Borderlands: The Handsome Collection"
    ]
[2020-05-29 17:23:36.776 +0000] DEBUG (17 on f027d15bed9b): Fetching updated IDs
    url: "https://store-content.ak.epicgames.com/api/en-US/content/bundles/borderlands-the-handsome-collection"
[2020-05-29 17:23:36.849 +0000] DEBUG (17 on f027d15bed9b): Getting product info
    linkedOfferNs: "85189f7cf7a64f86aa6aa91d81d36c08"
    linkedOfferId: "a61c6602b5784d36801d0cab73e02337"
[2020-05-29 17:23:36.850 +0000] DEBUG (17 on f027d15bed9b): Posting for offer entitlement
    data: {
      "query": "query launcherQuery($namespace:String!, $offerId:String!) {\n    Launcher {\n      entitledOfferItems(namespace: $namespace, offerId: $offerId) {\n        namespace\n        offerId\n        entitledToAllItemsInOffer\n        entitledToAnyItemInOffer\n      }\n    }\n  }",
      "variables": {
        "namespace": "85189f7cf7a64f86aa6aa91d81d36c08",
        "offerId": "a61c6602b5784d36801d0cab73e02337"
      }
    }
    url: "https://www.epicgames.com/store/backend/graphql-proxy"
[2020-05-29 17:23:37.252 +0000] INFO  (17 on f027d15bed9b): Unpurchased free games
    purchasableGames: [
      "Borderlands: The Handsome Collection"
    ]
[2020-05-29 17:23:37.253 +0000] INFO  (17 on f027d15bed9b): Purchasing Borderlands: The Handsome Collection
[2020-05-29 17:23:38.617 +0000] DEBUG (17 on f027d15bed9b): purchaseToken
    purchaseToken: "XXXXXXXXXXXXXXXXX"
[2020-05-29 17:23:38.619 +0000] DEBUG (17 on f027d15bed9b): Order preview request
    orderPreviewRequest: {
      "useDefault": true,
      "setDefault": false,
      "namespace": "85189f7cf7a64f86aa6aa91d81d36c08",
      "country": null,
      "countryName": null,
      "orderId": null,
      "orderComplete": null,
      "orderError": null,
      "orderPending": null,
      "offers": [
        "a61c6602b5784d36801d0cab73e02337"
      ],
      "offerPrice": ""
    }
[2020-05-29 17:23:39.230 +0000] DEBUG (17 on f027d15bed9b): Order preview response
    orderPreviewResponse: {
      "affiliation": null,
      "catalogResponse": {
        "currencySymbolPlacement": "LEFT",
        "code": "NL",
        "displayName": "NETHERLANDS",
        "ratingSystem": "PEGI",
        "embargoed": false,
        "sellerOfRecord": "EPIC_INT",
        "vatChargeRate": 23,
        "vatPercentage": 21,
        "defaultCurrency": "EUR",
        "vatIncluded": true,
        "region": "EURO",
        "sellerOfRecordName": "Epic Games International S.à r.l.",
        "paymentCurrency": "EUR"
      },
      "country": "NL",
      "countryName": "Netherlands",
      "message": null,
      "namespace": "85189f7cf7a64f86aa6aa91d81d36c08",
      "offers": [
        "a61c6602b5784d36801d0cab73e02337"
      ],
      "orderComplete": false,
      "orderError": false,
      "orderId": null,
      "orderPending": false,
      "orderResponse": {
        "orderType": "PURCHASE",
        "symbol": "€",
        "country": "NL",
        "agentUserName": "anonymous",
        "toUSDExchangeRate": 1.1079040816007766,
        "totalPrice": 0,
        "accountIpCountry": "NL",
        "formattedTotalPrice": {
          "amount": "0.00",
          "symbol": "€",
          "placement": "f",
          "decimals": 2,
          "digits": 2
        },
        "formattedConvenienceFee": {
          "amount": "0.00",
          "symbol": "€",
          "placement": "f",
          "decimals": 2,
          "digits": 2
        },
        "paymentCurrencySymbol": "€",
        "orderStatus": "PREVIEW",
        "epicAccountId": "XXXXXXXXXXXXXXXXX",
        "salesChannel": "epic-store-web-purchase",
        "formattedPresentmentAmount": {
          "amount": "0.00",
          "symbol": "€",
          "placement": "f",
          "decimals": 2,
          "digits": 2
        },
        "canQuickPurchase": true,
        "formattedBillingPaymentAmount": {
          "amount": "0.00",
          "symbol": "€",
          "placement": "f",
          "decimals": 2,
          "digits": 2
        },
        "taxStatus": "NOT_APPLICABLE",
        "totalTax": 0,
        "isFree": true,
        "coupons": [],
        "walletPaymentAmount": 0,
        "totalDiscounted": 0,
        "useSplitPayment": false,
        "currency": "EUR",
        "formattedTotalTax": {
          "amount": "0.00",
          "symbol": "€",
          "placement": "f",
          "decimals": 2,
          "digits": 2
        },
        "rewardVoucher": null,
        "fraudScore": 0,
        "lastModifiedDate": "2020-05-29T17:23:39.146+0000",
        "paymentCurrencyCode": "EUR",
        "paymentCurrencyAmount": 0,
        "accountIpAddress": "XXXXXXXXXXXXXXXXX",
        "vat": 0,
        "batchJobFailedRetryCount": 0,
        "lineOffers": [
          {
            "totalPrice": 0,
            "formattedTotalPrice": {
              "amount": "0.00",
              "symbol": "€",
              "placement": "f",
              "decimals": 2,
              "digits": 2
            },
            "entitlementSource": "AppEpicgamesCom",
            "sellerName": "2K Games, Inc.",
            "refundedRevenueWithoutTax": 0,
            "revenueWithoutTax": 0,
            "title": "Borderlands: The Handsome Collection",
            "formattedBasePrice": {
              "amount": "59.99",
              "symbol": "€",
              "placement": "f",
              "decimals": 2,
              "digits": 2
            },
            "offerType": "BUNDLE",
            "basePayoutCurrencyCode": "USD",
            "sellerId": "o-37m6jbj5wcvrcvm4wusv7nazdfvbjk",
            "formattedDiscountedPrice": {
              "amount": "0.00",
              "symbol": "€",
              "placement": "f",
              "decimals": 2,
              "digits": 2
            },
            "refundedBasePayoutPrice": 0,
            "remainingDiscountPrice": 0,
            "refundedConvenienceFee": 0,
            "refundedTax": 0,
            "initiatedBy": "SELLER",
            "basePrice": 5999,
            "formattedBasePayoutPrice": {
              "amount": "0.00",
              "symbol": "€",
              "placement": "f",
              "decimals": 2,
              "digits": 2
            },
            "unitPrice": 0,
            "refundedDiscountPrice": 0,
            "quantity": 1,
            "vat": 0,
            "formattedVoucherPrice": {
              "amount": "0.00",
              "symbol": "€",
              "placement": "f",
              "decimals": 2,
              "digits": 2
            },
            "refundedQuantity": 0,
            "shareRate": 0,
            "shareRateByDeveloper": 0,
            "voucherDiscount": 0,
            "namespaceDisplayName": "Ivory",
            "convenienceFee": 0,
            "discountedPrice": 0,
            "formattedTaxPrice": {
              "amount": "0.00",
              "symbol": "€",
              "placement": "f",
              "decimals": 2,
              "digits": 2
            },
            "namespace": "85189f7cf7a64f86aa6aa91d81d36c08",
            "formattedUnitPrice": {
              "amount": "0.00",
              "symbol": "€",
              "placement": "f",
              "decimals": 2,
              "digits": 2
            },
            "offerId": "a61c6602b5784d36801d0cab73e02337",
            "taxPrice": 0,
            "basePayoutPrice": 0,
            "roleNames": []
          }
        ],
        "merchantGroup": "EGS_MKT",
        "creationDate": "2020-05-29T17:23:39.146+0000",
        "formattedWalletPaymentAmount": {
          "amount": "0.00",
          "symbol": "€",
          "placement": "f",
          "decimals": 2,
          "digits": 2
        },
        "convenienceFee": 0,
        "identityId": "XXXXXXXXXXXXXXXXX",
        "fraud": false,
        "billingPaymentAmount": 0,
        "vatIncluded": true,
        "paymentCurrencyExchangeRate": 1,
        "formattedTotalDiscounted": {
          "amount": "0.00",
          "symbol": "€",
          "placement": "f",
          "decimals": 2,
          "digits": 2
        },
        "canSplitPayment": false
      },
      "paypalError": null,
      "showCurrencyChangeMessage": false,
      "syncToken": "XXXXXXXXXXXXXXXXX",
      "voucherList": null
    }
[2020-05-29 17:23:39.232 +0000] DEBUG (17 on f027d15bed9b): Confirm order request
    confirmOrderRequest: {
      "useDefault": true,
      "setDefault": false,
      "namespace": "85189f7cf7a64f86aa6aa91d81d36c08",
      "country": "NL",
      "countryName": "Netherlands",
      "orderId": null,
      "orderComplete": false,
      "orderError": false,
      "orderPending": false,
      "offers": [
        "a61c6602b5784d36801d0cab73e02337"
      ],
      "includeAccountBalance": false,
      "totalAmount": 0,
      "affiliateId": "",
      "creatorSource": "",
      "threeDSToken": "",
      "voucherCode": null,
      "syncToken": "XXXXXXXXXXXXXXXXX",
      "isFreeOrder": false
    }
[2020-05-29 17:23:39.618 +0000] DEBUG (17 on f027d15bed9b): confirm order response
    confirmOrderResponse: {
      "captchaResult": "CAPTCHA",
      "syncToken": "XXXXXXXXXXXXXXXXX",
      "errorCode": "errors.com.epicgames.purchase.purchase.captcha.challenge"
    }
[2020-05-29 17:23:39.619 +0000] DEBUG (17 on f027d15bed9b): Done purchasing
claabs commented 4 years ago

A captcha after the purchase...

This may make things very bad. Let me look into it.

claabs commented 4 years ago

Good news is that the captcha is softly restricted, so we can still automate it unlike the account creation one.

Bad news is that we have to use the captcha solver more often, which may get users closer to their Google Speech to Text free limit. Hopefully it doesn't require it on every purchase, and can mark the bot as reputable.

Also, thanks a bunch for reporting these issues. The whole account reputation thing makes it difficult for me to dig up some of these issues.

Freekers commented 4 years ago

You're most welcome, thanks for fixing this issue! Also, you get up to 60 minutes of free Speech to Text API credits per month from Google, so I wouldn't worry too much about it, especially since the transcribed audio files are very short (i.e. just a couple of seconds)

https://i.imgur.com/ClKlGQO.png