Braintree支付是paypal旗下的支付,最近公司为了扩张海外客户需要用到paypal,所以决定使用Braintree做为app的支付方式。
Braintree正式账号申请地址 apply.braintreegateway.com/signup/apac… 正式账号申请需要海外和香港的公司资质,大陆公司不行。沙盒账户Braintree官网直接可以申请。
1.先准备好Braintree沙盒环境下的这个自己百度很简单
- merchantId 商家ID是整个网关帐户(包括网关中可能存在的多个商家帐户)的唯一标识符
- publicKey 用户特定的公共标识符
- privateKey 用户的专用标识符
如下:
$gateway = new Braintree\Gateway([
'environment' => 'sandbox',
'merchantId' => 'kb4thsm2dzq32***',
'publicKey' => '26p9tz5jqc****',
'privateKey' => '43e0326c24bb4c297a5fe8***'
]);
2.使用composer安装好Braintree 的sdk
composer require braintree/braintree_php:5.0.0
注意braintree版本最新版6.0.0需要php7.4所以我自己选适合自己的5.0.0
谨慎使用composer update
因为会使composer.json里面的sdk全部升级版本会造成sdk版本不兼容系统报异常的问题
3.安装好Braintree后生成一个paypal.php
如下:
` <?php
namespace lib;
use Exception; use Braintree;
class paypal {
public $module = 'Lib-paypal';
public $log;
// This is the identifier of our payment method
public $_code = 'braintree_creditcard';
public function __construct()
{
$this->log = new \utility\logger();
}
/**
* API凭证
* environment 该环境指定应将通过API的请求定向到哪里-沙箱或生产
* merchantId 商家ID是整个网关帐户(包括网关中可能存在的多个商家帐户)的唯一标识符
* publicKey 用户特定的公共标识符
* privateKey 用户的专用标识符
* link https://articles.braintreepayments.com/control-panel/important-gateway-credentials?_ga=1.78189399.251773956.1611709303#api-credentials
*/
public function getGateway()
{
$gateway = new Braintree\Gateway([
'environment' => 'sandbox',
'merchantId' => 'kb4ths*****',
'publicKey' => '26p9tz5*****',
'privateKey' => '43e0326*****5'
]);
return $gateway;
}
//生成客户令牌需要返回给前端,前端获取后才能调起paypal
/**
* 生成客户令牌
* 令牌包含客户端初始化客户端SDK与Braintree进行通信所需的所有授权和配置信息
* https://developers.braintreepayments.com/reference/request/client-token/generate/php
*/
public function getClientToken()
{
$clientToken = $this->getGateway()->clientToken()->generate();
return $clientToken;
}
//$amount价格,$nonce是前端从paypal获取到的密钥传到后端进行扣费
//控制器调用此方法进行扣费,$amount价格需要自己后端确认钱数哦。
public function getnonce($amount,$nonce)
{
//进行扣费
$result = $this->getGateway()->transaction()->sale([
'amount' => $amount,
'paymentMethodNonce' => $nonce,
'deviceData' => time(),
'options' => ['submitForSettlement' => True]
]);
//判断是否支付成功
if ($result->success) {
$data['status']=200;
$data['state']='success';
return $data;
} else {
$data['status']=300;
$data['state']='lose';
return $data;
}
}
}
?> `
总结:总体来说很简单,注意以下两点就行
1.composer要正确使用 2.Braintree版本问题
其他的问题可以去githup里面搜搜,有很多。