Авторизовать & amp; обработать платеж через 1 день после истечения срока действия токена в течение 3 часов

Я использую классический API PayPal для авторизации и обработки платежа с помощью Express Checkout (https://developer.paypal.com/docs/classic/express-checkout/ht_ec-singleAuthPayment-curl-etc/).

Хотя авторизация действительна в течение трех дней согласно документации, срок действия токена истекает в течение трех часов.

Итак, как я могу перехватить транзакцию после истечения срока действия токена?

PS.
Я знаю, что это дубликат Как я могу получить платеж через 1 день после его авторизации, если срок действия токена PayPal истекает через 3 часа? но, как и опрашивающий пользователь, «DoExpressCheckoutPayment» может быть выполнен после трехчасового периода.

0

Решение

И автор упомянутого вопроса, и вы делаете одну и ту же ошибку в понимании концепций PayPal.

Токен и авторизация — это не одно и то же. Токен — это механизм для подключения пользовательского соглашения к предстоящей финансовой транзакции; думать об этом как о расширении или части веб-сессии. Маркер описывает внутрипроцессное действие и может использоваться для генерации финансовой транзакции, но НЕ является финансовой транзакцией.

Авторизация — это один тип финансовой транзакции, который может быть сгенерирован из этого токена / сеанса. Разрешение резервирует средства от покупателя, таким образом давая продавцу / получателю гарантию, что средства будут доступны от покупателя в течение определенного периода времени. Это фактически не перемещает фонды; это происходит только тогда, когда (если) выполняется вторая финансовая транзакция со ссылкой на авторизацию: «захват». Короче, авторизация & захват разделить «продажу» на две части: один, который обеспечивает транзакцию Можно происходят, и второй, который на самом деле делает это возможным.

Вы должны выполнить DoExpressCheckout с пометкой «авторизация», как только пользователь вернется (ну, возможно, после еще одной или двух страниц на вашем сайте … но не спустя несколько дней). Затем вы выбрасываете токен EC и просто сохраняете авторизацию #. Единственное действие, которое вы должны выполнить через несколько дней, — это захват, для которого требуется только # авторизация.

Я предполагаю, что выполнение заказа клиента каким-либо образом, цифровым или физическим, является причиной задержки до того, как вы его захватите.

Если вы хотите избежать удержания средств на счете клиента и готовы принять на себя некоторый риск того, что средства не будут присутствовать при захвате, вы также можете использовать оплату «заказ», чтобы сделать то, что не обязательная авторизация во время взаимодействия с покупателем.

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

0

Другие решения

решил (вроде) благодаря @geewiz.

1) Я делаю параллельный платеж с «paymentaction = order» в два магазина.

2) После того, как пользователь принимает параллельный платеж, я получаю токен, с помощью которого я делаю DoExpressCheckoutPayment в оба магазина PayPal. оплата остается заказом.

3) Затем я получаю ссылку, с помощью которой я делаю DoCapture, которая высвобождает деньги и переводит их на мой счет.

ВТОРОЙ ВОПРОС —

как второй владелец магазина (так как у меня есть параллельный платеж) может получить свою долю оплаты?

Вызов той же функции с его идентификатором транзакцииУ вас нет прав для выполнения этого вызова APImsgstr «ошибка, так как подпись скрипта php принадлежит моему магазину.

0

решено путем:

1) Установить ExpressCheckout на свой аккаунт (действие оплаты == заказ)

$request_params = array(

'RETURNURL' => $obj['SUCCESSURL'],
'CANCELURL' => $obj['CANCELURL'],
'NOSHIPPING' => '1',
'BRANDNAME' => $obj['BRANDNAME'],

'PAYMENTREQUEST_0_CURRENCYCODE' => $obj['CURRENCY'],
'PAYMENTREQUEST_0_DESC' => $obj['ITEMDESCRIPTION'],
'PAYMENTREQUEST_0_PAYMENTACTION' => 'Order',
'PAYMENTREQUEST_0_AMT' => $obj['AMOUNTTOTAL'],
'PAYMENTREQUEST_0_SELLERPAYPALACCOUNTID' => $obj['RECEIVER1'],
'PAYMENTREQUEST_0_PAYMENTREQUESTID' => $obj['REQUESTID1']

);

$response = $obj['PAYPAL']->request('SetExpressCheckout', $request_params);

2) DoExpressCheckout

$request_params = array(
'TOKEN' => $obj['TOKEN'],
//  'PAYMENTACTION' => 'Authorization',
'PAYERID' => $obj['PAYERID'],

'PAYMENTREQUEST_0_PAYMENTACTION' => 'Order',
'PAYMENTREQUEST_0_AMT' => $obj['AMOUNTTOTAL'],
'PAYMENTREQUEST_0_SELLERPAYPALACCOUNTID' => $obj['RECEIVER1'],
'PAYMENTREQUEST_0_PAYMENTREQUESTID' => $obj['REQUESTID1'],
'PAYMENTREQUEST_0_CURRENCYCODE' => $obj['CURRENCY']
);

$response = $obj['PAYPAL']->request('DoExpressCheckoutPayment', $request_params);
echo '<b>02. DO TRANSACTION</b><br />';
echo '<pre>';
print_r($response);
echo '</pre>';

3) DoCapture в течение 24 часов на свой счет

echo '<a href="pay_app.php?tid=' . $response['PAYMENTINFO_0_TRANSACTIONID'] . '&amt='. $response['PAYMENTINFO_0_AMT'] . '">CAPTURE AS APP</a><br/>';

4) в случае успеха DoCapture сделайте MassPayment на второй аккаунт

$request_params = array(

'L_EMAIL0' => $obj['RECEIVERHOST'],
'L_AMT0' => $obj['AMT'],
'L_NOTE0' => "transaction complete",
'CURRENCYCODE' => $obj['CURRENCY']
);

$response = $obj['PAYPAL']->request('MassPay', $request_params);

echo '<b> MASSPAY</b><br />';
echo '<pre>';
print_r($response);
echo '<br/>';
print_r($obj);
echo '</pre>';
echo '<br/>';
0
По вопросам рекламы [email protected]