我正在尝试将PayPal结帐集成到Codeigniter中,我已经使用撰写器安装了PayPal SDK,但无法正常工作。基本上,我要在此处执行的操作是包括一个PayPal智能结帐按钮,该按钮在登录后重定向到我创建订单并执行的服务器。我不知道这段代码有什么问题,因为这里看起来一切正常,但仍然出现错误。当前,我正在使用我的APP的沙箱ClientID和密码。
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
require './vendor/autoload.php';
use PayPal\Api\Payment;
use PayPal\Api\PaymentExecution;
use PayPal\Api\ExecutePayment;
use PayPal\Api\Amount;
use PayPal\Api\Details;
use PayPal\Api\Item;
use PayPal\Api\ItemList;
use PayPal\Api\Payer;
use PayPal\Api\RedirectUrls;
use PayPal\Api\Transaction;
class paymentController extends CI_Controller {
/**
* Index Page for this controller.
*
* Maps to the following URL
* http://example.com/index.php/welcome
* - or -
* http://example.com/index.php/welcome/index
* - or -
* Since this controller is set as the default controller in
* config/routes.php, it's displayed at http://example.com/
*
* So any other public methods not prefixed with an underscore will
* map to /index.php/welcome/<method_name>
* @see http://codeigniter.com/user_guide/general/urls.html
*/
public function __construct()
{
parent::__construct();
$this->load->helper('url');
$this->load->helper('html');
$this->load->helper('email');
$this->load->library('session');
$this->load->helper('form');
$this->load->library('form_validation');
$this->load->helper('cookie');
$this->load->library('cart');
}
public function index()
{
$this->load->view('payment controller index function');
}
public function execute(){
$apiContext = new \PayPal\Rest\ApiContext(
new \PayPal\Auth\OAuthTokenCredential(
'AVIPqzQ05Njz9589zFa3bn_PcIC-k-rLp0p0JdCjcfot--WtdBu7gLRWbOHRkDhDCODk_tYIHKRG4SCa', // ClientID
'EIus88X-MF7d0ZATg7XSek4JjAtA7WHBAHc3pe0xHRRRzk9_siHEua3wQlXmtQo2a-Xr5hMHS_Osl1eW' // ClientSecret
)
);
$paymentId = $_GET['paymentId'];
$payment = payment::get($paymentId, $apiContext);
$execution = new PaymentExecution();
$execution->setPayerId($_GET['PayerID']);
$transaction = new Transaction();
$amount = new Amount();
$details = new Details();
$details->setShipping(2.2)
->setTax(1.3)
->setSubtotal(17.50);
$amount->setCurrency('USD');
$amount->setTotal(21);
$amount->setDetails($details);
$transaction->setAmount($amount);
$execution->addTransaction($transaction);
$result = $payment->execute($execution, $apiContext);
print_r($result);
}
}
您的问题应提供403消息的更完整的响应日志,包括PayPal-Debug-Id(如果有)。
但是,查看代码,您可能需要添加类似以下内容的代码:
$apiContext->setConfig(
array(
'mode' => 'sandbox',
'log.LogEnabled' => true,
'log.FileName' => '../PayPal.log',
'log.LogLevel' => 'DEBUG', // PLEASE USE `INFO` LEVEL FOR LOGGING IN LIVE ENVIRONMENTS
)
样本改编自https://github.com/paypal/PayPal-PHP-SDK/blob/master/sample/bootstrap.php
如果没有这样的上下文添加,则您的代码似乎正在尝试在默认实时模式下使用Sandbox ClientID和secret ,它将永远无法工作,因此会导致预期的4xx错误。
另外,我建议您从v1 / payments PayPal-PHP-SDK切换到使用针对PHP的更新的v2 / orders API的实现:https : //github.com/paypal/Checkout-PHP-SDK
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句