月度归档:2014年08月

ecshop 如何调用广告位

第一步、  从后台首先添加广告位置 ,然后选择这个广告位置添加图片。

第二步、 需要调广告的,php文件里加

$ads = array(
‘num’=>’1′,//广告数量
‘id’=>’1′//广告位置id
);
$our_ads =insert_ads($ads);
$smarty->assign(“our_ads”,$our_ads);

      第三步 打开我们需要的模板文件 {$our_ads}   ok搞定。

ecshop中实现会员退出时不删除购物车中的信息

ecshop中实现会员退出时不删除购物车中的信息。

思路:

       一、在会员登录时,修改购物车中的 user_id 为当前会员登录的 user_id

             打开 lib_main.php, 找到函数 update_user_info() , 在末尾加上代码:

            /*更新购物车信息*/
            $sql = "UPDATE " .$GLOBALS['ecs']->table('cart'). " SET user_id = '". $_SESSION['user_id'] ."' WHERE session_id = '". SESS_ID ."' ";
             $GLOBALS['db']->query($sql);

二、在会员退出时, 判断 购物车中 如果 user_id 不为 0, 则不删除此条信息。

          打开  cls_session.php , 找到 destroy_session()  函数, 

          修改:

          $this->db->query('DELETE FROM ' . $GLOBALS['ecs']->table('cart') . " WHERE session_id = '$this->session_id'");

为:

          $this->db->query('DELETE FROM ' . $GLOBALS['ecs']->table('cart') . " WHERE session_id = '$this->session_id' AND user_id = 0"); 

完美解决ecshop前台和后台自动退出、购物车自动清空

一、出现这个问题的原因:

        ECSHOP的SESSION采用IP生成用户唯一SESS_ID,这样的话,多线接入的用户在路由自动切换时就会造成IP变化,这样,SESSION也就丢失了,与SESSION相关的登陆购物车也就失效。 

二、原理

      当用户第一次登陆时,将用户的首次登陆IP存入Cookie,其它功能依然使用ECSHOP的SESSION。

三、操作

     在根目录includescls_session.php找到

     $this->_ip = real_ip();

    大概在82行,把它删除或用//注释掉,
    在原位置加入如下代码:


 /*启用cookie记录ip地址*/
        if(isset($_COOKIE['real_ipd']) && !empty($_COOKIE['real_ipd']))
        {  
            $this->_ip = $_COOKIE['real_ipd']; 
        } 
        else
        { 
            $this->_ip = real_ip(); 
            setcookie("real_ipd", $this->_ip, time()+36000, "/"); 
        }

基于ecshop手机微信站的微信支付开发

最近做了微信的手机登陆、手机支付,  手机微信登陆前面已经介绍过了, 现在介绍下微信支付。

这个接口是完全适应于ecshop, 以一个插件的形式(用的jsapi), 但是在其他地方的道理是一样的。

先来看下在ecshop中的目录结构      

 

其中 wxpay这个文件是官网提供的, 放在ecshop的根目录下面的  includes/modules下面。

插件代码在payment文件下面,  命名为   wxpay.php    (注意这个命名,不要改)。

然后看下  wxpay.php 这个的具体的代码。

<?php
/**
 * ECSHOP 微信插件  
 * ============================================================================
 *   微信支付
 *   author: ZHANGLIN
 * ============================================================================
 */

if (!defined('IN_ECS'))
{
    die('Hacking attempt');
}

$payment_lang = ROOT_PATH . 'languages/' .$GLOBALS['_CFG']['lang']. '/payment/wxpay.php';

if (file_exists($payment_lang))
{
    global $_LANG;

    include_once($payment_lang);
}

/* 模块的基本信息 */
if (isset($set_modules) && $set_modules == TRUE)
{
    $i = isset($modules) ? count($modules) : 0;

    /* 代码 */
    $modules[$i]['code']    = basename(__FILE__, '.php'); 

    /* 描述对应的语言项 */
    $modules[$i]['desc']    = 'wxpay_desc';

    /* 是否支持货到付款 */
    $modules[$i]['is_cod']  = '0';

    /* 是否支持在线支付 */
    $modules[$i]['is_online']  = '1';

    /* 作者 */
    $modules[$i]['author']  = 'ZHANGLIN';

    /* 网址 */
    $modules[$i]['website'] = 'https://mp.weixin.qq.com';

    /* 版本号 */
    $modules[$i]['version'] = '1.0.0';

    /* 配置信息 */
    $modules[$i]['config']  = array(
        array('name' => 'app_id',           'type' => 'text',   'value' => ''),
        array('name' => 'paysign_key',      'type' => 'text',   'value' => ''),
        array('name' => 'sign_type',        'type' => 'text',   'value' => 'sha1'), 
        array('name' => 'partner_key',      'type' => 'text',   'value' => ''),
        array('name' => 'app_sercert',      'type' => 'text',   'value' => ''),
        array('name' => 'parener_id',       'type' => 'text',   'value' => ''),
    ); 
    return;
}

/**
 * 类
 */
class wxpay
{

    /**
     * 构造函数
     *
     * @access  public
     * @param
     *
     * @return void
     */
    function wxpay()
    {
    }

    function __construct()
    {
        $this->wxpay();
    }

