Braintree PayPal не работает в Codeigniter

Я хочу интегрировать Braintree PayPal в свой сайт codeigniter. Я загружаю файлы braintree и учетные данные с сервера в конструктор контроллеров и помещаю другой код в метод, но он всегда выдает ошибку Unknown or expired payment_method_nonce.Below — метод

public function braintree(){
if($this->session->userdata('user_id') != '' && $this->session->userdata('user_id') != 'user'){
$user_id        = $this->input->post('user_id');
$amount         = $this->input->post('amount');
$inscription_id = $this->input->post('inscription_id');

$user_details = $this->db->get_where('spm_users',array('id'=>$user_id))->row_array();
if(!empty($user_details->braintree_customer_id)){
$CustomerId =  (string)$user_details->braintree_customer_id;
}else{
$result = Braintree_Customer::create([
'firstName' => $user_details->name,
'lastName' => $user_details->surname,
'email' => $user_details->email,
'phone' => $user_details->telephone,
]);
$CustomerId = (string)$result->customer->id;
$this->db->where("id",$user_id);
$this->db->update("spm_users", array('braintree_customer_id'=>$CustomerId));
}
$clientToken = Braintree_ClientToken::generate([
"customerId" => $CustomerId
]);
$card_id ='';
$clientToken_new = Braintree_ClientToken::generate();
$result1 = Braintree_Transaction::sale([
'amount' => $amount,
'paymentMethodNonce' => $clientToken_new,
'options' => [
'submitForSettlement' => True
]
]);
if($result1->success == true){
$updateArr = array(
'amount'=>$result1->transaction->amount,
'balance_transaction'=>$result1->transaction->id,
'inscription_status'=>2,
'status'=>1,
'data'=>json_encode($result1),
'payment_method'        => 'Braintree',
'payment_date'=>date('Y-m-d H:i:s')
);
$this->db->where("id",$inscription_id);
$this->_db->update("spm_inscription", $updateArr);
$this->session->set_flashdata('msg','Inscription Payment Success');
redirect('frontend/paypalpayment/'.$inscription_id);
}else{
$this->session->set_flashdata('msg','Payment failed');
redirect('frontend/paypalpayment/'.$inscription_id);
}
}else{
redirect('frontend');
}
}

и вот мой конструктор

public function __construct() {
parent::__construct();
require_once '/home/public_html/mysite/braintree/Braintree.php';
Braintree_Configuration::environment('sandbox');
Braintree_Configuration::merchantId('zxxxxxxxxxxxxxxd');
Braintree_Configuration::publicKey('7xxxxxxxxxxxxxxx7');
Braintree_Configuration::privateKey('1xxxxxxxxxxxxxxxxxxxxxx8');
}

Я попробовал Google, но не повезло. Пожалуйста, помогите и спасибо заранее.

1

Решение

Полное раскрытие: я работаю в Braintree. Если у вас есть дополнительные вопросы, не стесняйтесь обращаться служба поддержки.

От документация по Transaction:sale():

Чтобы создать транзакцию, вы должны указать сумму и paymentMethodNonce или paymentMethodToken.

Параметр, который вы передаете в свой paymentMethodNonce параметр не является Способ оплаты. Вместо этого вы передаете это клиентский токен, что заставляет его терпеть неудачу. Эти предметы имеют одинаковые названия, но имеют совершенно разные цели.

  • Клиентский токен: содержит информацию о конфигурации вашей учетной записи шлюза. клиентские SDK используйте их для правильной настройки своей конфигурации и бесперебойной работы с сервером, и их нельзя передавать на вызовы по продаже транзакций.
  • Способ оплаты: ссылка на набор информации о способе оплаты, такой как номер кредитной карты и срок действия. Они обычно производятся токенизировать звонки в клиентских SDK после того, как пользователь введет данные кредитной карты.
  • Способ оплаты токен: ссылка на способ оплаты, который вы сохранили в своем аккаунте Braintree.

Чтобы правильно создать транзакцию в своем коде, вам нужно будет либо сослаться на метод оплаты, который вы сохранили в своем хранилище (с помощью токена метода оплаты), либо ссылаться на набор недавно добавленной информации о способе оплаты, которую клиент представлены на вашем сайте (с использованием метода оплаты nonce). Например, если вы хотите сохранить токены методов оплаты клиентов в вашей базе данных, вы можете запустить что-то вроде этого:

    if (!empty($user_details->braintree_customer_id)) {
$CustomerId = (string) $user_details->braintree_customer_id;
$CustomerSavedPaymentMethod = (string) $user_details->payment_method_token;
} else {
...
}

$result1 = Braintree_Transaction::sale([
'amount' => $amount,
'paymentMethodToken' => $CustomerSavedPaymentMethod,
'options' => [
'submitForSettlement' => True
]
]);

Если вам нужны дополнительные ресурсы для создания одноразового метода оплаты и передачи его обратно на сервер, вы можете обратиться к наш полный пример интеграции с PHP.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]