PHP引用Braintree支付

1,173 阅读1分钟

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里面搜搜,有很多。