我有一个名为PayPal Express的类,它正在处理API URL请求,以检索结果,如ClientID、Secret和PayPal Base URL。该类已设置为config.php
define('PRO_PayPal', 0);
// Configuration for Live Paypal Transactions
if(PRO_PayPal){
define("PayPal_CLIENT_ID", "#########################");
define("PayPal_SECRET", "###################");
define("PayPal_BASE_URL", "https://api.paypal.com/v1/");
}
// configurations for sandbox Transactions
else{
define("PayPal_CLIENT_ID", "ATDV3X3ftdxIDC97H99-XgtTca7cpMsyPDtOrxuGKSMYzphNivsu8YFFWTVkRK5CnXbr93BY9liDNAeY");
define("PayPal_SECRET", "EPFvBgOjceLpCmoCKKrsXEFzcR4OtJh4hDimKoobA5Md3qpJGrByUgxh6leUMqzwrxrp_BwR8fXP9Vv3");
define("PayPal_BASE_URL", "https://api-m.sandbox.paypal.com/v1/");
}
PayPal Express Class
require 'Config.php';
class PaypalExpress{
public $paypalClientID = PayPal_CLIENT_ID;
public $paypalSecret = PayPal_SECRET;
public function validate($paymentRef, $paymentToken, $payerID, $productID){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, PayPal_BASE_URL.'oauth2/token');
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, $this->paypalClientID.":".$this->paypalSecret);
curl_setopt($ch, CURLOPT_POSTFIELDS, "grant_type=client_credentials");
$response = curl_exec($ch);
curl_close($ch);
if(empty($response)) die("Error:No response from paypal");
else{
$jsonData = json_decode($response);
$curl = curl_init(PayPal_BASE_URL.'payments/payment/'.$paymentRef);
curl_setopt($curl, CURLOPT_POST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer ' . $jsonData->access_token,
'Accept: application/json',
'Content-Type: application/xml'
));
$response = curl_exec($curl);
curl_close($curl);
// Transaction data
$result = json_decode($response);
return $result;
}
}
}
我有这个Process.php页面,它从PayPal获得返回的URL数据,它应该插入到数据库中验证的支付详细信息
require 'config.php';
require 'session.php';
require 'class/paypalExpress.php';
require 'class/property.php';
require 'class/payment.php';
try {
if(!empty($_GET['paymentRef']) && !empty($_GET['payerID']) && !empty($_GET['token']) && !empty($_GET['propid']) ){
$paymentRef = $_GET['paymentRef'];
$payerID = $_GET['payerID'];
$token = $_GET['token'];
$propid = $_GET['propid'];
$payment = new payment();
$property = new property();
$paypalExpress = new paypalExpress();
$newId = $property->getProperty($propid);
$Check=$paypalExpress->validate($paymentRef, $propid, $payerID, $token);
if(isset($Check) && $Check->state == 'approved')
{
$id = $Check->id;
$state = $Check->state;
$payerFirstName = $Check->payer->payer_info->first_name;
$payerLastName = $Check->payer->payer_info->last_name;
$payerName = $payerFirstName.' '.$payerLastName;
$payerEmail = $Check->payer->payer_info->email;
$payerID = $Check->payer->payer_info->payer_id;
$payerCountryCode = $Check->payer->payer_info->country_code;
$paidAmount = $Check->transactions[0]->amount->details->subtotal;
$currency = $Check->transactions[0]->amount->currency;
if($newId->Price == $paidAmount && $newId->Currency == $currency)
{
$newpayment = $payment->updatePayments($propid,$paymentRef,$payerID,$token);
// redirecting information to reciept page
header("Location:Reciept.php?pyfname=$payerFirstName&pylname=$payerLastName&pymail=$payerEmail");
}
}
}
else{
header('Location:index.php'); // redirecting users if there is no transaction details on the url
}
} catch (PDOException $th) {
echo "Error : " .$th->getMessage();
}
现在,当交易完成后,Paypal将交易详细信息重定向到Process.php,而不是插入支付详细信息时,我只是在URL上看到一个空白页面,其中包含Paypal的交易详细信息。代码上有我遗漏的东西吗?
感谢您的代码!几个星期以来,我一直在想如何完成贝宝服务器端的集成!如果您将paypal凭据从configuration.php移动到paypalExpress.php,您的代码就会工作
<?php //confiuration.php
define('PRO_PayPal', 0);
// define("PayPal_CLIENT_ID", "#########################");
// define("PayPal_SECRET", "'###################");
define("PayPal_BASE_URL", "https://api-m.paypal.com/v1/");
//////////////////////////////////////////////////////////
<?php //paypalExpress.php
require 'configuration.php';
class PaypalExpress{
//public $paypalClientID = '#########################'; // SANDBOX
// public $paypalSecret = '#########################'; // SANDBOX
public $paypalClientID = '#########################'; // LIVE
public $paypalSecret = '#########################'; // LIVE
public function validate($paymentRef, $paymentToken, $payerID, $productID){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, PayPal_BASE_URL.'oauth2/token');
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, $this->paypalClientID.":".$this->paypalSecret);
curl_setopt($ch, CURLOPT_POSTFIELDS, "grant_type=client_credentials");
curl_setopt($ch, CURLOPT_FAILONERROR,true);
$response = curl_exec($ch);
curl_close($ch);
/*
// Configuration for Live Paypal Transactions
if(PRO_PayPal){
define("PayPal_CLIENT_ID", "#########################");
define("PayPal_SECRET", "###################");
define("PayPal_BASE_URL", "https://api.paypal.com/v1/");
}
// configurations for sandbox Transactions
else{
define
("PayPal_CLIENT_ID","ATDV3X3ftdxIDC97H99-
XgtTca7cpMsyPDtOrxuGKSMYzphNivsu8YFFWTVkRK5CnXbr93BY9liDNAeY");
define
("PayPal_SECRET","EPFvBgOjceLpCmoCKKrsXEFzcR4OtJh4
hDimKoobA5Md3qpJGrByUgxh6leUMqzwrxrp_BwR8fXP9Vv3");
define("PayPal_BASE_URL", "https://api-m.sandbox.paypal.com/v1/");
}
*/
?>