【问题标题】:submitting paypal request - blank return screen提交贝宝请求 - 空白返回屏幕
【发布时间】:2015-07-09 06:35:59
【问题描述】:

我不是第一次创建贝宝付款请求。我正在尝试设置一本书的付款。书籍详细信息(例如价格)取自数据库中存储的有关书籍的数据。用户只需输入图书 ID。理想情况下,这些详细信息会变成贝宝付款。

但是,当我提交表单时,我只是返回一个空白屏幕。理想情况下,我希望设置付款,然后用户可以在网站上确认购买。谁能帮我消除黑屏?

代码:

try {
      $dbh = new PDO('mysql:host=' . DB_HOST . ';dbname=' . DB_USERNAME, DB_USERNAME, DB_PASSWORD);
} catch   (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}


  $book =$_GET["book_id"];
  $user =$_GET["user"];


$sth = $dbh->prepare("SELECT title, price FROM books2 WHERE b_id=$book");
$sth->bindParam(':title', $title);
$sth->bindParam(':price', $price);
$sth->execute();




$payer = new Payer();
$payer->setPaymentMethod("paypal");


$item1 = new Item();
$item1->setName($title)
    ->setCurrency('USD')
    ->setQuantity(1)
    ->setPrice($price);



$details = new Details();
$details->setShipping(1.2)
 ->setTax(1.3)
 ->setSubtotal(17.50);




$transaction = new Transaction();
$transaction->setAmount($price)
    ->setItemList($item1)
    ->setDescription("Payment description")
    ->setInvoiceNumber(uniqid());



$payment = new Payment();
$payment->setIntent("sale")
    ->setPayer($user)
    ->setRedirectUrls($redirectUrls)
    ->setTransactions(array($transaction));

    $execution = new PaymentExecution();
$result = $payment->execute($execution, $apiContext);


$request = clone $payment;


try {
    $payment->create($apiContext);
} catch (Exception $ex) {
    ResultPrinter::printError("Created Payment Using PayPal. Please visit the URL to Approve.", "Payment", null, $request, $ex);
    exit(1);
}


$approvalUrl = $payment->getApprovalLink();

ResultPrinter::printResult("Setting up payment using Paypal. Please visit the URL to Approve.", "Payment", "<a href='$approvalUrl' >$approvalUrl</a>", $request, $payment);

return $payment;

【问题讨论】:

  • 您是否为您的代码开启了错误报告功能?
  • 我没有...添加错误报告时出现以下错误。 Fatal error: Uncaught exception 'InvalidArgumentException' with message 'Id cannot be null'
  • 这看起来像是一个合法的错误。你可能想要更多地研究它。还要尝试查看代码的哪一部分导致了该错误。
  • 错误在于准备好的SELECT语句。 $sth = $dbh-&gt;prepare("SELECT title, price FROM books2 WHERE b_id=$book"); 不知道为什么。我尝试选择的项目不为空
  • 您传递的$book 的值是多少?

标签: php paypal paypal-sandbox paypal-rest-sdk


【解决方案1】:

获得 $approvalUrl 后,您需要 将他们重定向到 PayPal 网址。它会 看起来像这样。

$approvalUrl = $payment->getApprovalLink();  
if(isset($approvalUrl)) {
    header("Location: $approvalUrl");
    exit;
}

【讨论】:

    【解决方案2】:

    您需要从代码中删除这些行。您试图先执行付款,这是不对的。

    $execution = new PaymentExecution();
    $result = $payment->execute($execution, $apiContext);
    

    paypal 的流程如下:

    1. 使用 $payment->create() 方法创建付款。
    2. 按照 Ken Johnson 提供的步骤获取approval_url。
    3. 用户将通过网络浏览器完成结帐并接受付款。
    4. 您将被重定向回您设置的“redirect_url”。
    5. 您对从 url $_GET[] 数组返回的 PaymentId 执行 GET
    6. 使用以下代码执行付款。

    您可以按照此处提供的说明获得完整的想法: http://localhost/paypal/PayPal-PHP-SDK/sample/index.php#0adf233ad486604d0b6df90c586fbdad

    此外,您可能希望返回这两行,因为它们仅用于示例目的,并且会抛出 Class not found 异常。

    ResultPrinter::printError(
    ResultPrinter::printResult(
    

    【讨论】:

      猜你喜欢
      • 2013-05-23
      • 2017-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-04
      • 2017-08-06
      • 2013-07-06
      • 2020-01-16
      相关资源
      最近更新 更多