Надеюсь, ты сможешь мне помочь. У меня есть функция 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-коде, даже если я вижу ошибку в панели инструментов «Вход в 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/sbc/ /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
Я подозреваю, что проблема ваша 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);
}
Других решений пока нет …