Я пытаюсь получить работу с модулем оплаты от шлюза bluemedia, и у меня есть проблема.я создаю файлы, например, как с PayPal,
<?php
class SLN_Payment_Bluemedia
{
const TEST_URL = 'https://pay-accept.bm.pl/payment';
const PROD_URL = 'https://pay.bm.pl/payment';
protected $plugin;
public function __construct(SLN_Plugin $plugin)
{
$this->plugin = $plugin;
}
function reverseCheckIpn()
{
$raw_post_data = file_get_contents('php://input');
$raw_post_array = explode('&', $raw_post_data);
$myPost = array();
foreach ($raw_post_array as $keyval) {
$keyval = explode('=', $keyval);
if (count($keyval) == 2) {
$myPost[$keyval[0]] = urldecode($keyval[1]);
}
}
$req = 'cmd=_notify-validate';
if (function_exists('get_magic_quotes_gpc')) {
$get_magic_quotes_exists = true;
}
foreach ($myPost as $key => $value) {
if ($get_magic_quotes_exists == true && get_magic_quotes_gpc() == 1) {
$value = urlencode(stripslashes($value));
} else {
$value = urlencode($value);
}
$req .= "&$key=$value";
}
$fields = (is_array($getFields)) ? http_build_query($getFields) : $getFields;
$isTest = $this->plugin->getSettings()->isBluemediaTest();
$ch = curl_init($this->getBaseUrl());
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $isTest ? 0 : 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('BmHeader: pay-bm'));
if (!($res = curl_exec($ch))) {
error_log("Got " . curl_error($ch) . " when processing IPN data");
curl_close($ch);
exit;
}
curl_close($ch);
return (strcmp($res, "VERIFIED") == 0);
}
public function getUrl($id, $amount, $title)
{
$settings = $this->plugin->getSettings();
$url = SLN_Func::currPageUrl();
$url = apply_filters('sln.booking.payment.bluemedia.get-url', $url);
return $this->getBaseUrl() . "?"
. http_build_query(
array(
'ServiceID' => $settings->getBluemediaID(),
'OrderID' => $id,
'Amount' => $amount,
'Hash' => $settings->getBluemediaHash(),
'Currency' => $settings->getCurrency(),
)
);
}
private function getBaseUrl()
{
$isTest = $this->plugin->getSettings()->isBluemediaTest();
return $isTest ?
self::TEST_URL : self::PROD_URL;
}
function isCompleted($amount)
{
return floatval($_POST['mc_gross']) == floatval($amount) && $_POST['payment_status'] == 'Completed';
}
function getTransactionId(){
return sanitize_text_field(wp_unslash( $_POST['txn_id'] ));
}
}
Другой файл выглядит следующим образом:
<?php
class SLN_PaymentMethod_Bluemedia extends SLN_PaymentMethod_Abstract
{
public function getFields(){
return array(
'pay_bluemedia_domain',
'pay_bluemedia_id',
'pay_bluemedia_hash',
'pay_bluemedia_test'
);
}
public function dispatchThankYou(SLN_Shortcode_Salon_ThankyouStep $shortcode, SLN_Wrapper_Booking $booking = null){
if (isset($_GET['op'])) {
$op = explode('-', sanitize_text_field($_GET['op']));
$action = $op[0];
if ($action == 'success') {
if ($this->isTest()) {
$booking->markPaid('test');
}
$shortcode->goToThankyou();
} elseif ($action == 'notify') {
$this->processIpn($op[1]);
} elseif ($action == 'cancel') {
return __('Your payment has not been completed', 'salon-booking-system');
} else {
throw new Exception('payment method operation not managed');
}
} elseif ($_GET['mode'] == 'bluemedia') {
if ($shortcode->isAjax()) {
$bookUrl = str_replace(site_url(), '',get_permalink($this->plugin->getSettings()->get('pay')));
$_SERVER['REQUEST_URI'] = $bookUrl.'?sln_step_page=thankyou&submit_thankyou=1&mode=bluemedia';
}
$ppl = new SLN_Payment_Bluemedia($this->plugin);
$url = $ppl->getUrl($booking->getId(), $booking->getToPayAmount(false), $booking->getTitle());
$shortcode->redirect($url);
} else {
throw new Exception('payment method mode not managed');
}
}
private function isTest(){
return $this->plugin->getSettings()->isBluemediaTest();
}
}
внутри инструкции theres информация, на которую должна смотреть ссылка, например: https://domena_bramki/sciezka?ServiceID=2&OrderID=100&Amount=1.50&Hash=2ab5 2e6918c6ad3b69a8228a2ab815f11ad58533eeed963dd990df81
и мой сценарий правильно генерирует эту ссылку таким же образом, но шлюз bluemedia сообщает: мы не можем реализовать вашу транзакцию ..... я думаю, может быть, есть проблема с генерацией хэша ...
Кто-нибудь может мне помочь ?