2016-06-10 2 views
1

У меня есть интегрированный метод диаграммы в yii2 rest api Using this reference.. Я хочу, чтобы обновить клиент, но я получаю следующее сообщение об ошибке:Как обновить клиента в способе оплаты Braintree

Missing argument 2 for Braintree\Customer::update()

Ниже мой код:

$braintree = Yii::$app->braintree; 
     $response = $braintree->call('Customer', 'update','15552090',[        

             'firstName' => 'test-1545', 
             'lastName' => 'asdf', 
             'company' => 'New Company', 
             'email' => '[email protected]', 
             'phone' => 'new phone', 
             'fax' => 'new fax', 
             'website' => 'http://new.example.com' 

          ]); 
         print_r($response); die; 

Я суммируется здесь, как передать аргументы?

+0

Просьбы предоставить ссылку на расширения, которые вы используете. – arogachev

+0

Я использую следующие https://github.com/bryglen/yii2-braintree – Arunendra

ответ

1

Это проблема данного расширения. См. this issue о Гитубе.

Issue OP рекомендует это исправление:

public function call($command, $method, $values, $values2 = null) 
{ 
    $class = strtr("{class}_{command}", [ 
     '{class}' => $this->_prefix, 
     '{command}' => $command, 
    )); 

    if ($values2) { 
     return call_user_func(array($class, $method), $values, $values2); 
    else { 
     return call_user_func(array($class, $method), $values); 
    } 
} 

в то время как расширение автор рекомендует следующее:

if (is_array($values)) { 
    call_user_func_array(...); 
} else { 
    call_user_func(...); 
} 

В любом случае вы должны переопределить этот компонент с вашим собственным и применить патч.

Обратите внимание, что количество кода в приложении невелико (64 строки в одном файле), поэтому вы можете создать свою собственную оболочку или найти лучшую, поскольку эта проблема все еще не исправлена.

И, возможно, лучше использовать методы braintree_php, которые будут более понятными, чем магические call.

Update: Чтобы переопределить компонент, создать свой собственный класс, расширяющий от bryglen лет, поместите его, например, в папке common/components в случае использования передовых приложений.

namespace common\components; 

class Braintree extends \bryglen\braintree\Braintree 
{ 
    public function call($command, $method, $values) 
    { 
     // Override logic here 
    } 
} 

Затем замените имя класса расширения с пользовательским один в конфигурации:

'components' => [ 
    'braintree' => [ 
     'class' => 'common\components\Braintree', 
     'environment' => 'sandbox', 
     'merchantId' => 'your_merchant_id', 
     'publicKey' => 'your_public_key', 
     'privateKey' => 'your_private_key', 
    ], 
], 
+0

Можете ли вы мне посоветовать или дать какие-либо подсказки, как переопределить этот компонент, поскольку я новичок в yii2. Спасибо – Arunendra

+0

@Arunendra Я обновил ответ с более подробными инструкциями о том, как это сделать. – arogachev

Смежные вопросы