ecshop积分充值可充值等级积分余消费积分教程

ECSHOP教程 / ecshop教程网(www.ecshop119.com) 2014-06-06

随着实体店与网店的结合 很多实体店开始开发属于自己的网上商城,网络商城经常有一个做法就是不人名币转换成商城自己的表示方式,在此就叫做积分。ecshop有一个功能是在线充值人名币,现在我用此功能来实现人名币充值积分。

1,充值页面

复制ecshop用户中心user.php下‘account_deposit’下的程序与user_transaction.dwt下account_deposit的模版信息作为虫子积分的充值程序与模版文件。

2,数据库处理。

在数据库user_account中添加字段pay_points用于存取充值换算下来的积分。

3,充值提交程序处理

   ecshop默认充值程序包括了退款与冲值的两个过程,在此我把简化好的程序贴出 供大家研究

include_once(ROOT_PATH . 'includes/lib_clips.php');
    include_once(ROOT_PATH . 'includes/lib_order.php');
    $amount = isset($_POST['amount']) ? floatval($_POST['amount']) : 0;
    if ($amount <= 0)
    {
        show_message($_LANG['amount_gt_zero']);
    }

/* 变量初始化 */
    $surplus = array(
            'user_id'      => $user_id,
            'rec_id'       => !empty($_POST['rec_id'])      ? intval($_POST['rec_id'])       : 0,
            'process_type' => isset($_POST['surplus_type']) ? intval($_POST['surplus_type']) : 0,
            'payment_id'   => isset($_POST['payment_id'])   ? intval($_POST['payment_id'])   : 0,
            'user_note'    => isset($_POST['user_note'])    ? trim($_POST['user_note'])      : '',
            'amount'       => $amount,
            'pay_points'  =>$amount*100/$_CFG['integral_scale']//通过后台积分有换算比例算出充值的积分
    );

if ($surplus['payment_id'] <= 0)
    {
        show_message($_LANG['select_payment_pls']);
    }

include_once(ROOT_PATH .'includes/lib_payment.php');

//获取支付方式名称
      $payment_info = array();
      $payment_info = payment_info($surplus['payment_id']);
      $surplus['payment'] = $payment_info['pay_name'];

if ($surplus['rec_id'] > 0)
      {
          //更新会员账目明细
          $surplus['rec_id'] = update_user_account($surplus);
      }
      else
      {
          //插入会员账目明细
          $surplus['rec_id'] = insert_user_account($surplus, $amount);
      }

//取得支付信息,生成支付代码
      $payment = unserialize_config($payment_info['pay_config']);

//生成伪订单号, 不足的时候补0
      $order = array();
      $order['order_sn']       = $surplus['rec_id'];
      $order['user_name']      = $_SESSION['user_name'];
      $order['surplus_amount'] = $amount;

//计算支付手续费用
      $payment_info['pay_fee'] = pay_fee($surplus['payment_id'], $order['surplus_amount'], 0);

//计算此次预付款需要支付的总金额
      $order['order_amount']   = $amount + $payment_info['pay_fee'];

//记录支付log
      $order['log_id'] = insert_pay_log($surplus['rec_id'], $order['order_amount'], $type=2, 0);//需要主意这的支付类型,ecshop默认的有两个0和1,这里把这个设置成2去边是积分充值。

/* 调用相应的支付方式文件 */
      include_once(ROOT_PATH . 'includes/modules/payment/' . $payment_info['pay_code'] . '.php');

/* 取得在线支付方式的支付按钮 */
      $pay_obj = new $payment_info['pay_code'];
      $payment_info['pay_button'] = $pay_obj->get_code($order, $payment);

/* 模板赋值 */
      $smarty->assign('payment', $payment_info);
      $smarty->assign('pay_fee', price_format($payment_info['pay_fee'], false));
      $smarty->assign('amount',  price_format($amount, false));
      $smarty->assign('order',   $order);
      $smarty->display('');//掉需要的模版,也可以在user_transaction.dwt中操作,模版信息就复制 act_account的模版直接使用,在其中可以添加一行说明充值了多少积分,在这就不说明了,如果有需要的朋友可以给我留言。

4,在第三部中用到函数insert_user_account这个函数需要修改为如下

  function insert_user_account($surplus, $amount)
{
    $sql = 'INSERT INTO ' .$GLOBALS['ecs']->table('user_account').
           ' (user_id, admin_user, amount, add_time, paid_time, admin_note, user_note, process_type, payment, is_paid,pay_points)'.
            " VALUES ('$surplus[user_id]', '', '$amount', '".gmtime()."', 0, '', '$surplus[user_note]', '$surplus[process_type]', '$surplus[payment]', 0,'$surplus[pay_points]')";
    $GLOBALS['db']->query($sql);

return $GLOBALS['db']->insert_id();
}

  5,修改支付回调函数

    支付回调函数在lib_payment.php中的order_paid,现在添加回调的处理。

