Перейти до

Рекомендованные сообщения

Опубликовано:

В общем из за нулевых знаний php уже 3 дня леплю wayforpay к ubilling .  Половина уже  работает как надо а именно backand , а frontend через зад. Несколько платежей случайно залетело. Может уже кто писал frontend wayforpay на ubilling?

Опубліковано:

пока на frontend накручивал функции то имитировал данные на serviceUrl под $_post  ,   а надо было под json , теперь понял разницу

Опубліковано: (відредаговано)

все переписал , заработало ! ( все орправляется , пополняет ,  принимается,  логается. Допишу пару проверяющих функций , приведу к божескому виду и выложу

Відредаговано zaza12
Опубліковано: (відредаговано)

Вот фронтенд , уже запущен, и работает. Гарантировать правильность не буду , но это бесплатно. Вопрос с 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 тупо всегда когда приняли! дабы не складировать ненужные логи
}
 
?>
Відредаговано zaza12
  • Thanks 1
Опубліковано: (відредаговано)

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);
 
?>
Відредаговано zaza12
  • Thanks 1
Опубліковано: (відредаговано)

что бы закрыть тему -  weyforpay.ini 

; Параметры WAYFORPAY
;Включение логов для отладки frontend  backend forms.log, требует права на запись!
DEBUG_MODE=1
;Ссылка WAYFORPAY
;Сайт мерчанта. Данная информация будет видна на странице оплаты заказа.
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 фронтенда)
;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_CURRENCY = "грн"
TEMPLATE = "template.html"
Відредаговано zaza12
  • Thanks 1

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
×
×
  • Створити нове...