Я пытаюсь сделать то же самое.
Позвольте мне начать с того, что я пытался заставить полный контроль работать в течение 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
), и по какой-то причине не получает идентификатор транзакции.
Идентификатор транзакции очень важен длявозможность дальнейшей обработки платежа на бэкэнде.