当前位置: 首页 > news >正文

ecshop开发日志之手机端虚拟商品自动发货

在ecshop官方模版收,web端的虚拟商品购买后不能像pc端那般直接在付款后出现虚拟商品的卡号,密码,截止日期
一下为让手机购买也可以在付款后自动显示发货并能显示卡号密码截止日期
首 先找到pc端的flow.php文件中的$_REQUEST['act'] = 'done'  这里面是用来处理订单的最后一步,(具体怎么知道的可以看url后的参数列表),对应手机端处理订单的的文件为 mobile/order.php 文件,这里同样有一个$_REQUEST['act'] = 'done',对比里面的代码发现order.php相比flow.php 缺少了一段处理虚拟商品的代码找到ecshop官方的flow.php文件中大约1677行有一个注释
/*/* 如果使用库存,且下订单时减库存,则减少库存 */*/下面的if判断语句还是相同
这句话上面还有一段代码(如下),在手机端不存在,具体功能(追到函数里这段是说:设置红包已经使用,和我们现在需求的功能无关)

if ($order['bonus_id'] > 0 && $temp_amout > 0)
    {
        use_bonus($order['bonus_id'], $new_order_id);
    }

下面还有两端代码是手机端没有的

/* 给商家发邮件 ----- 这段或许可以不要,我没有测试 */
    /* 增加是否给客服发送邮件选项 */
    if ($_CFG['send_service_email'] && $_CFG['service_email'] != '')
    {
        $tpl = get_mail_template('remind_of_new_order');
        $smarty->assign('order', $order);
        $smarty->assign('goods_list', $cart_goods);
        $smarty->assign('shop_name', $_CFG['shop_name']);
        $smarty->assign('send_date', date($_CFG['time_format']));
        $content = $smarty->fetch('str:' . $tpl['template_content']);
        send_mail($_CFG['shop_name'], $_CFG['service_email'], $tpl['template_subject'], $content, $tpl['is_html']);
    }

    /* 如果需要,发短信  -----  这段也是没有的,应该也不需要*/
    if ($_CFG['sms_order_placed'] == '1' && $_CFG['sms_shop_mobile'] != '')
    {
        include_once('includes/cls_sms.php');
        $sms = new sms();
        $msg = $order['pay_status'] == PS_UNPAYED ?
            $_LANG['order_placed_sms'] : $_LANG['order_placed_sms'] . '[' . $_LANG['sms_paid'] . ']';
        $sms->send($_CFG['sms_shop_mobile'], sprintf($msg, $order['consignee'], $order['tel']),'', 13,1);
    }

下面的关键的代码 ----- 是关系到我们现在的功能是不是能用
virtual_goods_ship($virtual_goods,$msg, $order['order_sn'], true)这个函数里面会有一个smarty的assign方法就是这里将虚拟商品的卡号密码等信息发送到页面中,并处理发货状态等,有兴趣的童鞋可以进 去看看,

/* 如果订单金额为0 处理虚拟卡 */
    if ($order['order_amount'] <= 0)
    {
        $sql = "SELECT goods_id, goods_name, goods_number AS num FROM ".
               $GLOBALS['ecs']->table('cart') .
                " WHERE is_real = 0 AND extension_code = 'virtual_card'".
                " AND session_id = '".SESS_ID."' AND rec_type = '$flow_type'";

        $res = $GLOBALS['db']->getAll($sql);

        $virtual_goods = array();
        foreach ($res AS $row)
        {
            $virtual_goods['virtual_card'][] = array('goods_id' => $row['goods_id'], 'goods_name' => $row['goods_name'], 'num' => $row['num']);
        }

        if ($virtual_goods AND $flow_type != CART_GROUP_BUY_GOODS)
        {
            /* 虚拟卡发货 */
            if (virtual_goods_ship($virtual_goods,$msg, $order['order_sn'], true))
            {
                /* 如果没有实体商品,修改发货状态,送积分和红包 */
                $sql = "SELECT COUNT(*)" .
                        " FROM " . $ecs->table('order_goods') .
                        " WHERE order_id = '$order[order_id]' " .
                        " AND is_real = 1";
                if ($db->getOne($sql) <= 0)
                {
                    /* 修改订单状态 */
                    update_order($order['order_id'], array('shipping_status' => SS_SHIPPED, 'shipping_time' => gmtime()));

                    /* 如果订单用户不为空,计算积分,并发给用户;发红包 */
                    if ($order['user_id'] > 0)
                    {
                        /* 取得用户信息 */
                        $user = user_info($order['user_id']);

                        /* 计算并发放积分 */
                        $integral = integral_to_give($order);
                        log_account_change($order['user_id'], 0, 0, intval($integral['rank_points']), intval($integral['custom_points']), sprintf($_LANG['order_gift_integral'], $order['order_sn']));

                        /* 发放红包 */
                        send_order_bonus($order['order_id']);
                    }
                }
            }
        }
    }

