【发布时间】:2019-11-12 19:18:41
【问题描述】:
我目前正在使用贝宝和https://github.com/srmklive/laravel-paypal 进行贝宝结账。我正在使用快速结帐,我对其进行了一些修改以适应我的项目的要求。在测试期间,它在几次尝试中工作,paypal show 和 payment 正确执行,但是当我尝试运行完全相同的代码时。我收到此错误,我不知道它是什么意思。
我尝试检查我的路线是否所有错误都发生在我的路线上,但所有错误都正常工作。我还尝试了像 dd("check") 一样转储和死,只是为了检查它是否真的进入我的控制器并且确实如此。我在“payCommission”方法中做到了这一点(我认为错误发生的地方)
这是我的控制器路线
api.php
Route::get('service/commissionfee/payment' , 'api\service\ExpressPaymentController@payCommission');
Route::get('paypal/ec-checkout-success', 'api\service\ExpressPaymentController@payCommissionSuccess');
ExpressPaymentController.php
<?php
namespace App\Http\Controllers\api\service;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Srmklive\PayPal\Services\ExpressCheckout;
class ExpressPaymentController extends Controller
{
protected $provider;
public function __construct()
{
try {
$this->provider = new ExpressCheckout();
}
catch(\Exception $e){
dd($e);
}
}
public function payCommission(Request $request)
{
$recurring = false;
$cart = $this->getCheckoutData($recurring);
try {
$response = $this->provider->setExpressCheckout($cart, $recurring);
return redirect($response['paypal_link']);
} catch (\Exception $e) {
dd($e);
return response()->json(['code' => 'danger', 'message' => "Error processing PayPal payment"]);
}
}
public function payCommissionSuccess(Request $request)
{
$recurring = false;
$token = $request->get('token');
$PayerID = $request->get('PayerID');
$cart = $this->getCheckoutData($recurring);
// ? Verify Express Checkout Token
$response = $this->provider->getExpressCheckoutDetails($token);
if (in_array(strtoupper($response['ACK']), ['SUCCESS', 'SUCCESSWITHWARNING'])) {
if ($recurring === true) {
$response = $this->provider->createMonthlySubscription($response['TOKEN'], 9.99, $cart['subscription_desc']);
if (!empty($response['PROFILESTATUS']) && in_array($response['PROFILESTATUS'], ['ActiveProfile', 'PendingProfile'])) {
$status = 'Processed';
} else {
$status = 'Invalid';
}
} else {
// ? Perform transaction on PayPal
$payment_status = $this->provider->doExpressCheckoutPayment($cart, $token, $PayerID);
$status = $payment_status['PAYMENTINFO_0_PAYMENTSTATUS'];
}
return response()->json(['success' => "payment complete"]);
}
}
private function getCheckoutData($recurring = false)
{
$data = [];
$order_id = 1;
$data['items'] = [
[
'name' => 'Product 1',
'price' => 9.99,
'qty' => 1,
],
];
$data['return_url'] = url('api/paypal/ec-checkout-success');
// !
$data['invoice_id'] = config('paypal.invoice_prefix').'_'.$order_id;
$data['invoice_description'] = "Commission Fee payment";
$data['cancel_url'] = url('/');
$total = 0;
foreach ($data['items'] as $item) {
$total += $item['price'] * $item['qty'];
}
$data['total'] = $total;
return $data;
}
}
我遇到的错误
Object of class Illuminate\Routing\Redirector could not be converted to string
提前谢谢你
【问题讨论】:
-
修复错误,这是由于“getCheckoutData()”处的重复发票导致我一次又一次地传递同一张发票
标签: laravel paypal laravel-5.8