无法使用实时模型srmklive-paypal

时间:2020-09-30 00:44:00

标签: php laravel paypal-rest-sdk

我正在使用srmk / paypal软件包1.0。

在沙箱模式下使用这个很棒的软件包几个月以来,我一直在努力使用实时模式。

我到处都是别人和其他地方都无法解决的问题。

如果我删除沙盒凭据,则在dd($response)的{​​{1}}之后立即出现无限循环

我使用的是1.0,所以ExpressCheckout应该不是问题

我已经在实时服务器上测试了相同的结果。

我的配置

$response = $provider->setExpressCheckout($checkoutData);

env和env.example

return [
    'mode'    => 'live', // Can only be 'sandbox' Or 'live'. If empty or invalid, 'live' will be used.
    'sandbox' => [
        'username'    => env('PAYPAL_SANDBOX_API_USERNAME', ''),
        'password'    => env('PAYPAL_SANDBOX_API_PASSWORD', ''),
        'secret'      => env('PAYPAL_SANDBOX_API_SECRET', ''),
        'certificate' => env('PAYPAL_SANDBOX_API_CERTIFICATE', ''),
        'app_id'      => 'APP-80W284485P519543T', // Used for testing Adaptive Payments API in sandbox mode
    ],
    'live' => [
        'username'    => env('PAYPAL_LIVE_API_USERNAME', ''),
        'password'    => env('PAYPAL_LIVE_API_PASSWORD', ''),
        'secret'      => env('PAYPAL_LIVE_API_SECRET', ''),
        'certificate' => env('PAYPAL_LIVE_API_CERTIFICATE', ''),
        'app_id'      => '', // Used for Adaptive Payments API
    ],

    'payment_action' => 'Sale', // Can only be 'Sale', 'Authorization' or 'Order'
    'currency'       => env('PAYPAL_CURRENCY', 'MXN'),
    'billing_type'   => 'MerchantInitiatedBilling',
    'notify_url'     => '', // Change this accordingly for your application.
    'locale'         => env('PAYPAL_LOCALE', 'es_ES'), // force gateway language  i.e. it_IT, es_ES, en_US ... (for express checkout only)
    'validate_ssl'   => false, // Validate SSL when creating api client.
];

我使用PayPal提供的新API凭据

#PayPal Setting & API Credentials - sandbox
PAYPAL_SANDBOX_API_USERNAME=sb-tr4z02598960_api1.business.example.com
PAYPAL_SANDBOX_API_PASSWORD=VSYUE32AU7MT7VY4
PAYPAL_SANDBOX_API_SECRET=ACdNh.ieqXXfGzIFBkj6F-fUdA49AIBmvpyOyz5MhLCsLyQVdcB74zVJ
PAYPAL_SANDBOX_API_CERTIFICATE=

#PayPal Setting & API Credentials - live
PAYPAL_LIVE_API_USERNAME=********************api1.gmail.com
PAYPAL_LIVE_API_PASSWORD=**********************K9W
PAYPAL_LIVE_API_SECRET=******************************FCBABE
PAYPAL_LIVE_API_CERTIFICATE= storage_path('cert_key_pem.txt'); // also tested empty

从包中调用此函数时会弹出无限循环

public function  getExpressCheckout ($orderId) {

$checkoutData = $this->checkoutData($orderId); 
$provider = new ExpressCheckout();
$response = $provider->setExpressCheckout($checkoutData);

dd($response);

return redirect($response['paypal_link']);

}

private function checkoutData($orderId)
{
$cart = \Cart::getContent();
$cart2 = \Cart::getTotal();

$cartItems = array_map( function($item){
    return [
        'name' => $item['name'],
        'price' => $item['price'],
        'qty' => $item['quantity']
    ];
}, $cart->toarray());


$checkoutData = [
    'items' => $cartItems,
    'return_url' => route('paypal.success', $orderId),
    'cancel_url' => route('paypal.cancel'),
    'invoice_id' => uniqid(),
    'invoice_description' => 'order description',
    'total' => $cart2
];

return $checkoutData;
}

public function getExpressCheckoutSuccess(Request $request, $orderId)
{
$token = $request->get('token');
$payerId = $request->get('PayerID');
$provider = new ExpressCheckout();
$checkoutData = $this->checkoutData($orderId);

$response = $provider->getExpressCheckoutDetails($token);

if (in_array(strtoupper($response['ACK']),['SUCCESS','SUCCESSWITHWARNING'])) {

    $payment_status = $provider->doExpressCheckoutPayment($checkoutData,$token,$payerId);
    $status = $payment_status['PAYMENTINFO_0_PAYMENTSTATUS'];

    if (in_array($status, ['Completed','Processed'])) {
        $order = Order::find($orderId);
        $order->is_paid = 1;
        $order->save();

        Mail::to($order->buyer_email)->send(new OrderMail($order));

        \Cart::clear();

        return view ('newOrder.success', compact('order'));
    }

谢谢,

0 个答案:

没有答案
相关问题