这里的代码添加上以后变量已经发送到页面中了,在手机模版收是order_done.dwt文件来显示最后一步的,这里和pc端的flow.dwt里全是判断的思路不太一样,找到flow.dwt文件中显示虚拟商品信息的那段代码如下(其实可以自己找找)

<!--{if $virtual_card}-->
<div style="text-align:center;overflow:hidden;border:1px solid #E2C822;background:#FFF9D7;margin:10px;padding:10px 50px 30px;">
    <!--{foreach from=$virtual_card item=vgoods}-->
    <h3 style="color:#2359B1; font-size:12px;">{$vgoods.goods_name}</h3>
        <!--{foreach from=$vgoods.info item=card}-->
        <ul style="list-style:none;padding:0;margin:0;clear:both">
            <!--{if $card.card_sn}-->
            <li style="margin-right:50px;float:left;"> <strong>卡号:</strong><span style="color:red;">{$card.card_sn}</span> </li>
            <!--{/if}-->
            <!--{if $card.card_password}-->
            <li style="margin-right:50px;float:left;"> <strong>密码:</strong><span style="color:red;">{$card.card_password}</span> </li>
            <!--{/if}-->
            <!--{if $card.end_date}-->
            <li style="float:left;"> <strong>截止日期:</strong>{$card.end_date} </li>
            <!--{/if}-->
        </ul>
        <!--{/foreach}-->
    <!--{/foreach}-->
</div>
<!--{/if}-->

放到order_done.dwt里一个合适的位置,到此这个功能大概就完成了
但是我目前为止没有的是支付宝付款是不是能自动的返回这些卡号密码,我都是用余额支付的,如有不正确的地方,请不吝指正

转载于:https://www.cnblogs.com/azhw/p/4379076.html

相关文章:

  • C++ 指针悬挂和赋值操作符的重载,拷贝构造函数实现
  • WCF-终结点之消息路由示例
  • Android学习笔记(四六):互联网通信-文件下载
  • 封装WebService的APM为Async、Await模式利于Asp.Net页面调用
  • Solr入门之SolrServer实例化方式
  • matlab mex 小o -o 出错
  • linux下的权限控制
  • java项目在linux上的运行
  • Dev的WPF控件与VS2012不兼容问题
  • [转]ARM Linux 3.x Device Tree Usage
  • AutoFac使用方法总结
  • malloc/free和new/delete的异同
  • java 下载spring的方法
  • Delphi项目构成之窗体文件(Form Files).DFM
  • quartz定时任务框架调度机制解析
  • php的引用
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • Hexo+码云+git快速搭建免费的静态Blog
  • javascript 总结(常用工具类的封装)
  • JavaScript设计模式与开发实践系列之策略模式
  • Java方法详解
  • Linux gpio口使用方法
  • Selenium实战教程系列(二)---元素定位
  • 分类模型——Logistics Regression
  • 关于extract.autodesk.io的一些说明
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 通过调用文摘列表API获取文摘
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (+4)2.2UML建模图
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (办公)springboot配置aop处理请求.
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (附源码)计算机毕业设计大学生兼职系统
  • (接口封装)
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (十)T检验-第一部分
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .net 简单实现MD5
  • .NET 设计模式初探
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • .net中应用SQL缓存(实例使用)
  • /var/log/cvslog 太大
  • @Documented注解的作用
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...
  • @reference注解_Dubbo配置参考手册之dubbo:reference
  • @RequestBody与@ResponseBody的使用
  • [ACTF2020 新生赛]Upload 1
  • [docker]docker网络-直接路由模式
  • [flume$2]记录一个写自定义Flume拦截器遇到的错误
  • [hdu 1247]Hat’s Words [Trie 图]
  • [HTML]Web前端开发技术30(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页