ecshop积分充值可充值等级积分余消费积分教程
2016-06-13 13:05 来源:www.chinab4c.com 作者:ecshop专家
随着实体店与网店的结合 很多实体店开始开发属于自己的网上商城,网络商城经常有一个做法就是不人名币转换成商城自己的表示方式,在此就叫做积分。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'] .= '
' . $GLOBALS['_LANG']['virtual_goods_ship_fail']; } } } } 6,后台管理员确认设置 后台管理员可以直接确认充值成功,在此处理程序就不做详细解释。 总结:此次二次开发主要是处理在线接口完成支付回调信息的处理。
最近更新
常用插件
- ecshop二次开发售后维修卡
插件介绍: 本插件是用于专门从事电子,信息,软件等售后服务关键比...
- ecshop按分类筛选销售排行
ecshop按分类筛选销售排行...
- ecshop选择下单时间插件
ecshop选择下单时间插件主要是根据不同的下单配送要求,在ecshop购物车...
- ecshop供应商插件免费下载
ecshop供应商插件免费下载...
- ecshop快递发货单打印商品
ecshop快递发货单打印商品信息,大家都知道ecshop快递单打印的时候,只能...