проблема с моей оплатой PayPal Express Checkout? - PullRequest
0 голосов
/ 02 августа 2011

я новичок в PayPal Express Checkout, и у меня есть этот код оплаты PayPal

$resArray = CallShortcutExpressCheckout ($paymentAmount, $currencyCodeType, $paymentType, $returnURL, $cancelURL);
$ack = strtoupper($resArray["ACK"]);
if($ack=="SUCCESS" || $ack=="SUCCESSWITHWARNING")
{
    RedirectToPayPal ( $resArray["TOKEN"] );
} 
else  
{
    //Display a user friendly Error on the page using any of the following error information returned by PayPal
    $ErrorCode = urldecode($resArray["L_ERRORCODE0"]);
    $ErrorShortMsg = urldecode($resArray["L_SHORTMESSAGE0"]);
    $ErrorLongMsg = urldecode($resArray["L_LONGMESSAGE0"]);
    $ErrorSeverityCode = urldecode($resArray["L_SEVERITYCODE0"]);

    echo "SetExpressCheckout API call failed. ";
    echo "Detailed Error Message: " . $ErrorLongMsg;
    echo "Short Error Message: " . $ErrorShortMsg;
    echo "Error Code: " . $ErrorCode;
    echo "Error Severity Code: " . $ErrorSeverityCode;
}

и этот код для функции CallShortcutExpressCheckout

function CallShortcutExpressCheckout( $paymentAmount, $currencyCodeType, $paymentType, $returnURL, $cancelURL) 
    {
        //------------------------------------------------------------------------------------------------------------------------------------
        // Construct the parameter string that describes the SetExpressCheckout API call in the shortcut implementation

        $nvpstr="&PAYMENTREQUEST_0_AMT=". $paymentAmount;
        $nvpstr = $nvpstr . "&PAYMENTREQUEST_0_PAYMENTACTION=" . $paymentType;
        $nvpstr = $nvpstr . "&RETURNURL=" . $returnURL;
        $nvpstr = $nvpstr . "&CANCELURL=" . $cancelURL;
        $nvpstr = $nvpstr . "&PAYMENTREQUEST_0_CURRENCYCODE=" . $currencyCodeType;

        $_SESSION["currencyCodeType"] = $currencyCodeType;    
        $_SESSION["PaymentType"] = $paymentType;

        //'--------------------------------------------------------------------------------------------------------------- 
        //' Make the API call to PayPal
        //' If the API call succeded, then redirect the buyer to PayPal to begin to authorize payment.  
        //' If an error occured, show the resulting errors
        //'---------------------------------------------------------------------------------------------------------------
        $resArray=hash_call("SetExpressCheckout", $nvpstr);
        $ack = strtoupper($resArray["ACK"]);
        if($ack=="SUCCESS" || $ack=="SUCCESSWITHWARNING")
        {
            $token = urldecode($resArray["TOKEN"]);
            $_SESSION['TOKEN']=$token;
        }

        return $resArray;
    }

моя проблема в том, что я не знаю, как отправить полную информацию о корзине, такую ​​как название и код товара, и что это то, что мне нужно, потому что у меня нет разделов заказов в моей корзине, я хочу управлять всем по электронной почте так что мне нужно, чтобы отправить описание продукции через заказ, и как только заказ я получаю подтверждение заказа по электронной почте, есть описание товаров

Ответы [ 2 ]

0 голосов
/ 16 ноября 2014

Я пытался перебрать элементы, используя форму отправки.Пример кода PayPal работал только для 1 элемента.Вместо создания функции, подобной функции PeeHaa, я просто проверил, была ли установлена ​​переменная L_PAYMENTREQUEST_0_NAME0, и добавила ли она все переменные в строку $ nvpstr.Затем продолжите, чтобы увидеть, был ли установлен L_PAYMENTREQUEST_0_NAME1, если он был, добавьте его в строку и т. Д. Вот код для всех, кому это нужно:

for($i=0; $i<99999; $i++){
    if(isset($paramsArray["L_PAYMENTREQUEST_0_NAME$i"])){
        $nvpstr = $nvpstr . "&L_PAYMENTREQUEST_0_NAME$i=" . $paramsArray["L_PAYMENTREQUEST_0_NAME$i"];
    }
    if(isset($paramsArray["L_PAYMENTREQUEST_0_NUMBER$i"])){
        $nvpstr = $nvpstr . "&L_PAYMENTREQUEST_0_NUMBER$i=" . $paramsArray["L_PAYMENTREQUEST_0_NUMBER$i"];
    }
    if(isset($paramsArray["L_PAYMENTREQUEST_0_DESC$i"])){
        $nvpstr = $nvpstr . "&L_PAYMENTREQUEST_0_DESC$i=" . $paramsArray["L_PAYMENTREQUEST_0_DESC$i"];
    }
    if(isset($paramsArray["L_PAYMENTREQUEST_0_AMT$i"])){
        $nvpstr = $nvpstr . "&L_PAYMENTREQUEST_0_AMT$i=" . $paramsArray["L_PAYMENTREQUEST_0_AMT$i"];
    }
    if(isset($paramsArray["L_PAYMENTREQUEST_0_QTY$i"])){
        $nvpstr = $nvpstr . "&L_PAYMENTREQUEST_0_QTY$i=" . $paramsArray["L_PAYMENTREQUEST_0_QTY$i"];
    }
    if(!isset($paramsArray["L_PAYMENTREQUEST_0_NAME$i"])){
        break;
    }
}
0 голосов
/ 03 ноября 2011

