首页 > 解决方案 > 如何在 WordPress 中实现 EasyPay 巴基斯坦支付网关?

问题描述

大家好,我正在尝试为我的网站实施 EasyPay 巴基斯坦支付网关,但我收到此错误Parameter Authentication failed,我的代码位于他们提供的插件中:

<?php 
require '../../../wp-config.php';

    $storeId = get_option('storeId');
    $daysToExpire = get_option('daysToExpire');
    
    $live = get_option('live');
    $liveVal = $live['menu'];
    $easypayIndexPage = '';
    if ($liveVal == 'no') {
        $easypayIndexPage = 'https://easypaystg.easypaisa.com.pk/easypay/Index.jsf';
    } else {
        $easypayIndexPage = 'https://easypay.easypaisa.com.pk/easypay/Index.jsf';
    }

    $merchantConfirmPage = home_url().'/wp-content/plugins/Easypay/confirmEasypay.php';

    $options = get_option('autoRedirect');
    //$autoRedirect = checked( isset( $options['autoRedirectCb'] ) );
    $autoRedirect = checked( isset( $options['autoRedirectCb'] ),1,false ); 
    if($autoRedirect) {
        $autoRedirect = 1;
    } else {
        $autoRedirect = 0;
    }   
    
    $orderId = $_GET['orderId'];
    if (strpos($_GET['amount'], '.') !== false) {
        $amount = $_GET['amount'];
    } else {
        $amount = sprintf("%0.1f",$_GET['amount']);
    }
    
    $custEmail = $_GET['custEmail'];
    $custCell = $_GET['custCell'];
    $hashKey = get_option('hashKey');
    date_default_timezone_set('Asia/Karachi');
    $expiryDate = '';
    $currentDate = new DateTime();
    if($daysToExpire != null) {
        $currentDate->modify('+'.$daysToExpire.'day');
        $expiryDate = $currentDate->format('Ymd His');
    }
    
    $paymentMethods = get_option('paymentMethod');
    $paymentMethodVal = $paymentMethods['methods'];
    
    $hashRequest = '';
    if(strlen($hashKey) > 0 && (strlen($hashKey) == 16 || strlen($hashKey) == 24 || strlen($hashKey) == 32 )) {
        // Create Parameter map
        $paramMap = array();
        $paramMap['amount']  = $amount ;
        $paramMap['autoRedirect']  = $autoRedirect ;
        if($custEmail != null && $custEmail != '') {
            $paramMap['emailAddr']  = $custEmail ;
        }
        if($expiryDate != null && $expiryDate != '') {
            $paramMap['expiryDate'] = $expiryDate;
        }
        if($custCell != null && $custCell != '') {
            $paramMap['mobileNum'] = $custCell;
        }
        $paramMap['orderRefNum']  = $orderId ;
        
        if($paymentMethodVal != null && $paymentMethodVal != '') {
            $paramMap['paymentMethod']  = $paymentMethodVal ;
        }       
        $paramMap['postBackURL'] = $merchantConfirmPage;
        $paramMap['storeId']  = $storeId ;
        
        //Creating string to be encoded
        $mapString = '';
        foreach ($paramMap as $key => $val) {
            $mapString .=  $key.'='.$val.'&';
        }
        $mapString  = substr($mapString , 0, -1);
        

        // Encrypting mapString
    $ivlen = openssl_cipher_iv_length($cipher="AES-128-ECB");
    $iv = openssl_random_pseudo_bytes($ivlen);
    $crypttext = openssl_encrypt($mapString, $cipher, $hashKey,OPENSSL_RAW_DATA, $iv);
    $hashRequest = base64_encode($crypttext);
    
    }
    
    $con = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD);
    if (!$con) {
            die('Could not connect: ' . mysqli_errno());    
    }     
    mysqli_select_db($con, DB_NAME);
    global $wpdb;
    $table_name = $wpdb->prefix . 'easypay_order';
    
    // mysql inserting an order with pending status
    $query = "INSERT INTO ".$table_name."( easypay_order_id, easypay_order_info, easypay_order_status, ipn_attr ) VALUES ('$orderId' ,'null',  'pending',  'null')";
    try {
        mysqli_query($con, $query);
    } catch (Exception $ex) {            
        error_log($ex->getMessage());
    }
// echo $easypayIndexPage;
 //echo "\r\n".$storeId;
 // echo $amount;
  //echo $merchantConfirmPage;
  //echo $orderId;
 // echo $hashRequest;
 //<?php  header("Location: $easypayIndexPage") ?>


<form name="easypayform" method="post" action="<?php echo $easypayIndexPage;  ?>"> 
    <input name="storeId" value="<?php echo $storeId ?>" hidden = "true" readOnly="true" />
    <input name="amount" value="<?php echo $amount ?>" hidden = "true"/>
    <input name="postBackURL" value="<?php echo $merchantConfirmPage ?>" hidden = "true" readOnly="true" />
    <input name="orderRefNum" value="<?php echo $orderId ?>" hidden = "true" readOnly="true" />
    <?php if ($expiryDate != '' && $expiryDate != null) { ?>
        <input name="expiryDate" value="<?php echo $expiryDate ?>" hidden = "false"/>
    <?php } ?>  
    <input name="autoRedirect" value="<?php echo $autoRedirect ?>" hidden = "true"/>
    <input name="emailAddr" value="<?php echo $custEmail ?>" hidden = "true"/>
    <input name="mobileNum" value="<?php echo $custCell ?>" hidden = "true"/>
    <input name="merchantHashedReq" value="<?php echo $hashRequest ?>" hidden = "true"/>
    <input name="paymentMethod" value="<?php echo $paymentMethodVal ?>" hidden = "true"/>
    
</form>

<script data-cfasync="false" type="text/javascript">
   document.easypayform.submit();
</script>

当我点击页面上Proceed to easypay什么都没有出现时,只出现白色黑色页面,所以经过研究我知道下面写的代码不起作用:

<script data-cfasync="false" type="text/javascript">
   document.easypayform.submit();
</script>

因此,我将这行代码添加到我的表单中,以便我可以手动单击按钮重定向到 EasyPay 页面。

<input type = "submit" value="Submit">

现在,当单击提交按钮时,它会重定向到 EasyPay 页面,但会出现此错误,说Parameter Authentication failed.

在此处输入图像描述

那么,有没有人可以在这个实施中帮助我,因为那里的支持团队没有帮助。我将非常感谢您的帮助。

标签: javascriptphpwordpresspluginspayment-gateway

解决方案


此 EasyPay 插件不能接受大于 2 位小数的付款值,因此,通过在货币设置中进入 Woo-Commerce 插件并将小数位数更改为 1,EasyPay 插件问题将得到解决。


推荐阅读