沙盒贝宝结账(PHP、Laravel)

沙盒贝宝结账(PHP、Laravel),php,laravel,paypal,Php,Laravel,Paypal,我正在尝试将Paypal的签出功能实现到我的Laravel Api(连接到一个Ionic应用程序),当我在应用程序中按下按钮进行签出时,它会在登录屏幕中转到Paypal(目前为止还不错)。我觉得这很奇怪,因为它不允许我用我的沙盒帐户甚至我的真实帐户登录,错误是一样的:“你的一些信息不正确。请再试一次。”通过打开开发人员工具,这些就是我得到的错误(见屏幕截图)。我真的找不到我在哪里犯了错误。也许你能帮我。下面是屏幕截图和代码,让您可以将结帐带到Paypal。让我知道,如果我应该添加任何额外的信息在

我正在尝试将Paypal的签出功能实现到我的Laravel Api(连接到一个Ionic应用程序),当我在应用程序中按下按钮进行签出时,它会在登录屏幕中转到Paypal(目前为止还不错)。我觉得这很奇怪,因为它不允许我用我的沙盒帐户甚至我的真实帐户登录,错误是一样的:“你的一些信息不正确。请再试一次。”通过打开开发人员工具,这些就是我得到的错误(见屏幕截图)。我真的找不到我在哪里犯了错误。也许你能帮我。下面是屏幕截图和代码,让您可以将结帐带到Paypal。让我知道,如果我应该添加任何额外的信息在这里!非常感谢

错误1:, 正在调查其中一个控制台错误:

