尝试使用 POST 方法访问我的路由,但服务器尝试使用 GET

发布于 2025-01-16 13:12:08 字数 6277 浏览 2 评论 0原文

我正在尝试在我的项目中实现 Paypal 智能按钮,并且在我的本地计算机上它工作得很好。现在我尝试将它部署在heroku上进行更多测试,当我尝试付款时,我收到以下错误

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://www.sandbox.paypal.com/xoplatform/logger/api/logger. (Reason: CORS request did not succeed). Status code: (null).

&&

The GET method is not supported for this route. Supported methods: POST.

我正在使用POST API路由,并且在Javascript中我将POST声明为方法,并且出于某种原因它总是尝试使用得到。

Checkout.blade.php(Javascript 部分):

                    createOrder: function(data, actions) {
                        return fetch('api/paypal/order/create/', {
                            method: 'post',
                            body: JSON.stringify({
                                "content" : {!! json_encode($cartContent, JSON_HEX_TAG) !!},
                                "value" : "{{ Cart::subtotal() }}",
                                "company" : document.getElementById('company').value,
                                "firstName" : document.getElementById('firstName').value,
                                "lastName" : document.getElementById('lastName').value,
                                "email" : document.getElementById('email').value,
                                "street" : document.getElementById('street').value,
                                "housenumber" : document.getElementById('housenumber').value,
                                "city" : document.getElementById('city').value,
                                "postcode" : document.getElementById('postcode').value,
                            })
                        }).then(function(res) {
                            return res.json();
                        }).then(function(orderData) {
                            return orderData.id;
                        });
                    },

PayPalController.php

<?php

namespace App\Http\Controllers;

use Cart;
use App\Models\Order;
use App\Models\OrderItem;
use App\Models\Transaction;
use Illuminate\Http\Request;
use Srmklive\PayPal\Service\Paypal;

class PayPalController extends Controller
{

    public function create(Request $request)
    {
        $data = json_decode($request->getContent(), true);
        // Init PayPal
        $provider = \PayPal::setProvider();
        $provider->setApiCredentials(config('paypal'));
        $token = $provider->getAccessToken();
        $provider->setAccessToken($token);

        $price = $data['value'];
        $description = 'Einkauf bei Isipack24.de';

        $order = $provider->createOrder([
            "intent" => "CAPTURE",
            "payer" => [
                "name" => [
                    "given_name" => $data['firstName'],
                    "surname" => $data['lastName']
                ],

                "address" => [
                    "address_line_1" => $data['street'] . " " . $data['housenumber'],
                    "admin_area_2" => $data['city'],
                    "admin_area_1" => 'NRW',
                    "postal_code" => $data['postcode'],
                    "country_code" => "DE"
                ],

                "email_address" => $data['email']
            ],
            "purchase_units" => [
                [
                    "amount" => [
                        "currency_code" => "EUR",
                        "value" => $price
                    ],
                    "description" => $description
                ]
            ]
        ]);

        $newOrder = Order::create([
            'Firma' => $data['company'],
            'Vorname' => $data['firstName'],
            'Nachname' => $data['lastName'],
            'Email' => $data['email'],
            'Straße' => $data['street'],
            'Hausnummer' => $data['housenumber'],
            'Postleitzahl' => $data['postcode'],
            'Ort' => $data['city'],
        ]);
        foreach($data['content'] as $item){
            OrderItem::create([
                'product_id' => $item['id'],
                'order_id' => $newOrder->id,
                'price' => $item['price'],
                'quantity' => $item['qty'],
                'total' => $item['price']*$item['qty'],
            ]);
        }

        Transaction::create([
            'order_id' => $newOrder->id,
            'status' => $order['status'],
            'reference_number' => $order['id']
        ]);

        return response()->json($order);
    }

    public function capture(Request $request)
    {
        $data = json_decode($request->getContent(), true);
        $orderID = $data['orderID'];

        // Init PayPal
        $provider = \PayPal::setProvider();
        $provider->setApiCredentials(config('paypal'));
        $token = $provider->getAccessToken();
        $provider->setAccessToken($token);

        $result = $provider->capturePaymentOrder($orderID);

        // Update Database
        if ($result['status'] == "COMPLETED") {
            Transaction::where('reference_number', $result['id'])
                        ->update(['status' => 'COMPLETED', 'updated_at' => \Carbon\Carbon::now()]);
        }

        return response()->json($result);
    }
}

api.php(路线):

<?php

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\PayPalController;

/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/

Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
    return $request->user();
});

Route::prefix('paypal')->group(function () {
    Route::post('/order/create', [PayPalController::class, 'create']);
    Route::post('/order/capture', [PayPalController::class, 'capture']);
});

我尝试了很多,但我无法理解它。

I am trying to implement Paypal Smart Buttons in my project and on my local machine its working great. Now i tried to deploy it on heroku for some more tests and when I try to make a payment I get following error

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://www.sandbox.paypal.com/xoplatform/logger/api/logger. (Reason: CORS request did not succeed). Status code: (null).

