могу ли я вызвать библиотеку stripe, если я сохраняю ее как строку в переменной?

#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!