来自贝宝的 Laravel 5.1 csrftoken curl

Posted

技术标签:

【中文标题】来自贝宝的 Laravel 5.1 csrftoken curl【英文标题】:Laravel 5.1 csrftoken curl from paypal 【发布时间】:2015-12-22 03:10:21 【问题描述】:

当贝宝在我的网站上发送帖子时,我如何添加或使用 csrftoken。 我的错误代码: VerifyCsrfToken.php 第 53 行中的 TokenMismatchException。

这里代码:

    public function getPaypal(Request $request)
   

    $uri = $request->all();

    if(isset($uri['tx']))
    

      $pp_hostname = "www.sandbox.paypal.com"; // Change to www.sandbox.paypal.com to test against sandbox
      // read the post from PayPal system and add 'cmd'
      $req = 'cmd=_notify-synch';

      $tx_token = $uri['tx'];
      $auth_token = "EHNebv....e";
      $req .= "&tx=$tx_token&at=$auth_token";

      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, "https://$pp_hostname/cgi-bin/webscr");
      curl_setopt($ch, CURLOPT_POST, 1);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
      curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
      //set cacert.pem verisign certificate path in curl using 'CURLOPT_CAINFO' field here,
      //if your server does not bundled with default verisign certificates.
      curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
      curl_setopt($ch, CURLOPT_HTTPHEADER, array("Host: $pp_hostname"));
      $res = curl_exec($ch);
      curl_close($ch);

   

【问题讨论】:

【参考方案1】:

根据 Laravel 文档:http://laravel.com/docs/5.1/routing#csrf-protection。

从 CSRF 保护中排除 URI

有时您可能希望从 CSRF 保护中排除一组 URI。 例如,如果您使用 Stripe 处理付款并且 使用他们的 webhook 系统,您需要排除您的 webhook 来自 Laravel 的 CSRF 保护的处理程序路由。

您可以通过将 URI 添加到 VerifyCsrfToken 中间件:

<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;

class VerifyCsrfToken extends BaseVerifier

    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        'paypal/*',
    ];

如果还不清楚,请告诉我。

【讨论】:

【参考方案2】:

您不需要完全禁用中间件,只需转到 app\Http\Middle 中的 VerifyCrsfToken 文件,然后编辑受保护的数组 $except 并包含和输入 paypal 发布到的路由。

protected $except = [
    /paypal/data,


];

【讨论】:

【参考方案3】:

TokenMismatchException 是 Laravel 错误,而不是 PayPal。对于每个 POST 请求,您需要通过它发送一个 _token 值。

如果您通过表单发送,只需在表单模板中回显csrf_field()

如果你从 Laravel 以外的其他地方发送请求,你可以禁用该路由上的 CSRF 保护。在此处阅读有关中间件的更多信息:http://laravel.com/docs/5.1/middleware

在此处了解更多信息:http://laravel.com/docs/5.1/routing#csrf-protection

【讨论】:

以上是关于来自贝宝的 Laravel 5.1 csrftoken curl的主要内容,如果未能解决你的问题,请参考以下文章

使用来自贝宝的帖子数组

处理完某件商品的付款后,您能否收到来自贝宝的数据/代码?

贝宝定期付款重定向到贝宝的主页

WHMCS - 如何获取到贝宝的付款链接

返回关于成功付款贝宝的客户信息

如何获取贝宝的实时 api 凭据?