#php #stripe-payments
#php #stripe-платежи
Вопрос:
я хотел бы иметь общую функцию для извлечения объектов из stripe (клиенты, подписки, купоны и т. Д.).
возможно, я делаю это неправильно, но функция довольно долго обрабатывала ошибки для каждого типа извлечения — я снова и снова выполнял пример обработки ошибок try catch, предоставленный документацией stripe, в коммутаторе. поэтому я хотел бы иметь только один оператор try catch и динамически оценивать try на основе типа объекта, который я извлекаю. возможно ли это? в противном случае я могу просто вернуться к очень длинной функции со всеми операторами try catch .
function stripe_retrieve_object($objectName,$objectId) {
switch ($objectName) {
case "coupon":
$retrieveStripeCode = "StripeCoupon::retrieve("$objectId");";
break;
case "customer":
$retrieveStripeCode = "StripeCustomer::retrieve("$objectId");";
break;
case "subscription":
$retrieveStripeCode = "StripeSubscription::retrieve("$objectId");";
break;
default:
echo "There was a generic error. We were unable to retrieve payment data, and no updates to payment were made. Please contact admin@email.com";
} # switch ($objectName) {
try {
$stripeTry = eval($retrieveStripeCode);
return $stripeTry;
catch(StripeErrorCard $e) { ... }
} # function stripe_retrieve_object($objectName,$objectId)
я вижу в журналах в stripe, что выполняется вызов для извлечения объекта, но тело ответа на панели инструментов stripe пустое, и ничего не возвращается из $stripeTry = eval($retrieveStripeCode); я попробовал var_dump($stripeTry), и он вернулся НУЛЕВЫМ.
Комментарии:
1. Вы повторили
$retrieveStripeCode
, чтобы убедиться, что это действительно то, что вы думаете?2. ДА. например, когда я ввожу coupon в качестве $objectName, он повторяет: Stripe Coupon::retrieve(«the_coupon_code»);
Ответ №1:
Вы можете использовать переменные функции вместо eval()
.
Обратите внимание, что PHP 7.x требуется для использования 'ClassName::methodName'
в качестве переменных функций.
function stripe_retrieve_object($objectName,$objectId) {
$
switch ($objectName) {
case "coupon":
$retrieveStripeCode = 'StripeCoupon::retrieve';
break;
case "customer":
$retrieveStripeCode = 'StripeCustomer::retrieve';
break;
case "subscription":
$retrieveStripeCode = 'StripeSubscription::retrieve';
break;
default:
echo "There was a generic error. We were unable to retrieve payment data, and no updates to payment were made. Please contact admin@email.com";
} # switch ($objectName) {
try {
$stripeTry = $retrieveStripeCode($objectId);
return $stripeTry;
catch(StripeErrorCard $e) { ... }
}
Комментарии:
1. я использую достаточно новую версию php, чтобы это сработало для меня. спасибо, друг php!