    /**
     * 生成支付代码
     * @param   array   $order      订单信息
     * @param   array   $payment    支付方式信息
     */
    function get_code($order, $payment)
    {
        if (!defined('EC_CHARSET'))
        {
            $charset = 'utf-8';
        }
        else
        {
            $charset = EC_CHARSET;
        }   

        //定义配置常量
        define('APPID' ,     $payment['app_id']);  //appid
        define('APPKEY' ,    $payment['paysign_key']); //paysign key
        define('SIGNTYPE',   $payment['sign_type']); //method
        define('PARTNERKEY', $payment['partner_key']);//通加密串
        define('APPSERCERT', $payment['app_sercert']); 
        define('PARTNERID',  $payment['parener_id']); 
        include_once(ROOT_PATH . "includes/modules/wxpay/WxPayHelper.php"); 
 
        $commonUtil = new CommonUtil();
        $wxPayHelper = new WxPayHelper();  
        $wxPayHelper->setParameter("bank_type", "WX");
        $wxPayHelper->setParameter("body", '马尼尔商品');
        $wxPayHelper->setParameter("partner", PARTNERID);
        $wxPayHelper->setParameter("out_trade_no", $order['order_sn']);
        $wxPayHelper->setParameter("total_fee", $order['order_amount']*100);
        $wxPayHelper->setParameter("fee_type", "1");
        $wxPayHelper->setParameter("notify_url", return_url(basename(__FILE__, '.php')));
        $wxPayHelper->setParameter("spbill_create_ip", real_ip());
        $wxPayHelper->setParameter("input_charset", "GBK");
        $package = $wxPayHelper->create_biz_package(); 

        echo '<script language="javascript">
        function callpay()
        {
            WeixinJSBridge.invoke("getBrandWCPayRequest",'.$package.',function(res){
            WeixinJSBridge.log(res.err_msg);
            alert(res.err_code+res.err_desc+res.err_msg);
            });
        }
        </script> ';
        $button = '<button type="button" class="btn_white" onclick="callpay()">微信支付</button>';

        return $button;
    } 

    /**
    *  响应操作
    */
    function respond()
    {
        if ( isset($_GET) )
        {
            //支付信息
            $sql = 'SELECT * FROM ' . $GLOBALS['ecs']->table('payment') .
            " WHERE pay_code = 'wxpay' AND enabled = 1"; 
            $payment = $GLOBALS['db']->getRow($sql);
            $payment = unserialize_config($payment['pay_config']);

            //=======================
            //  注意这里要作一个判断,  返回回来的值是否是微信支付成功后返回的值
           //========================  

            $order_sn = trim($_GET['out_trade_no']);  
            $order_id = $GLOBALS['db']->getOne("SELECT order_id FROM " . $GLOBALS['ecs']->table('order_info') . " WHERE order_sn = '$order_sn'");  
            $log_id = $GLOBALS['db']->getOne("SELECT log_id FROM " . $GLOBALS['ecs']->table('pay_log') . "  WHERE order_id = '$order_id'"); 
                    /* 改变订单状态 */
            order_paid($log_id, 2);

            return true;
        }
        else
        {
            return false;
        } 
    }
 
}

?>

 文中涉及到的附件下载:

wxpay.php.rar

wxpay

如何运用PHP函数array_push()实现数组元素的增加

当你使用PHP函数array_push()的时候,你将会很容易的做到在数组的头尾增加新的元素。我们下面就将实际操作代码写上,希望对有需要的朋友有所帮助。

下面的例子中首先示范如何使用PHP函数array_push()在数组的尾端新增元素:

  1. <? /* 首先我们建立一个数组 */   
  2.  
  3. $fruitArray = array("apple", "orange", "banana", "Peach", "pear");    
  4.  
  5. /* 使用array_push()函数在原有数组尾端新增一些元素 */   
  6.  
  7. array_push($fruitArray, "grape", "pineapple", "tomato");    
  8.  
  9. /* 现在把该数组的所有元素的键(key)与值(value)都显示在网页上 */   
  10.  
  11. while (list($key,$value) = each($fruitArray)) {   
  12.  
  13. echo "$key : $value<br>";   
  14.  
  15. }    
  16.  
  17. ?>     

显示结果如下:

0 : apple

1 : orange

2 : banana

3 : Peach

4 : pear

5 : grape

6 : pineapple

7 : tomato

现在来示范如何运用PHP函数array_push()从数组的开头新增一些元素。下面的程序代码和前面一个例子几乎完全相同,唯一的差别只是这里使用的函数是array_unshift()而不是 array_push()。

  1. <?   
  2.  
  3. /* 首先我们建立一个数组 */   
  4.  
  5. $fruitArray = array("apple", "orange", "banana", "Peach", "pear");    
  6.  
  7. /* 使用array_unshift()函数在原有数组开头新增一些元素 */   
  8.  
  9. array_unshift($fruitArray, "grape", "pineapple", "tomato");    
  10.  
  11. /* 现在把该数组的所有元素的键(key)与值(value)都显示在网页上 */   
  12.  
  13. while (list($key,$value) = each($fruitArray)) {   
  14.  
  15. echo "$key : $value<br>";   
  16.  
  17. }    
  18.  
  19. ?>   

显示结果如下:

0 : grape

1 : pineapple

2 : tomato

3 : apple

4 : orange

5 : banana

6 : Peach

7 : pear

以上两段代码分别介绍了PHP函数array_push()在数组头尾增加元素的办法。