Я пытаюсь сделать то же самое.

Позвольте мне начать с того, что я пытался заставить полный контроль работать в течение 2 дней, и у меня все еще не получилось:(

Однако, похоже, я на шаг впереди вас.

Хотя я не уверен, что это правильный путь, но я покажу вам, что у меня сейчас есть, а что у меня еще есть.проблема с.

То, что я сделал, было следующим:

Если пользователь нажимает кнопку извлечения, вызывается php-файл (назовем его checkout.php).

Вфайл checkout.php Я создаю array с элементами, которые пользователь хочет заказать.

// fill array with two products
// normally you would loop through all products in the basket to create this array
$items = array('L_PAYMENTREQUEST_0_NAME0'=>'Productname 1',
               'L_PAYMENTREQUEST_0_NUMBER0'=>'Productcode 1',
               'L_PAYMENTREQUEST_0_DESC0'=>'Productdescription 1',
               'L_PAYMENTREQUEST_0_AMT0'=>39.99, // price per unit
               'L_PAYMENTREQUEST_0_QTY0'=>2, // quantity
               'L_PAYMENTREQUEST_0_NAME1'=>'Productname 2',
               'L_PAYMENTREQUEST_0_NUMBER1'=>'Productcode 2',
               'L_PAYMENTREQUEST_0_DESC1'=>'Productdescription 2',
               'L_PAYMENTREQUEST_0_AMT1'=>200.99,
               'L_PAYMENTREQUEST_0_QTY1'=>1,
               );

// set total amount of order in session (this will be used by paypal throughout the payment process)
$_SESSION['Payment_Amount'] = 280.97;

// now normally call CallShortcutExpressCheckout only with the addition of the $items array
$resArray = CallShortcutExpressCheckout ($paymentAmount, $currencyCodeType, $paymentType, $returnURL, $cancelURL, $items);

Теперь для файла с функциями, которые фактически делают запросы к PayPal:

Я создал дополнительную функцию (generate_nvp_string) и изменил функцию CallShortcutExpressCheckout для использования этой строки.

function generate_nvp_string($paymentAmount, $currencyCodeType, $paymentType, $returnURL, $cancelURL, $items = array())
{
    $params = array('PAYMENTREQUEST_0_AMT'=>$paymentAmount,
                    'PAYMENTREQUEST_0_PAYMENTACTION'=>$paymentType,
                    'RETURNURL'=>$returnURL,
                    'CANCELURL'=>$cancelURL,
                    'PAYMENTREQUEST_0_CURRENCYCODE'=>$currencyCodeType,
                    );

    $params = array_merge($params, $items);

    $nvp_string = '';
    foreach($params as $name => $value) {
        $nvp_string.= '&'.$name.'='.$value;
    }

    return $nvp_string;
}

function CallShortcutExpressCheckout($paymentAmount, $currencyCodeType, $paymentType, $returnURL, $cancelURL, $items= array())
{
    $_SESSION['currencyCodeType'] = $this->currency;
    $_SESSION['PaymentType'] = $this->payment_type;

    $result = $this->hash_call('SetExpressCheckout', $this->generate_nvp_string($paymentAmount, $currencyCodeType, $paymentType, $returnURL, $cancelURL, $items));

    $ack = strtoupper($result['ACK']);
    if ($ack == 'SUCCESS' || $ack == 'SUCCESSWITHWARNING') {
        $_SESSION['TOKEN'] = urldecode($result['TOKEN']);
    }

    return $result;
}

Теперь, когда пользователь нажимает кнопку извлечения, строка запроса также будет включать продукты.И когда пользователь будет перенаправлен на проверку PayPal, он будет иметьхороший обзор всех заказанных продуктов.

Я начал этот ответ с:

и с чем у меня все еще есть проблема.

Оформить заказОднако процесс теперь работает, когда пользователь завершает процесс оформления заказа и перенаправляется обратно на мой сайт ($returnURL), и по какой-то причине не получает идентификатор транзакции.

Идентификатор транзакции очень важен длявозможность дальнейшей обработки платежа на бэкэнде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...