2016-07-24 13 views
1

Ich kann nicht scheinen, das innerhalb einer anderen Funktion zu verwenden. So habe ich eine Funktion namens user_authnet ($ user), wo ich ein Array von meinem DB das Benutzerobjekt übergeben. In diesem Objekt habe ich die authorize.net-Kundenprofil-ID gespeichert. Also versuche ich Auth.net API aufzurufen, um die Zahlungsmethoden und Abonnements zu erhalten.AuthnetJson-Namespace John Conde

Wenn ich

namespace JohnConde\Authnet; 

an der Spitze von meinem Skript enthalten, dann bekomme ich

function 'user_authnet' not found or invalid function name 

als Fehler. Ich schätze, weil es nicht zu einem deiner Klassen gehört.

Wenn ich nicht die Namespace-Deklaration setzen, bekomme ich

Class 'AuthnetApiFactory' not found 

obwohl die autoload.php läuft.

Ich versuche, ein Plugin für Wordpress zu machen. Hier ist meine vollständige Code:

namespace JohnConde\Authnet; 
include get_template_directory() . '/assets/vendor/authnetjson/config.inc.php'; 
include get_template_directory() . '/assets/vendor/authnetjson/src/autoload.php'; 

$request = AuthnetApiFactory::getJsonApiHandler(AUTHNET_LOGIN, AUTHNET_TRANSKEY, AuthnetApiFactory::USE_DEVELOPMENT_SERVER);     

add_action('show_user_profile', 'user_authnet'); 
add_action('edit_user_profile', 'user_authnet'); 


function user_authnet($user) 
{ 
    global $request; 
    ?> 
     <h3>Stored Payment Methods</h3> 
     <input type="text" name="authnet_customerProfileId" value="<?php echo esc_attr(get_the_author_meta('authnet_customerProfileId', $user->ID)); ?>"> 
    <?php 
     if(get_the_author_meta('authnet_customerProfileId', $user->ID)) { 

      $response = $request->getCustomerProfileRequest(array(
       "customerProfileId" => get_the_author_meta('authnet_customerProfileId', $user->ID) 
      )); 

      print_r($response); 
     } 
} 


add_action('personal_options_update', 'save_authnet'); 
add_action('edit_user_profile_update', 'save_authnet'); 

function save_authnet($user_id) 
{ 
    update_user_meta($user_id, 'authnet_customerProfileId', $_POST['authnet_customerProfileId']); 
} 

Antwort

1

Durch diesen Namespace am oberen Rand der Seite platzieren Sie sind im Wesentlichen die gesamte Seite in diesem Namensraum platzieren. Das willst du nicht machen.

Stellen Sie den Namespace Ihrem Aufruf AuthnetApiFactory::getJsonApiHandler() einfach voran, damit Sie weiterhin im globalen Namespace arbeiten können.

// Remove the line below 
//namespace JohnConde\Authnet; 
include get_template_directory() . '/assets/vendor/authnetjson/config.inc.php'; 
include get_template_directory() . '/assets/vendor/authnetjson/src/autoload.php'; 

// Add the namespace to your call to AuthnetApiFactory::getJsonApiHandler() 
$request = \JohnConde\Authnet\AuthnetApiFactory::getJsonApiHandler(AUTHNET_LOGIN, AUTHNET_TRANSKEY, \JohnConde\Authnet\AuthnetApiFactory::USE_DEVELOPMENT_SERVER);     

Sie können auch die use Anweisung verkürzen dies ein wenig Syntax:

use JohnConde\Authnet\AuthnetApiFactory; 
include get_template_directory() . '/assets/vendor/authnetjson/config.inc.php'; 
include get_template_directory() . '/assets/vendor/authnetjson/src/autoload.php'; 

$request = \JohnConde\Authnet\AuthnetApiFactory::getJsonApiHandler(AUTHNET_LOGIN, AUTHNET_TRANSKEY, AuthnetApiFactory::USE_DEVELOPMENT_SERVER);