first commit
This commit is contained in:
@@ -0,0 +1,119 @@
|
||||
<?php
|
||||
|
||||
class PayPalClient
|
||||
{
|
||||
private static $api_url = [
|
||||
0 => 'https://api-m.paypal.com',
|
||||
1 => 'https://api-m.sandbox.paypal.com',
|
||||
];
|
||||
|
||||
private $gateway_url;
|
||||
private $client_id;
|
||||
private $client_secret;
|
||||
private $access_token;
|
||||
|
||||
public function __construct($client_id, $client_secret, $mode)
|
||||
{
|
||||
$this->gateway_url = self::$api_url[$mode];
|
||||
$this->client_id = $client_id;
|
||||
$this->client_secret = $client_secret;
|
||||
$this->access_token = $this->getAccessToken();
|
||||
}
|
||||
|
||||
//获取Token
|
||||
public function getAccessToken(){
|
||||
$path = '/v1/oauth2/token';
|
||||
$post = 'grant_type=client_credentials';
|
||||
$result = $this->curl($this->gateway_url . $path, $post, true);
|
||||
$this->access_token = $result['access_token'];
|
||||
return $this->access_token;
|
||||
}
|
||||
|
||||
//创建订单
|
||||
public function createOrder($params){
|
||||
$path = '/v2/checkout/orders';
|
||||
return $this->curl($this->gateway_url . $path, $params);
|
||||
}
|
||||
|
||||
//支付订单
|
||||
public function captureOrder($id){
|
||||
$path = '/v2/checkout/orders/'.$id.'/capture';
|
||||
return $this->curl($this->gateway_url . $path, '');
|
||||
}
|
||||
|
||||
//查询订单
|
||||
public function orderDetail($id){
|
||||
$path = '/v2/checkout/orders/'.$id;
|
||||
return $this->curl($this->gateway_url . $path);
|
||||
}
|
||||
|
||||
//查询支付
|
||||
public function paymentDetail($capture_id){
|
||||
$path = '/v2/payments/captures/'.$capture_id;
|
||||
return $this->curl($this->gateway_url . $path);
|
||||
}
|
||||
|
||||
//退款
|
||||
public function refundPayment($capture_id, $params){
|
||||
$path = '/v2/payments/captures/'.$capture_id.'/refund';
|
||||
return $this->curl($this->gateway_url . $path, $params);
|
||||
}
|
||||
|
||||
//退款查询
|
||||
public function refundDetail($refund_id){
|
||||
$path = '/v2/payments/refunds/'.$refund_id;
|
||||
return $this->curl($this->gateway_url . $path);
|
||||
}
|
||||
|
||||
private function curl($url, $data = null, $auth = false)
|
||||
{
|
||||
$header[] = 'Accept: application/json';
|
||||
$header[] = 'Content-Type: application/json';
|
||||
if(!empty($this->access_token))
|
||||
{
|
||||
$header[] = 'Authorization: Bearer '.$this->access_token;
|
||||
}
|
||||
if($data !== null && is_array($data)){
|
||||
$data = json_encode($data);
|
||||
}
|
||||
|
||||
$curlVersion = curl_version();
|
||||
$ua = 'PayPalSDK/PayPal-PHP-SDK 1.14.0 (platform-ver='.PHP_VERSION.'; os='.str_replace(' ', '_', php_uname('s') . ' ' . php_uname('r')).'; machine='.php_uname('m').'; curl='.$curlVersion['version'].')';
|
||||
|
||||
$ch = curl_init();
|
||||
curl_setopt($ch, CURLOPT_URL, $url);
|
||||
curl_setopt($ch, CURLOPT_FAILONERROR, false);
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
||||
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
|
||||
if($data !== null){
|
||||
curl_setopt($ch, CURLOPT_POST, true);
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
|
||||
}
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
|
||||
curl_setopt($ch, CURLOPT_USERAGENT, $ua);
|
||||
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
|
||||
// 获取token
|
||||
if ($auth) {
|
||||
curl_setopt($ch, CURLOPT_USERPWD, $this->client_id.':'.$this->client_secret);
|
||||
}
|
||||
$response = curl_exec($ch);
|
||||
if (curl_errno($ch)) {
|
||||
throw new Exception('curl error: '.curl_error($ch));
|
||||
}
|
||||
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
curl_close($ch);
|
||||
$result = json_decode($response, true);
|
||||
if($httpCode>=200 && $httpCode<300){
|
||||
return $result;
|
||||
}else{
|
||||
if(isset($result['error_description'])){
|
||||
throw new Exception('['.$result['error'].']'.$result['error_description']);
|
||||
}elseif(isset($result['message'])){
|
||||
throw new Exception('['.$result['name'].']'.$result['message']);
|
||||
}else{
|
||||
throw new Exception('返回数据解析失败(httpCode='.$httpCode.')');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user