Я хочу интегрировать 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, но не повезло. Пожалуйста, помогите и спасибо заранее.
Полное раскрытие: я работаю в Braintree. Если у вас есть дополнительные вопросы, не стесняйтесь обращаться служба поддержки.
От документация по Transaction:sale()
:
Чтобы создать транзакцию, вы должны указать сумму и paymentMethodNonce или paymentMethodToken.
Параметр, который вы передаете в свой paymentMethodNonce
параметр не является Способ оплаты. Вместо этого вы передаете это клиентский токен, что заставляет его терпеть неудачу. Эти предметы имеют одинаковые названия, но имеют совершенно разные цели.
Чтобы правильно создать транзакцию в своем коде, вам нужно будет либо сослаться на метод оплаты, который вы сохранили в своем хранилище (с помощью токена метода оплаты), либо ссылаться на набор недавно добавленной информации о способе оплаты, которую клиент представлены на вашем сайте (с использованием метода оплаты 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.
Других решений пока нет …