Braintree paypal 在 codeigniter 中不起作用
Posted
技术标签:
【中文标题】Braintree paypal 在 codeigniter 中不起作用【英文标题】:braintree paypal is not working in codeigniter 【发布时间】:2017-08-16 23:15:27 【问题描述】:我想将 Braintree paypal 集成到我的 codeigniter 网站中。我在我的控制器构造函数中从服务器加载 Braintree 文件和凭据,并将其他代码放入一个方法中,但它总是给出错误 Unknown or expired payment_method_nonce。下面是方法
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');
我尝试了谷歌,但没有运气。请帮助并提前感谢。
【问题讨论】:
【参考方案1】:全面披露:我在 Braintree 工作。如果您还有任何问题,请随时联系support。
来自documentation on Transaction:sale()
:
要创建交易,您必须包含金额以及 paymentMethodNonce 或 paymentMethodToken。
您在paymentMethodNonce
参数中传递的参数不是payment method nonce。相反,您将其传递给client token,这会导致它失败。这些物品名称相似,但用途却大不相同。
要在您的代码中正确创建交易,您必须引用已保存在保险库中的付款方式(使用付款方式令牌),或引用一组新的令牌化付款方式信息客户在您的网站上提交的信息(通过使用付款方式 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
]
]);
如果您需要一些额外的资源来创建付款方式随机数并将其传回您的服务器,您可以参考our full PHP integration example。
【讨论】:
以上是关于Braintree paypal 在 codeigniter 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
我是不是需要同时购买 Paypal 和 Braintree 帐户才能进行 Paypal 集成?