当前位置: 首页 > 知识库问答 >
问题:

如何在Laravel 8中集成PayPal智能按钮?

景子安
2023-03-14

我试图集成PayPal智能按钮在我的Laravel 8网站。这些是我使用的留档:https://developer.paypal.com/docs/checkout/integrate/

https://developer.paypal.com/docs/checkout/reference/server-integration/set-up-transaction/

https://github.com/paypal/Checkout-PHP-SDK

问题:我有两个错误:

此错误强调了我的前端中的读取。

cart:278 POST http://127.0.0.1:8000/createOrder 500 (Internal Server Error)
{err: "Error: Expected an order id to be passed↵ 

这是我的路线文件:

use App\Http\Controllers\PayPalController;

Route::post('/createOrder', [PayPalController::class, 'createOrder']);

以下是我的PayPalController方法:

<?php

namespace App\Http\Controllers;

// To capture payment for paypal
namespace Sample\CaptureIntentExamples;

// Grabs the environment and request to be used for paypal
use Sample\PayPalClient;
use PayPalCheckoutSdk\Orders\OrdersCreateRequest;

// Request/Response
use Illuminate\Http\Request;
use Illuminate\Http\Response;


class PayPalController extends Controller
{
    html" target="_blank">public function createOrder() {

        $request = new OrdersCreateRequest();

        $request->prefer('return=representation');

        $request->body = [
            "intent" => "CAPTURE",
            "purchase_units" => [[
                "reference_id" => "test_ref_id1",
                "amount" => [
                    "value" => "100.00",
                    "currency_code" => "USD"
                    ]
            ]], 
            "application_context" => [
                "cancel_url" => "https://127.0.0.1:8000/cart",
                "return_url" => "https://127.0.0.1:8000/"
            ]         
        ];           

        // 3. Call PayPal to set up a transaction
        $client = PayPalClient::client();

        $response = $client->execute($request);

        // 4. Return a successful response to the client.
        return $response;
    }
}

这是我的前端。blade.view文件:

<script src="https://www.paypal.com/sdk/js?client-id=*******************"></script>
                                
<form action="/createOrder" method="POST">
@csrf   
<div id="paypal-button-container"></div>
                                
<script>
  paypal.Buttons({
    createOrder: function() {
      return fetch('/createOrder', {
        method: 'POST',
        headers: {
          'content-type': 'application/json',
          'Accept': 'application/json',
          'url': '/createOrder',
          "X-CSRF-Token": document.querySelector('input[name=_token]').value
         },
  }).then(function(res) {
    return res.json();
  }).then(function(data) {
    return data.orderID; // Use the same key name for order ID on the client and server
  });
  }
  }).render('#paypal-button-container');
</script>
</form>

我已经编辑了PayPalClient。php文件与我的凭据。

共有1个答案

祁星阑
2023-03-14

您需要在内部诊断/调试/createOrder路由中的500错误。尝试在浏览器中加载URL,看看是否从Laravel获得更多错误输出。如果没有,请编辑相应的PHP以输出有关正在发生的事情的更多有用信息。

一旦您将其排序并返回一个实际的id作为JSON对象的一部分,您需要更改前端代码以读取该id的键。看起来您正在读取键orderID,除非您特别设置它,否则不会设置它。

以下前端演示代码更好,并且具有错误处理功能:https://developer.paypal.com/demo/checkout/#/pattern/server

这部分前端代码:

<form action="/createOrder" method="POST">

完全没有意义,除非只是为了测试目的,但仍然没有意义。

你应该有一个容器

 类似资料:
  • 问题内容: 听起来可能有些奇怪,但我正处于完成将向用户付费的应用程序的最后阶段。 当用户使用该应用程序时,该应用程序中存在一项活动,金钱不断累积。我在该活动中有一个名为Cash Out的按钮,当用户达到一定金额时,可以单击该按钮,并应该让用户收取从应用程序中累积的资金。 到目前为止,我已经联系了Google Checkout和Paypal,Paypal建议可以将个人付款集成到我的案例中,并向我发送

  • 我在使用Lombok在IntelliJ中构建我的项目时遇到了麻烦。Lombok似乎可以正常工作,直到我去构建工件,在任何使用Lombok getter的地方都会出现这个错误。 但是,此处显示的代码没有错误: 我启用了注释处理,而lombok是一个依赖项。我似乎不明白为什么会这样,

  • 是否可以使用新的paypal结账(请参阅:https://developer.paypal.com/docs/checkout/)使用自定义付款按钮(不带智能付款按钮),如以下实现屏幕截图所示? 有人可以告诉我一些指南或代码,如何做新的贝宝结账没有智能支付按钮? 原因:我们不想用paypal按钮破坏我们的设计,但我们想为用户提供相同的按钮,用于他选择的任何付款方式。

  • 在我的网页上,我试图使用JavaScript按照手册实现PayPal结账:https://developer.paypal.com/docs/checkout/ 一切都与标准选项配合得很好。例如,这工作就好: 但当我试图更具体地了解订单细节时,它会给我一个错误: 这是我的代码: 有人知道问题出在哪里吗?PayPal留档不是很翔实...

  • null 如何在transform()步骤中添加Jaxb2Marshaller?

  • 我有一个框架,它是用来创建的核心Java+TestNG。然后是TDD模型,POM是我们的构建管理工具。有人能告诉我是否有可能使用Cucumber将框架从TDD更新到BDD。但是我仍然希望对此需求做最小的更改,比如不更改任何现有的技术(核心语言、TestNG、Maven Sys.)。我的目标是如何在Eclipse中使用testng.xml/testng插件运行cucumber TC。在Jenkin