Проблема с PHP Parse Cloud и Stripe при использовании тестовых кредитных карт

Надеюсь, ты сможешь мне помочь. У меня есть функция Parse Cloud в Sashido (Parse Server) для управления подпиской Stripe следующим образом:

var stripe = require("stripe")("sk_test_CCCCccCCXXXXXXxXXX");
Parse.Cloud.define("crearCargo", function(request, response) {
    var  token = request.params.stripeToken;
    var  mail = request.params.email;
//var mail = request.params.email;

    //Crear Customer
    const customer = stripe.customers.create({
        email: mail,
        source: token,
    }, function(err, customer) {
        // asynchronously called
        if (err){
            response.error("Fallo Customer");
        }else{
           //const{id} = customer;
            id = customer.id;
            stripe.subscriptions.create({

                    customer: id,
                    items: [
                        {
                            plan: "plan_E0jrObw8X7Le2F",

                        },
                    ]
                }, function(err, subscription) {
                    if (err){
                        response.error(err.message);
                    }else{                        
                        response.success(subscription.id);
                    }
                }
            );
        }

    });

});

Я вызываю эту функцию со своего сайта через php следующим образом:

$results = ParseCloud::run("crearCargo", ["stripeToken" => "$stripeToken", "email" => "$email"]);

Это отлично работает, когда кредитная карта в порядке, но когда я использую отклоненную кредитную карту для устранения ошибок, я не могу получить сообщение об ошибке в моем php-коде, хотя я вижу ошибку в панели управления Log in Sashido. Это журнал:

Failed running cloud function crearCargo for user undefined with:
  Input: {"stripeToken":"tok_1DaoDfHWMeJb0DRPDaAgN7rS","email":"[email protected]"}
  Error: {"code":141,"message":"Your card was declined."}
Nov 26, 2018, 12:50:44 -05:00 - ERROR
Error generating response for [POST] /1//functions/crearCargo 
"Your card was declined."

{
  "stripeToken": "tok_1DaoDfHWMeJb0DRPDaAgN7rS",
  "email": "[email protected]"
}

Так что я не смог справиться с ошибками и вместо этого получил в браузере ошибку HTTP 500. У вас есть какие-нибудь подсказки, почему?

Вот как работает с результатом $ и отлично работает, если кредитная карта действительна, я получаю код подписки:

try {
    if (substr( $results, 0, 3 ) === "sub"){

       echo $results;

   }
} catch (ParseException $e) {
      echo 'Caught exception: '.$e->getMessage()."\n";
}

Поэтому, когда я использую кредитную карту 4242424242424242, я получаю код подписки, но когда я вызываю ошибку с номером кредитной карты 4100000000000019, я не могу получить обратно сообщение об ошибке.

Это именно то, что я получил, когда использовал ошибку отображения PHP с ini_set ('display_errors', 1); ini_set ('display_startup_errors', 1); error_reporting (E_ALL);

Получена ошибка:

Неустранимая ошибка: Uncaught Parse \ ParseException: ваша карта отклонена. в /home/u940759797/domains/powersellapp.com/public_html/web/Modelo/src/Parse/ParseClient.php:357 Трассировка стека: # 0 /home/u940759797/domains/powersellapp.com/public_html/webr/Mode /Parse/ParseCloud.php(32): Parse \ ParseClient :: _ request ('POST', 'functions / crear ...', NULL, '{"stripeToken": ...', false) # 1 / home / u940759797 / domains / powersellapp.com / public_html / web / Modelo / suscripcion.php (28): Parse \ ParseCloud :: run ('crearCargo', Array) # 2 {main} добавлен в / home / u940759797 / domains / powersellapp. com / public_html / web / Modelo / src / Parse / ParseClient.php в строке 357

Если вы укажете PHP, чтобы он отображал подробные ошибки (ini_set('error_reporting', E_ALL); error_reporting(E_ALL);), какие ошибки вы видите на своей странице php при попытке использования недействительной карты (4100000000000019 и т. д.)

duck 26.11.2018 23:30

Он показывает мне исключение непринятого синтаксического анализа с кодом ошибки 141 и сообщение об ошибке Ivalid Credit Card. Но я не знаю, как это поймать

A ti te digo 27.11.2018 01:54

Отредактировал вопрос, именно так и получил. Любые идеи?

A ti te digo 27.11.2018 02:49

Попробуй простой try { $results = ParseCloud::run(... your args ...); } catch(Exception $e) { print_r($e); }, он выводит исключение?

duck 27.11.2018 18:00

Отличная утка, вот в чем дело !!!! Тнкс брат ...

A ti te digo 27.11.2018 20:42
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
5
90
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я подозреваю, что проблема в том, что ваш вызов ParseCloud::run не находится в вашем блоке try-catch. Попробуйте что-то вроде этого:

try {
  $results = ParseCloud::run("crearCargo", ["stripeToken" => "$stripeToken", "email" => "$email"]);
} 
catch(ParseException $e) {
  echo 'Caught exception: '.$e->getMessage()."\n";
}
catch(Exception $e) {
  // do something with other exceptions, for testing we'll just print it out
  print_r($e);
}

Другие вопросы по теме