在ecshop官方模版手機端的虛擬商品購買后不能像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);
}
下面還有兩端代碼是手機wap網站端沒有的
/* 給商家發郵件 ----- 這段或許可以不要,我沒有測試 */
/* 增加是否給客服發送郵件選項 */
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']));
/* 發放紅包 by down.vevb.com/info */
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里一個合適的位置,到此這個功能大概就完成了
但是目前為止沒有的是支付寶付款是不是能自動的返回這些卡號密碼,都是用余額支付的
新聞熱點
疑難解答