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

ecshop开发日志之手机端虚拟商品自动发货的更多相关文章

  1. ecshop开发日志之虚拟商品发送邮件通知

    购买虚拟商品,系统会在支付后自动发送邮件到用户填写的邮件地址中,追踪过程如下首先在订单列表中可以获得到处理订单的php文件为flow.php,之后在最后一步url地址显示为http://localho ...

  2. ECSHOP农行支付接口开发(含手机端)

    对于ECSHOP来说,支付是以接口的形式存在的.于是: 1:首先添加接口文件 includes\modules\payment下,增加abcbank.php,代码如下: <?php /** * ...

  3. delphi xe5 android 开发数据访问手机端(一)

    上几片文章我们把供手机端调用的web服务完成,接下来实现手机端调用webservices获取数据 1.新建firemonkey mobile application 2.选择blank applica ...

  4. ecshop开发日志之支付插件开发

    ecshop开发一个支付插件的方法(例如要新建一个为paytest-----支付测试)1.languages/zh_cn/payment/目录下新建一个paytest.php文件  内容如下: < ...

  5. XE5 Android 开发数据访问手机端[转]

    把供手机端调用的web服务完成,接下来实现手机端调用webservices获取数据 1.新建firemonkey mobile application 2.选择blank application 3. ...

  6. XE5 Android 开发数据访问手机端 解决乱码的办法

    经过测试,将sqlserver里的字段由varchar 或者char  改为  nvarchar 或者nchar 然后在手机端的clientdataset 增加字段的时候数据类型选择widestrin ...

  7. delphi xe5 android 开发数据访问手机端 解决乱码的办法

    经过测试,将sqlserver里的字段由varchar 或者char  改为  nvarchar 或者nchar 然后在手机端的clientdataset 增加字段的时候数据类型选择widestrin ...

  8. XE5 Android 开发数据访问手机端 解决乱码的办法 [转]

    经过测试,将sqlserver里的字段由varchar 或者char  改为  nvarchar 或者nchar 然后在手机端的clientdataset 增加字段的时候数据类型选择widestrin ...

  9. delphi xe5 android 开发数据访问手机端(二)

    界面就这样吧,继续...,先启动咱们上几片文章建立的手机服务端 导入webservices单元,file->new->other->webservices->选择 wsdlim ...

随机推荐

  1. rem详解

    rem这是个低调的css单位,近一两年开始崭露头角,有许多同学对rem的评价不一,有的在尝试使用,有的在使用过程中遇到坑就弃用了.但是我对rem综合评价是用来做web app它绝对是最合适的人选之一. ...

  2. java SecurityManager

    ---- 众所周知,Java语言具有完善的安全框架,从编程语言,编译器.解释程序到Java虚拟机,都能确保Java系统不被无效的代码或敌对的编译器暗中破坏,基本上,它们保证了Java代码按预定的规则运 ...

  3. 字符串对比.net String.EndsWith方法 (String)

    string str="web/abc.aspx"; if(str.EndsWith("abc.aspx")) { 此方法将 value 与位于此实例末尾.与 ...

  4. JavaScript Set Cursor Style

    <!DOCTYPE html> <html> <head> <meta charset="ISO-8859-1"> <titl ...

  5. AfxSocketInit()

    作用:初始化Windows套接字 原型:BOOL AfxSocketInit(WSADATA* lpwsaData = NULL ); 参数:lpwsaData 指向WSADATA结构的指针.    ...

  6. DRBD脑裂解决方法

    1.查看主服务器 [root@master ~]# /etc/init.d/drbd status drbd driver loaded OK; device status: version: (ap ...

  7. 判断mysqli函数里的sql语句是否有错和影响行数

    <?php $mysqli=@new mysqli("localhost", "root", "123456", "xsph ...

  8. python 初学笔记 (一)

    初学python第一天,希望自己真正了解计算机语言,并且做出成效. 写下学习笔记,记录学习进度,娱乐学习,不断成长. python详细介绍: python是什么?运用到哪里?有哪些在使用它? pyth ...

  9. 稀疏图(邻接链表),并查集,最短路径(Dijkstra,spfa),最小生成树(kruskal,prim)

    全部函数通过杭电 1142,1162,1198,1213等题目测试. #include<iostream> #include<vector> #include<queue ...

  10. OpenGL ES 三种类型 uniform attribute varying

    1.uniform变量 uniform变量是外部application程序传递给(vertex和fragment)shader的变量.因此它是application通过函数glUniform**()函 ...