{
    /* 取得支付编号 */
    $log_id = intval($log_id);
    if ($log_id > 0)
    {
        /* 取得要修改的支付记录信息 */
        $sql = "SELECT * FROM " . $GLOBALS['ecs']->table('pay_log') .
                " WHERE log_id = '$log_id'";
        $pay_log = $GLOBALS['db']->getRow($sql);
        if ($pay_log && $pay_log['is_paid'] == 0)
        {
            /* 修改此次支付操作的状态为已付款 */
            $sql = 'UPDATE ' . $GLOBALS['ecs']->table('pay_log') .
                    " SET is_paid = '1' WHERE log_id = '$log_id'";
            $GLOBALS['db']->query($sql);

/* 根据记录类型做相应处理 */
            if ($pay_log['order_type'] == PAY_ORDER)
            {
                /* 取得订单信息 */
                $sql = 'SELECT order_id, user_id, order_sn, consignee, address, tel, shipping_id, extension_code, extension_id, goods_amount ' .
                        'FROM ' . $GLOBALS['ecs']->table('order_info') .
                       " WHERE order_id = '$pay_log[order_id]'";
                $order    = $GLOBALS['db']->getRow($sql);
                $order_id = $order['order_id'];
                $order_sn = $order['order_sn'];

/* 修改订单状态为已付款 */
                $sql = 'UPDATE ' . $GLOBALS['ecs']->table('order_info') .
                            " SET order_status = '" . OS_CONFIRMED . "', " .
                                " confirm_time = '" . gmtime() . "', " .
                                " pay_status = '$pay_status', " .
                                " pay_time = '".gmtime()."', " .
                                " money_paid = order_amount," .
                                " order_amount = 0 ".
                       "WHERE order_id = '$order_id'";
                $GLOBALS['db']->query($sql);

/* 记录订单操作记录 */
                order_action($order_sn, OS_CONFIRMED, SS_UNSHIPPED, $pay_status, $note, $GLOBALS['_LANG']['buyer']);

/* 如果需要,发短信 */
                if ($GLOBALS['_CFG']['sms_order_payed'] == '1' && $GLOBALS['_CFG']['sms_shop_mobile'] != '')
                {
                    include_once(ROOT_PATH.'includes/cls_sms.php');
                    $sms = new sms();
                    $sms->send($GLOBALS['_CFG']['sms_shop_mobile'],
                        sprintf($GLOBALS['_LANG']['order_payed_sms'], $order_sn, $order['consignee'], $order['tel']),'', 13,1);
                }

/* 对虚拟商品的支持 */
                $virtual_goods = get_virtual_goods($order_id);
                if (!empty($virtual_goods))
                {
                    $msg = '';
                    if (!virtual_goods_ship($virtual_goods, $msg, $order_sn, true))
                    {
                        $GLOBALS['_LANG']['pay_success'] .= '<div style="color:red;">'.$msg.'</div>'.$GLOBALS['_LANG']['virtual_goods_ship_fail'];
                    }

/* 如果订单没有配送方式,自动完成发货操作 */
                    if ($order['shipping_id'] == -1)
                    {
                        /* 将订单标识为已发货状态,并记录发货记录 */
                        $sql = 'UPDATE ' . $GLOBALS['ecs']->table('order_info') .
                               " SET shipping_status = '" . SS_SHIPPED . "', shipping_time = '" . gmtime() . "'" .
                               " WHERE order_id = '$order_id'";
                        $GLOBALS['db']->query($sql);

/* 记录订单操作记录 */
                        order_action($order_sn, OS_CONFIRMED, SS_SHIPPED, $pay_status, $note, $GLOBALS['_LANG']['buyer']);
                        $integral = integral_to_give($order);
                        log_account_change($order['user_id'], 0, 0, intval($integral['rank_points']), intval($integral['custom_points']), sprintf($GLOBALS['_LANG']['order_gift_integral'], $order['order_sn']));
                    }
                }

}
            elseif ($pay_log['order_type'] == PAY_SURPLUS)
            {
                $sql = 'SELECT `id` FROM ' . $GLOBALS['ecs']->table('user_account') .  " WHERE `id` = '$pay_log[order_id]' AND `is_paid` = 1  LIMIT 1";
                $res_id=$GLOBALS['db']->getOne($sql);
                if(empty($res_id))
                {
                    /* 更新会员预付款的到款状态 */
                    $sql = 'UPDATE ' . $GLOBALS['ecs']->table('user_account') .
                           " SET paid_time = '" .gmtime(). "', is_paid = 1" .
                           " WHERE id = '$pay_log[order_id]' LIMIT 1";
                    $GLOBALS['db']->query($sql);

/* 取得添加预付款的用户以及金额 */
                    $sql = "SELECT user_id, amount FROM " . $GLOBALS['ecs']->table('user_account') .
                            " WHERE id = '$pay_log[order_id]'";
                    $arr = $GLOBALS['db']->getRow($sql);

/* 修改会员帐户金额 */
                    $_LANG = array();
                    include_once(ROOT_PATH . 'languages/' . $GLOBALS['_CFG']['lang'] . '/user.php');
                    log_account_change($arr['user_id'], $arr['amount'], 0, 0, 0, $_LANG['surplus_type_0'], ACT_SAVING);
                }
            }
            /*处理积分充值的过程*/
            elseif ($pay_log['order_type'] == 2)
            {
                $sql = 'SELECT `id` FROM ' . $GLOBALS['ecs']->table('user_account') .  " WHERE `id` = '$pay_log[order_id]' AND `is_paid` = 1  LIMIT 1";
                $res_id=$GLOBALS['db']->getOne($sql);
                if(empty($res_id))
                {
                    /* 更新会员预付款的到款状态 */
                    $sql = 'UPDATE ' . $GLOBALS['ecs']->table('user_account') .
                           " SET paid_time = '" .gmtime(). "', is_paid = 1" .
                           " WHERE id = '$pay_log[order_id]' LIMIT 1";
                    $GLOBALS['db']->query($sql);

/* 取得添加预付款的用户以及金额 */
                    $sql = "SELECT user_id, amount,pay_points FROM " . $GLOBALS['ecs']->table('user_account') .
                            " WHERE id = '$pay_log[order_id]'";
                    $arr = $GLOBALS['db']->getRow($sql);

/* 修改会员帐户金额 */
                    log_account_change($arr['user_id'], 0, 0, 0, $arr['pay_points'], '积分充值', ACT_SAVING);//积分充值
                }
            }
        }
        else
        {
            /* 取得已发货的虚拟商品信息 */
            $post_virtual_goods = get_virtual_goods($pay_log['order_id'], true);

/* 有已发货的虚拟商品 */
            if (!empty($post_virtual_goods))
            {
                $msg = '';
                /* 检查两次刷新时间有无超过12小时 */
                $sql = 'SELECT pay_time, order_sn FROM ' . $GLOBALS['ecs']->table('order_info') . " WHERE order_id = '$pay_log[order_id]'";
                $row = $GLOBALS['db']->getRow($sql);
                $intval_time = gmtime() - $row['pay_time'];
                if ($intval_time >= 0 && $intval_time < 3600 * 12)
                {
                    $virtual_card = array();
                    foreach ($post_virtual_goods as $code => $goods_list)
                    {
                        /* 只处理虚拟卡 */
                        if ($code == 'virtual_card')
                        {
                            foreach ($goods_list as $goods)
                            {
                                if ($info = virtual_card_result($row['order_sn'], $goods))
                                {
                                    $virtual_card[] = array('goods_id'=>$goods['goods_id'], 'goods_name'=>$goods['goods_name'], 'info'=>$info);
                                }
                            }

$GLOBALS['smarty']->assign('virtual_card',      $virtual_card);
                        }
                    }
                }
                else
                {
                    $msg = '<div>' .  $GLOBALS['_LANG']['please_view_order_detail'] . '</div>';
                }

$GLOBALS['_LANG']['pay_success'] .= $msg;
            }

/* 取得未发货虚拟商品 */
           $virtual_goods = get_virtual_goods($pay_log['order_id'], false);
           if (!empty($virtual_goods))
           {
               $GLOBALS['_LANG']['pay_success'] .= '<br />' . $GLOBALS['_LANG']['virtual_goods_ship_fail'];
           }
        }
    }
}

