Я пытаюсь интегрировать PayPal оплаты на сайте продаж. клиентская часть работает хорошо, клиент платит, а деньги находятся на счете продавца. вторая часть, которая позволяет восстановить такие данные, как номер транзакции, сумма, адрес клиента, не работает. пока я использую скрипты, предоставляемые Paypal.
этот индекс файла. php для оплаты работ
<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false">
<div class="snippet-code">
<pre class="snippet-code-html lang-html prettyprint-override"><code> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Radiofil</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css"
integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M"
crossorigin="anonymous">
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-dark bg-primary mb-1">
<a class="navbar-brand" href="#">Boutique Tubes</a>
</nav>
<div class="container">
<h1>Récapitulatif</h1>
<table class="table table-striped">
<thead>
<tr>
<th>Tube</th>
<th>Qte</th>
<th>Prix</th>
</tr>
</thead>
<tbody>
<?php
$user_id = 8000;
$RefBonCommande= '20000';
include('../config/dbconn.php');
$query = mysqli_query($dbconn,"SELECT * FROM detailcde WHERE user_id='$user_id' AND RefBonCommande='$RefBonCommande'") or die (mysqli_error());
while ($row3 = mysqli_fetch_array($query, MYSQLI_NUM)) {
$count = mysqli_num_rows($query);
$numerotube=$row3[3];
$qty= $row3[4];
$totalp = $row3[5];
echo "<tr>";
echo "<td>".$numerotube."</td>";
echo "<td>".$qty."</td>";
echo "<td>".$totalp.'€'."</td>";
}
$query1 = mysqli_query($dbconn,"SELECT * FROM commandes WHERE Refcde='$RefBonCommande' AND adherent1='$user_id'") or die (mysqli_error());
$row4 = mysqli_fetch_array($query1);
$port=$row4['FraisTransport'];
$total=$row4['Total'];
echo "<tr>";
echo "<td>".'Total + port '."</td>";
echo "<td>".'1 '."</td>";
echo "<td>".$total.'€'."</td>";
echo "<tr>";
echo "<td><b><font size = 5>".'Commande de l\'adherent RFL n° '.$user_id."</b></br></td>";
?>
</tbody>
</table>
<!--<p class="text-right">
<div id="paypal-button"></div>
<!--<a href="payment.php" class="btn btn-success">Acheter</a>-->
</p>
</div><!-- /.container -->
<script
src="https://www.paypal.com/sdk/js?client-id=client-id¤cy=EUR"> // Required. Replace SB_CLIENT_ID with your sandbox client ID.
paypal.Buttons().render('#paypal-button-container');
// This function displays Smart Payment Buttons on your web page.
</script>
<center>
<div id="paypal-button-container"></div>
</center>
<script>
paypal.Buttons({
createOrder: function(data, actions) {
return actions.order.create({
purchase_units: [{
amount: {
value: <?php echo $total ;?> //'5.60'
}
}]
});
},
onApprove: function(data, actions) {
return actions.order.capture().then(function(details) {
alert('Transaction completed by adherent ' + details.payer.name.given_name);
// Call your server to save the transaction
return fetch('/paypal-transaction-complete', {
method: 'post',
headers: {
'content-type': 'application/json'
},
body: JSON.stringify({
orderID: data.orderID,
payerID: data.payerID
})
});
});
}
}).render('#paypal-button-container');
</script>
</body>
</html>
** скрипт ниже не Работа** // 1. Настройте сервер для совершения звонков в PayPal // 1a. Добавьте свой идентификатор клиента и секретный PAYPAL_CLIENT = cliet id '; PAYPAL_SECRET = секретный; // 1б. Укажите свой сервер на PayPal API PAYPAL_OAUTH_API = '
https://api.sandbox.paypal.com/v1/oauth2/token/'; PAYPAL_ORDER_API = '
https://api.sandbox.paypal.com/v2/checkout/orders/'; // 1 c. Получить токен доступа из API PayPal basicAuth = base64encode (`$ {PAYPAL_CLIENT}: $ {PAYPAL_SECRET}`); auth = http.post (PAYPAL_OAUTH_API, {заголовки: {Accept: `application / json`, авторизация:` Basi c $ {basicAuth} `}, данные:` grant_type = client_credentials`}); // 2. Настройка вашего сервера на прием вызова от клиентской функции handleRequest (запрос, ответ), {// 2a. Получить идентификатор заказа из тела запроса orderID = request.body.orderID; // 3. Вызов PayPal для захвата захвата заказа = http.post (PAYPAL_ORDER_API + orderID + '/ capture', {headers: {Accept: `application / json`, авторизация:` Bearer $ {auth.access_token} `}} ); // 4. Сохраняем идентификатор захвата в вашей базе данных if (! Capture.error) {captureID = capture.purchase_units [0] .payments.captures [0] .id; database.saveCaptureID (captureID); } // 5. Обрабатываем любые ошибки из вызова if (capture.error) {console.error (capture.error); return response.send (500); } // 6. Вернуть успешный ответ клиенту response.send (200); } привет, по совету PHPology я настроил URL обратного вызова и, конечно, использовал скрипт PAYPAL. Я пошел в историю сообщений IPN, и у меня есть ошибка HTTP 500. Я думаю, что может быть синтаксическая ошибка в скрипте PAYPAL, они специалисты в этом виде ошибок. $ value) {$ post_string. = $ field. знак равно urlencode (штрихи-черты ($ value)). '&'; } $ post_string. = "cmd = _notify-validate"; // добавляем команду ipn // получаем правильный адрес PayPal для отправки запроса в $ paypal_mode_status = $ ipn_data; // get_option ( 'im_sabdbox_mode'); if ($ paypal_mode_status == true) $ fp = fsockopen ('ssl: // www.sandbox.paypal.com', "443", $ err_num, $ err_str, 60); иначе $ fp = fsockopen ('ssl: // www.sandbox.paypal.com', "443", $ err_num, $ err_str, 60); $ ipn_response = ''; if (! $ fp) {// не удалось открыть соединение. Если loggin включен, сообщение об ошибке // будет в журнале. $ ipn_status = "ошибка fsockopen №. $ err_num: $ err_str"; if ($ ipn_data == true) {echo 'fsockopen fail'; } вернуть ложь; } else {// Отправка данных обратно в paypal fputs ($ fp, "POST $ url_parsed [path] HTTP / 1.1 \ r \ n"); fputs ($ fp, "Хост: $ url_parsed [хост] \ r \ n"); fputs ($ fp, "Content-type: application / x- www-form-urlencoded \ r \ n"); fputs ($ fp, "Content-length:". strlen ($ post_string). "\ r \ n"); fputs ($ fp, "Соединение: закрыть \ r \ n \ r \ n"); fputs ($ fp, $ post_string. "\ r \ n \ r \ n"); // l oop через ответ от сервера и добавление к переменной while (! feof ($ fp)) {$ ipn_response. = fgets ($ fp, 1024); } fclose ($ fp); // закрыть соединение} // Неверная транзакция IPN. Проверьте $ ipn_status и войдите в систему для получения подробной информации. if (! preg_match ("/ VERIFIED / s", $ ipn_response)) {$ ipn_status = 'Ошибка проверки IPN'; if ($ ipn_data == true) {echo 'Ошибка проверки'; print_r ($ _ REQUEST); } вернуть ложь; } else {$ ipn_status = "IPN VERIFIED"; if ($ ipn_data == true) {echo 'SUCCESS'; print_r ($ _ REQUEST); } верните истину; }} function ipn_response () {// mail ("sobhagya1411@gmail.com", "Моя тема", print_r ($ request, true)); $ ipn_data = true; if ($ this-> ipn ($ _ REQUEST)) {$ this-> insert_data ($ _ REQUEST); }} function issetCheck ($ post, $ key) {if (isset ($ post [$ key])) {$ return = $ post [$ key]; } else {$ return = ''; } return $ return; } publi c function insert_data () {$ post = $ _REQUEST; $ item_name = $ this-> issetCheck ($ post, 'item_name'); $ amount = $ this-> issetCheck ($ post, 'mc_gross'); $ currency = $ this-> issetCheck ($ post, 'mc_currency'); $ payer_email = $ this-> issetCheck ($ post, 'payer_email'); $ first_name = $ this-> issetCheck ($ post, 'first_name'); $ last_name = $ this-> issetCheck ($ post, 'last_name'); $ country = $ this-> issetCheck ($ post, Residence_country '); $ txn_id = $ this-> issetCheck ($ post, 'txn_id'); $ txn_type = $ this-> issetCheck ($ post, 'txn_type'); $ payment_status = $ this-> issetCheck ($ post, 'payment_status'); $ payment_type = $ this-> issetCheck ($ post, 'payment_type'); $ payer_id = $ this-> issetCheck ($ post, 'payer_id'); $ create_date = date ('Ymd H: i: s'); $ payment_date = date ('Ymd H: i: s'); $ paypal_ sql = "INSERT INTO ipn_data_tbl (item_name, payer_email, first_name, фамилия_имя, сумма, валюта, страна, txn_id, txn_type, payer_id, payment_status, payment_type, create_date, payment_date 'payment' '' pay_ee_name ', $ item_ $ $ first_name ' '$ last_name', '$ сумма', '$ валюты', '$ страна', '$ txn_id', '$ txn_type', '$ payer_id', '$ payment_status', '$ payment_type',' $ create_date», '$ PAYMENT_DATE')"; mysql_query ($ paypal_ sql); }?>