digitorum.ru

Как меня найти

Профиль

icq: 4415944

PayPal: Мгновенные платежи.

api, paypal, php

Без подробностей. Заметка для себя.

Приложение регистрируем тут: https://develop...

Файл-конфиг "<#_url#>-c.php"

<?php
	define('PAYPAL_CLIENT_ID', 'XXX');
	define('PAYPAL_CLIENT_SECRET', 'YYY');
	define('PAYPAL_API_URL', 'https://api.paypal.com/v1');
?>

 

Файл-инициализатор "<#_url#>"

<?php
	
	session_start();
	include($_SERVER['DOCUMENT_ROOT'] . '<#_url#>-c.php');
	// получение аксес токена
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, PAYPAL_API_URL . "/oauth2/token");
	curl_setopt($ch, CURLOPT_HEADER, 0);
	curl_setopt($ch, CURLOPT_HTTPHEADER, array(
		 "Accept: application/json",
		"Accept-Language: ru_RU"
	));
	curl_setopt($ch, CURLOPT_POSTFIELDS, "grant_type=client_credentials");
	curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
	curl_setopt($ch, CURLOPT_USERPWD, PAYPAL_CLIENT_ID . ":" . PAYPAL_CLIENT_SECRET);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	$accessTokenData = curl_exec($ch); 
	curl_close($ch); 
	$accessTokenData = json_decode($accessTokenData, true);
	// отправка запроса на платеж
	if(isset($accessTokenData['access_token'])) {
		$saleData = json_encode(
			array(
				"intent" => "sale",
	  			"redirect_urls" => array(
	    			"return_url" => "http://digitorum.ru/<#_url#>-return/",
	    			"cancel_url" => "http://digitorum.ru/<#_url#>-cancel/"
	  			),
	  			"payer" => array(
	    			"payment_method" => "paypal"
	  			),
	  			"transactions" => array(
	     		 	array(
	     		 		"amount" => array(
	        				"total" => "1",
	        				"currency" => "RUB"
	      				),
	      				"description" => "Тестовый платеж в 1 рубль."
	    			)
	  			)
			)
		);
		// получение ответа
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_URL, PAYPAL_API_URL . "/v1/payments/payment");
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_HTTPHEADER, array(
			 "Content-Type: application/json",
			 "Authorization: Bearer " . $accessTokenData['access_token']
		 ));
		curl_setopt($ch, CURLOPT_POSTFIELDS, $saleData);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
		$saleReturnedData = curl_exec($ch); 
		curl_close($ch); 
		$saleReturnedData = json_decode($saleReturnedData, true);
		// запоминаем в сессию все необходимые данные для подтверждения платежа
		$_SESSION['PAYPAL_ACCESS_TOKEN'] = $accessTokenData['access_token'];
		$_SESSION['PAYPAL_PAY_ID'] = $saleReturnedData['id'];
		// перенаправляем на паэйпал
		if(isset($saleReturnedData['links'])) {
			foreach($saleReturnedData['links'] as $link) {
				if($link['rel'] == 'approval_url') {
					header('Location: ' . $link['href']);
					exit();
				}
			}
		}
	}
	print "SOMETHING WENT WRONG!";
?>

 

Скрипт подтверждения платежа "<#_url#>-return/index.php"

<?php
	
	session_start();
	
	require($_SERVER['DOCUMENT_ROOT'] . '<#_url#>-c.php');
	
	if(!isset($_SESSION['PAYPAL_ACCESS_TOKEN']) && isset($_SESSION['PAYPAL_PAY_ID'])) {
		die("NO ACCESSTOKEN!!!");
	}
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, PAYPAL_API_URL . "/v1/payments/payment/" . $_SESSION['PAYPAL_PAY_ID'] . "/execute/");
	curl_setopt($ch, CURLOPT_HEADER, 0);
	curl_setopt($ch, CURLOPT_HTTPHEADER, array(
		"Content-Type: application/json",
		"Authorization: Bearer " . $_SESSION['PAYPAL_ACCESS_TOKEN']
	));
	curl_setopt($ch, CURLOPT_POSTFIELDS, '{ "payer_id" : "' . $_GET['PayerID'] . '" }');
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	$approveData = curl_exec($ch); 
	curl_close($ch);
	$approveData = json_decode($approveData, true);
	print_r($approveData);
	
?>