6,后台管理员确认设置

后台管理员可以直接确认充值成功,在此处理程序就不做详细解释。

总结:此次二次开发主要是处理在线接口完成支付回调信息的处理

[ecshop 资料]ecshop积分充值可充值等级积分余消费积分教程 pay_points相关推荐

  1. [ecshop 资料] ecshop 安装须知 - 支付插件的问题 。。ectouch 小京东

    [ecshop 资料] ecshop 安装须知 - 支付插件的问题 ..ectouch 小京东 网上一些 修改过的ecshop 的版本因为已经安装过程,而ecshop的支付模块 卸载后 数据库中仍有记 ...

  2. [ecshop 资料 ]ecshop 怎么实现购物满200元免运费

    ecshop 怎么实现购物满200元免运费 2013-05-16 10:28凯凯598 | 浏览 995 次  编程语言 2013-05-16 11:24 #知道行家专业创造价值,火热招募中!# 提问 ...

  3. java 积分源码_Java生鲜电商平台-积分系统搭建与源代码下载?(小程序/APP)

    一.积分体系搭建思维导图 二.积分体系搭建第一步–制定积分基本规则 积分,是发给用户的一种虚拟货币,既然是货币,那意味着企业就要为之承担一部分营销费用,在搭建积分体系之前,一定要清晰地制定好积分的基本 ...

  4. ECSHOP头部调用会员的消费积分

    ECSHOP的会员登录区,也就是 ECSHOP头部,如何调用会员的消费积分呢. 其实很简单,只是修改下ECSHOP模板就可以了. 打开 /themes/你的模板文件夹/library/member_i ...

  5. ecshop资料网址

    ecshop资料:http://www.68ecshop.com/article-459.html 转载于:https://www.cnblogs.com/shenming/p/4317688.htm ...

  6. [ecshop 资料]设置ECSHOP支持货到付款

    设置ECSHOP支持货到付款 (2015-06-15 10:08:32) 转载▼ 标签: ecshop货到付款 ecshop支付方式 分类:ecshop教程 第一步:查看当前的配送方式是否支持货到付款 ...

  7. ecshop二次开发手册,ECSHOP文件结构,ECSHOP目录详解

    Ecshop文件结构 :ecshop二次开发手册,ECSHOP文件结构,ECSHOP目录详解 /* ECShop 最新程序 的结构图及各文件相应功能介绍 ECShop文件结构目录 ┣ activity ...

  8. 微信小程序充值及充值回调后的处理

    微信小程序的充值流程与 H5 或 公众号大致差不多,这里简单说一下前端在充值时候的一些操作流程. 用户在小程序中发起充值请求时,一般会先请求自己的服务器,将充值的参数发送给后端,然后后端会去请求微信充 ...

  9. 充值系列——充值系统安全问题(四)

    这是充值系列的最后一篇,将讨论充值安全的问题.正如这个系列的其他文章提到的,充值系统的流程如下: 注意: 4,5执行顺序不确定,步骤4是支付平台自动向服务器请求,步骤5是玩家点击"返回商家网 ...

  10. 微信小程序分析送积分功能如何实现_微信小程序积分商城系统如何裂变营销购物?...

    小程序积分商城系统通过以积分的形式,通过购物返积分,签到领积分等各种方式,让消费者对品牌和产品形成一定认知和信赖,从而提高消费者的购物积极性,提高产品的复购率,通过微信访问.传播.交易一体化的裂变营销 ...

最新文章

  1. 四条使用Spring BeanUtils的总结,避免各种诡异的属性拷贝问题!
  2. 60分钟精通正则表达式
  3. java怎么设置不同事件_activiti 全局流程监听ActivitiEventListener,实现监听不同类型事件,不需要在acitivit中配置任务监听,非常方便...
  4. java人种_实在看不出藏族有大量矮黑血统
  5. 前端学习(2051)vue之电商管理系统电商系统之开启gzip文件传输
  6. springboot日志配输出路径配置_SpringBoot日志配置详解
  7. 任正非:华为欲出售5G技术制造竞争对手
  8. “虚拟化 ”和“云计算”计算机技术新概念
  9. oracle的用户和mysql的用户_oracle数据库的用户以及表空间
  10. 【MFC开发(12)】图片框控件 Picture Control
  11. SN65HVD888DR应用 TPS61170DRVR中文资料_1.2A 转换器
  12. eterm协议指令解析
  13. ThinkPHP 3.2.3 验证码 (解决图片不显示的问题)
  14. PyTorch的参数固定以及detach clone
  15. 数据库查询练习(一)
  16. 正则表达式-校验 Ip地址 Mac地址 端口 经纬度 车牌号码
  17. 如何安装OpenCVE
  18. JetBrain系列软件的学生授权认证及认证到期重新申请授权
  19. 更改tomcat端口8080为80的时候,有系统端口占用的问题
  20. 让大数据告诉你,网红“小龙虾”究竟有多火

热门文章

  1. 2535: [Noi2010]Plane 航空管制2
  2. 卡口和电子警察的区别
  3. matlab 模拟光源,基于 Matlab 的激光光斑模拟.pdf
  4. 常见图片格式及其区别小结
  5. U盘安装win7提示缺少所需的CD/DVD驱动器设备驱动程序
  6. 解决:在 VSCode 中如何设置默认的浏览器为Chrome或Firefox
  7. 链新:探索NFT中国化路径,与实体经济相结合
  8. 大数据面试3分钟自我介绍_快手大数据岗位招聘面试题分享
  9. 制作二维码过程的详解(基于python)_基于opencv+python的二维码识别
  10. idea去掉拼写检查