&&

The GET method is not supported for this route. Supported methods: POST.

I am using a POST API route and in the Javascript I declared POST as the method and for some reason it always tries to use GET.

Checkout.blade.php (Javascript section):

                    createOrder: function(data, actions) {
                        return fetch('api/paypal/order/create/', {
                            method: 'post',
                            body: JSON.stringify({
                                "content" : {!! json_encode($cartContent, JSON_HEX_TAG) !!},
                                "value" : "{{ Cart::subtotal() }}",
                                "company" : document.getElementById('company').value,
                                "firstName" : document.getElementById('firstName').value,
                                "lastName" : document.getElementById('lastName').value,
                                "email" : document.getElementById('email').value,
                                "street" : document.getElementById('street').value,
                                "housenumber" : document.getElementById('housenumber').value,
                                "city" : document.getElementById('city').value,
                                "postcode" : document.getElementById('postcode').value,
                            })
                        }).then(function(res) {
                            return res.json();
                        }).then(function(orderData) {
                            return orderData.id;
                        });
                    },

PayPalController.php

<?php

namespace App\Http\Controllers;

use Cart;
use App\Models\Order;
use App\Models\OrderItem;
use App\Models\Transaction;
use Illuminate\Http\Request;
use Srmklive\PayPal\Service\Paypal;

class PayPalController extends Controller
{

    public function create(Request $request)
    {
        $data = json_decode($request->getContent(), true);
        // Init PayPal
        $provider = \PayPal::setProvider();
        $provider->setApiCredentials(config('paypal'));
        $token = $provider->getAccessToken();
        $provider->setAccessToken($token);

        $price = $data['value'];
        $description = 'Einkauf bei Isipack24.de';

        $order = $provider->createOrder([
            "intent" => "CAPTURE",
            "payer" => [
                "name" => [
                    "given_name" => $data['firstName'],
                    "surname" => $data['lastName']
                ],

                "address" => [
                    "address_line_1" => $data['street'] . " " . $data['housenumber'],
                    "admin_area_2" => $data['city'],
                    "admin_area_1" => 'NRW',
                    "postal_code" => $data['postcode'],
                    "country_code" => "DE"
                ],

                "email_address" => $data['email']
            ],
            "purchase_units" => [
                [
                    "amount" => [
                        "currency_code" => "EUR",
                        "value" => $price
                    ],
                    "description" => $description
                ]
            ]
        ]);

        $newOrder = Order::create([
            'Firma' => $data['company'],
            'Vorname' => $data['firstName'],
            'Nachname' => $data['lastName'],
            'Email' => $data['email'],
            'Straße' => $data['street'],
            'Hausnummer' => $data['housenumber'],
            'Postleitzahl' => $data['postcode'],
            'Ort' => $data['city'],
        ]);
        foreach($data['content'] as $item){
            OrderItem::create([
                'product_id' => $item['id'],
                'order_id' => $newOrder->id,
                'price' => $item['price'],
                'quantity' => $item['qty'],
                'total' => $item['price']*$item['qty'],
            ]);
        }

        Transaction::create([
            'order_id' => $newOrder->id,
            'status' => $order['status'],
            'reference_number' => $order['id']
        ]);

        return response()->json($order);
    }

    public function capture(Request $request)
    {
        $data = json_decode($request->getContent(), true);
        $orderID = $data['orderID'];

        // Init PayPal
        $provider = \PayPal::setProvider();
        $provider->setApiCredentials(config('paypal'));
        $token = $provider->getAccessToken();
        $provider->setAccessToken($token);

        $result = $provider->capturePaymentOrder($orderID);

        // Update Database
        if ($result['status'] == "COMPLETED") {
            Transaction::where('reference_number', $result['id'])
                        ->update(['status' => 'COMPLETED', 'updated_at' => \Carbon\Carbon::now()]);
        }

        return response()->json($result);
    }
}

api.php (routes):

<?php

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\PayPalController;

/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/

Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
    return $request->user();
});

Route::prefix('paypal')->group(function () {
    Route::post('/order/create', [PayPalController::class, 'create']);
    Route::post('/order/capture', [PayPalController::class, 'capture']);
});

I tried a ton but i cant get my head around it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

风透绣罗衣 2025-01-23 13:12:08

https://www.sandbox.paypal.com/xoplatform/logger /api/记录器

忽略与此相关的所有内容。这并不重要。

如果您收到另一条真正重要的路由的错误,则需要显示该另一条非日志记录路由实际发生的情况。使用浏览器的网络选项卡。

如果您无法自己诊断此问题,也许您还应该链接到某个地方的实现。

https://www.sandbox.paypal.com/xoplatform/logger/api/logger

Ignore everything to do with this. It is not important.

If you are getting an error for another route that actually matters, you need to show what's actually happening with that other, non-logging route. Use your browser's Network tab.

Perhaps you should also link to your implementation somewhere, if you aren't able to diagnose this issue yourself.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文