Route::middleware('auth:api')->post('/paypal', function (Request $request) {
    $user = $request->user();
    $data = $request->all();
    $list_products_id = $data;

    $products = [];
    $total = 0;

    $titles = '';

    foreach($list_products_id as $key => $value) {
        $product = Product::find($value);
        if($product){
            $products[$key] = $product;
            $total += $product->price;
            $titles .= $product->title." ";
        } 
    }

    if($total){

        $paypal = config('app.paypal', "sandbox");

       if($paypal == "sandbox"){
            $userProvider = 'In my app I have the sandbox business credentials here';
            $pwdProvider = 'In my app I have the sandbox business credentials here';
            $signProvider = 'In my app I have the sandbox business credentials here';
            $url = 'https://api-3t.sandbox.paypal.com/nvp';
            $url2 = 'https://www.sandbox.paypal.com/cgi-bin/webscr?%s';

       } else {
            $userProvider = '';
            $pwdProvider = '';
            $signProvider = '';   
            $url = 'https://api-3t.paypal.com/nvp';
            $url2 = 'https://www.paypal.com/cgi-bin/webscr?%s';
       }

       $data = [];
       $data['USER'] = $userProvider;
       $data['PWD'] = $pwdProvider;
       $data['SIGNATURE'] = $signProvider;
       $data['METHOD'] = 'SetExpressCheckout';
       $data['VERSION'] = '108';
       $data['LOCALECODE'] = 'en_US';

       $data['L_PAYMENTREQUEST_0_NAME0'] = "Products Orders";
       $data['L_PAYMENTREQUEST_0_DESC0'] = $titles;

       $data['PAYMENTREQUEST_0_AMT'] = number_format($total, 2).'';

       $data['PAYMENTREQUEST_0_CURRENCYCODE'] = 'EUR';
       $data['PAYMENTREQUEST_0_PAYMENTACTION'] = 'Sale';

       $data['L_PAYMENTREQUEST_0_QTY0'] = '1'; //number of the same product the user is ordering
       $data['L_PAYMENTREQUEST_0_AMT0'] = number_format($total, 2).'';

       $data['L_BILLINGAGREEMENTDESCRIPTION0'] = $titles;

       $data['CANCELURL'] = url('/');
       $data['RETURNURL'] = url('/');

      // curl

      $data = http_build_query($data);

      $curl = curl_init();
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
      curl_setopt($curl, CURLOPT_POST, true);
      curl_setopt($curl, CURLOPT_URL, $url);
      curl_setopt($curl, CURLOPT_POSTFIELDS, $data);

      $response =  curl_exec($curl);
      curl_close($curl);

      $nvp = array();

      if (preg_match_all('/(?<name>[^\=]+)\=(?<value>[^&]+)&?/', $response, $matches)) {
          foreach ($matches['name'] as $offset => $name) {
              $nvp[$name] = urldecode($matches['value'][$offset]);
          }
      }

      if(isset($nvp['ACK']) && $nvp['ACK'] == "Success" ){
        $query = array(
                'cmd'    => '_express-checkout',
                'token'  => $nvp['TOKEN']
            );

            $redirectURL = sprintf($url2, http_build_query($query));

            return ['date'=>$redirectURL];
      }else{
        return ['status'=>'error purchasing! - 1'];

      }

    }

    echo "total: " . $total;
    return ['status'=>'error purchasing! - 2'];
});
Route::middleware('auth:api')->post('/paypal',函数(Request$Request){
$user=$request->user();
$data=$request->all();
$list\u products\u id=$data;
$products=[];
$total=0;
$titles='';
foreach($key=>$value列出产品\u id){
$product=产品::查找($value);
如果($产品){
$products[$key]=$product;
$total+=$product->price;
$titles.=$product->title.“;
} 
}
如果有的话($总数){
$paypal=config('app.paypal',“sandbox”);
如果($paypal==“沙盒”){
$userProvider='在我的应用程序中,我在这里拥有沙盒业务凭据';
$pwdProvider='在我的应用程序中,我在这里拥有沙盒业务凭据';
$signProvider='在我的应用程序中,我在此处拥有沙盒业务凭据';
$url='1https://api-3t.sandbox.paypal.com/nvp';
$url2=https://www.sandbox.paypal.com/cgi-bin/webscr?%s';
}否则{
$userProvider='';
$pwdProvider='';
$signProvider='';
$url='1https://api-3t.paypal.com/nvp';
$url2=https://www.paypal.com/cgi-bin/webscr?%s';
}
$data=[];
$data['USER']=$userProvider;
$data['PWD']=$pwdProvider;
$data['SIGNATURE']=$signProvider;
$data['METHOD']='SetExpressCheckout';
$data['VERSION']='108';
$data['LOCALECODE']='en_US';
$data['L_PAYMENTREQUEST_0_NAME0']=“产品订单”;
$data['L_PAYMENTREQUEST_0_DESC0']=$titles;
$data['PAYMENTREQUEST\u 0\u AMT']=数字格式($total,2)。”;
$data['PAYMENTREQUEST_0_CURRENCYCODE']=“欧元”;
$data['PAYMENTREQUEST\u 0\u PAYMENTACTION']=“销售”;
$data['L_PAYMENTREQUEST_0_QTY0']=“1”;//用户订购的同一产品的数量
$data['L_PAYMENTREQUEST_0_AMT0']=数字格式($total,2)。”;
$data['L_BILLINGAGREEMENTDESCRIPTION0']=$titles;
$data['CANCELURL']=url('/');
$data['RETURNURL']=url('/');
//卷曲
$data=http\u build\u query($data);
$curl=curl_init();
curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($curl,CURLOPT_POST,true);
curl_setopt($curl,CURLOPT_URL,$URL);
curl_setopt($curl,CURLOPT_POSTFIELDS,$data);
$response=curl\u exec($curl);
curl_close($curl);
$nvp=array();
if(preg_match_all('/(?[^\=]+)\=(?[^&]+)&?/',$response,$matches)){
foreach($offset=>$name时匹配['name']{
$nvp[$name]=urldecode($matches['value'][$offset]);
}
}
如果(isset($nvp['ACK'])和&$nvp['ACK']=“成功”){
$query=array(
'cmd'=>'_express-checkout',
“令牌”=>$nvp[“令牌”]
);
$redirectURL=sprintf($url2,http_build_query($query));
返回['date'=>$redirectURL];
}否则{
返回['status'=>'error purchasing!-1'];
}
}
echo“总计:”.$total;
返回['status'=>'error purchasing!-2'];
});

所以我在我的沙盒帐户上重置了密码,它成功了