zaza12 Опубликовано: 7 жовтня, 2016 Опубликовано: 7 жовтня, 2016 В общем из за нулевых знаний php уже 3 дня леплю wayforpay к ubilling . Половина уже работает как надо а именно backand , а frontend через зад. Несколько платежей случайно залетело. Может уже кто писал frontend wayforpay на ubilling?
zaza12 Опубліковано: 8 жовтня, 2016 Автор Опубліковано: 8 жовтня, 2016 пока на frontend накручивал функции то имитировал данные на serviceUrl под $_post , а надо было под json , теперь понял разницу
zaza12 Опубліковано: 8 жовтня, 2016 Автор Опубліковано: 8 жовтня, 2016 (відредаговано) все переписал , заработало ! ( все орправляется , пополняет , принимается, логается. Допишу пару проверяющих функций , приведу к божескому виду и выложу Відредаговано 8 жовтня, 2016 zaza12
zaza12 Опубліковано: 10 жовтня, 2016 Автор Опубліковано: 10 жовтня, 2016 (відредаговано) Вот фронтенд , уже запущен, и работает. Гарантировать правильность не буду , но это бесплатно. Вопрос с curl , как я его только не собирал и тестировал , так и не понял , доходит accept на шлюз , или нет (запросы от wayforpay продолжают сыпаться). Частично или на постоянку решил через die(''.$send_json.''); никакой ценной информации там нет . Если понадобится более обширный сервис с запросами о статусе , или выставить инвойс и т д , то это уже будет другая басня. <?php // Фронтенд к Ubilling для получения оплат от "Wayforpay" // подключаем API OpenPayz include ('../../libs/api.openpayz.php'); //конфиг wayforpay $conf_wayforpay=parse_ini_file('../../backend/wayforpay/config/wayforpay.ini'); //получаем ответ и создаем все нужное global $conf_wayforpay; $json = file_get_contents('php://input'); $data = json_decode($json, true); $merchantAccount=$data['merchantAccount']; $merchantSignature=$data['merchantSignature']; $orderReference=$data['orderReference']; $amount=$data['amount']; $currency=$data['currency']; $authCode=$data['authCode']; $cardPan=$data['cardPan']; $transactionStatus=$data['transactionStatus']; $reasonCode=$data['reasonCode']; $merchant_key=$conf_wayforpay['MERCHANT_KEY']; $weyforpay_link=$conf_wayforpay['WAYFORPAY_LINK']; $time=time(); $status='accept'; // генерация контрольной подписи HMAC_MD5 $string="{$merchantAccount};{$orderReference};{$amount};{$currency};{$authCode};{$cardPan};{$transactionStatus};{$reasonCode}"; $send_string="{$orderReference};{$status};{$time}"; $sign_hash = hash_hmac("md5",$string,$merchant_key); $send_signature = hash_hmac("md5",$send_string,$merchant_key); //DEBUG_MODE=1 включаем log if ($conf_wayforpay['DEBUG_MODE']) { $datetime=curdatetime(); $log_file="config/forms.log"; $log_data='========== '.$datetime.' ==========='."\n"; $log_data.=print_r($data,true); $log_data.='merchant_Signature = '.$merchantSignature."\n"; $log_data.='sign_hashSignature = '.$sign_hash."\n"; $log_data.='=========================================='."\n"; file_put_contents($log_file,$log_data,FILE_APPEND); } /* собираем данные для ответа на weyforpay.В случае, если WayForPay НЕ получит корректный * ответ от сервера торговца, то система будет направлять запросы в *течении 4-х * суток или до получения правильного ответа. */ //формируем json для отправки ответа на шлюз что запрос принят и обработан $send_data = array(); $send_data['orderReference']=$orderReference; $send_data['status']='accept'; $send_data['time']=$time; $send_data['signature']=$send_signature; $send_json=json_encode($send_data); // проверка подписи if ($merchantSignature == $sign_hash) { /*==>> //curl не использую вопрос решил отправляем accept через die(''.$send_json.''); никакой ценной инфы там нет $ch = curl_init($weyforpay_link); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_POSTFIELDS, $send_json); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); curl_exec($ch); // Проверяем наличие ошибок в ответе на шлюз if (!curl_errno($ch)) {$info = curl_getinfo($ch);} file_put_contents("config/forms.log",print_r('=== send to w4p == '.$datetime.' ==='."\n".$send_json,true)."\n".'Прошло '. $info['total_time']. ' секунд во время запроса к '.$info['url'].' , http_code: '.$info['http_code']."\n".'=========================================='."\n",FILE_APPEND); curl_close($ch); <<<==*/ // проверка успешности платежа, выполнена ли операция без ошибок if ($reasonCode == '1100'){ $raw_order=$orderReference; $order=explode('-', $raw_order); if (sizeof($order)==2) { $hash=$raw_order; $summ=$amount; $customerid=$order[0]; $create_date=$order[1]; $paysys='WAYFORPAY'; $note='order:'.$orderReference.' status:'. $transactionStatus.' sig:'.$merchantSignature; // новая транзакция op_TransactionAdd($hash, $summ, $customerid, $paysys, $note); // обработчики необработанных транзакций op_ProcessHandlers(); //транзакция ok die(''.$send_json.''); // при успешной транзакции } else { die(''.$send_json.''); // при неправильном ордере } } else { die(''.$send_json.''); // при других кодах ответов } } else { die(''.$send_json.''); // несовпадение сигнатур , а по сути отправление асcept тупо всегда когда приняли! дабы не складировать ненужные логи } ?> Відредаговано 11 жовтня, 2016 zaza12 1
zaza12 Опубліковано: 11 жовтня, 2016 Автор Опубліковано: 11 жовтня, 2016 (відредаговано) 1 часть кода платежки - backend , <?php // wayforpay //Ловим методом GET виртуальный идентификатор пользователя if (isset($_GET['customer_id'])) { $customer_id=$_GET['customer_id']; } else { die('customer_id fail'); } // подключаем API OpenPayz include ("../../libs/api.openpayz.php"); // подгружаем конфиг $conf_wayforpay=parse_ini_file("config/wayforpay.ini"); // переменные о мерчанте $merchant_name=$conf_wayforpay['MERCHANT_NAME']; $merchant_url=$conf_wayforpay['MERCHANT_URL']; $merchant_logo=$conf_wayforpay['MERCHANT_LOGO']; $merchant_currency=$conf_wayforpay['MERCHANT_CURRENCY']; $template_file=$conf_wayforpay['TEMPLATE']; $raw_amount=$conf_wayforpay['AMOUNT']; // настройки WAYFORPAY $merchant_account=$conf_wayforpay['MERCHANT_ACCOUNT']; $domain_name=$conf_wayforpay['DOMAIN_NAME']; $merchant_key=$conf_wayforpay['MERCHANT_KEY']; $service_url=$conf_wayforpay['SERVICE_URL']; $return_url=$conf_wayforpay['RETURN_URL']; $order_date= time(); $date= date("ymdHis"); $order_reference=$customer_id.'-'.$date; $wayforpay_link=$conf_wayforpay['WAYFORPAY_LINK']; $currency=$conf_wayforpay['CURRENCY']; $payment_systems=$conf_wayforpay['PAYMENT_SYSTEMS']; $lang=$conf_wayforpay['LANG']; $product_name=$conf_wayforpay['PRODUCT_NAME']; $product_price=$conf_wayforpay['PRODUCT_PRICE']; $product_count=$conf_wayforpay['PRODUCT_COUNT']; $amount=array(); if (!empty($raw_amount)) { $amount= explode(',', $raw_amount); } //сумма платежа if (isset($_POST['PaySumm'])) { $money=vf(trim($_POST['PaySumm'])); } else { $money=200; } function paysumm_form($amount,$merchant_currency) { //сборка выбора платежа if (!empty($amount)) { $moneySub=''; foreach ($amount as $each) { $moneySub.='<input name="PaySumm" id="cash'.$each.'" value="'.$each.'" checked="" type="radio"> <label for="cash'.$each.'">'.$each.' '.$merchant_currency.'</label><br>'."\n"; } } else { $moneySub='<input type="text" name="PaySumm" value="" size="5"> Введите сумму платежа'; } $result=' <form action="" method="POST">Выберите сумму платежа</br> '.$moneySub.' <br> <input type="submit" value="Перейти к оплате"> </form> '; return ($result); } // генерация контрольной подписи HMAC_MD5 $string = "{$merchant_account};{$domain_name};{$order_reference};{$order_date};{$money};{$currency};{$product_name};{$product_price};{$product_count}"; $signature= hash_hmac("md5",$string,$merchant_key); function wayforpay_form($merchant_currency,$wayforpay_link,$amount, $merchant_account,$domain_name,$signature,$order_reference,$order_date,$money, $currency,$product_name,$product_price,$product_count,$lang,$return_url,$service_url,$payment_systems) { $form=' <br> <h3>Выбран платеж на сумму '.$money.' '.$merchant_currency.'</h3> <form action="'.$wayforpay_link.'" method="POST"> <input type="hidden" name="merchantAccount" value="'.$merchant_account.'"> <input type="hidden" name="merchantDomainName" value="'.$domain_name.'"> <input type="hidden" name="merchantTransactionType" value="AUTO"> <input type="hidden" name="merchantTransactionSecureType" value="AUTO"> <input type="hidden" name="merchantSignature" value="'.$signature.'"> <input type="hidden" name="orderReference" value="'.$order_reference.'"> <input type="hidden" name="orderDate" value="'.$order_date.'"> <input type="hidden" name="amount" value="'.$money.'"> <input type="hidden" name="currency" value="'.$currency.'"> <input type="hidden" name="productName[]" value="'.$product_name.'"> <input type="hidden" name="productPrice[]" value="'.$product_price.'"> <input type="hidden" name="productCount[]" value="'.$product_count.'"> <input type="hidden" name="language" value="'.$lang.'"> <input type="hidden" name="returnUrl" value="'.$return_url.'"> <input type="hidden" name="serviceUrl" value="'.$service_url.'"> <input type="hidden" name="paymentSystems" value="'.$payment_systems.'"> <br> <input type="submit" name="Submit" value="Оплатить"> </form> '; return($form); } // форма выбора сумы платежа if (!isset($_POST['PaySumm'])) { $payment_form= paysumm_form($amount,$merchant_currency); } else { // подтверждаем форму платежа $payment_form= wayforpay_form($merchant_currency, $wayforpay_link,$amount, $merchant_account, $domain_name,$signature,$order_reference,$order_date, $money,$currency,$product_name,$product_price,$product_count,$lang,$return_url,$service_url,$payment_systems); } //DEBUG_MODE=1 включаем log if ($conf_wayforpay['DEBUG_MODE']) { $datetime=curdatetime(); $log_file="config/forms.log"; $remote_ip=$_SERVER['WAYFORPAY_LINK']; $log_data='===== '.$datetime.' ====='."\n"; $log_data.=$payment_form; $log_data.="\n".'================================'."\n"; file_put_contents($log_file, $log_data,FILE_APPEND); } //показываем в темплейт include($template_file); ?> Відредаговано 11 жовтня, 2016 zaza12 1
zaza12 Опубліковано: 11 жовтня, 2016 Автор Опубліковано: 11 жовтня, 2016 (відредаговано) что бы закрыть тему - weyforpay.ini ; Параметры WAYFORPAY ;Включение логов для отладки frontend backend forms.log, требует права на запись! DEBUG_MODE=1 ;Ссылка WAYFORPAY WAYFORPAY_LINK="https://secure.wayforpay.com/pay" ;Сайт мерчанта. Данная информация будет видна на странице оплаты заказа. DOMAIN_NAME="http://my-site.xxx" ;Тестовые риквизиты мерчанта WAYFORPAY MERCHANT_ACCOUNT="test_merch_n1" MERCHANT_KEY="flk3409refn54t54t*FNJRET" ;Рекомендуемые суммы платежа. AMOUNT=100,150,200 ;Язык платежной страницы. LANG=RU ;Валюта платежа. CURRENCY=UAH ;URL, на который система должна отправлять ответ с результатом платежа напрямую мерчанту, (url фронтенда) SERVICE_URL="http://my-site.xxx/frontend/wayforpay/" ;URL, на который система должна перенаправлять клиента с результатом платежа. ;В случае отсутствия параметра переадресация происходит на страницу результата оплаты checkout psp RETURN_URL= ;Список платежных систем должны быть разделены точкой с запятой - card; privat24; lpTerminal; btc; credit; payParts. PAYMENT_SYSTEMS="card" ;Массив с наименованием заказанных товаров. Данная информация будет видна на странице оплаты заказа. PRODUCT_NAME=ОПЛАТА ИНТЕРНЕТ ;Массив с ценами за единицу товара. Данная информация будет видна на странице оплаты заказа. PRODUCT_PRICE=1 ;Массив с количеством заказанного товара по каждой позиции. PRODUCT_COUNT=1 ; Параметры мерчанта MERCHANT_NAME = "super-puper-lan" MERCHANT_URL = "http://my-site.xxx" MERCHANT_LOGO = "http://my-site.xxx/logo.png" MERCHANT_CURRENCY = "грн" TEMPLATE = "template.html" Відредаговано 11 жовтня, 2016 zaza12 1
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВхід
Уже зарегистрированы? Войдите здесь.
Войти сейчас