关于帝国的内置商城常见问题
笔记 by ecms 2017-04-09 19:38:03

1、订单金额为负数

如果购买金额为1.99,优惠券的金额为3,那么在使用优惠券的时候,帝国默认是存入1.99  和 3,那么 购买金额则为 1.99 - 3 = - 1.01 ,这个时候就会造成负金额订单,处理加入订单的逻辑,使之如果减掉优惠券以后的金额小于0,那么优惠金额 等同于 购买金额

修改几个地方,将所有涉及到金额的部分,作保留两位小数处理:

PHP Code复制内容到剪贴板
  1. $price = number_format($price,2);  

增加订单function:

/e/ShopSys/class/

PHP Code复制内容到剪贴板
  1. function AddDd($add){  
//支付金额
$buyallfen=$alltotalfen+$pr['price'];
$buyallmoney = $alltotal+$pr['price']+$fptotal-$pretotal;
$buyallmoney = number_format($buyallmoney,2);

//如果支付金额为负,那么优惠金额 等于 购买金额,金额处理为0
if($buyallmoney < 0)
{
$pretotal = $alltotal;
$buyallmoney = 0;
}

 

/e/payapi/payfun.php

PHP Code复制内容到剪贴板
  1. //商城订单金额  
  2. function PayApiShopDdMoney($ddid){  
$r['tmoney'] = $r['alltotal']+$r['pstotal']+$r['fptotal']-$r['pretotal'];
$r['tmoney'] = number_format($r['tmoney'],2);
return $r;

 


 

2、新增发送邮件通知函数:

传$dd的数组,和订单ID,这里还要传一个数组,是因为之前的函数中应该已经对订单表查询过了,这里就不再重复查询

PHP Code复制内容到剪贴板
  1. /** 
  2.  * @param array $dd 
  3.  * @param $ddid 
  4.  * @return bool 
  5.  */  
  6. function sendMail($dd = array(),$ddid){  
  7.    global $dbtbpre,$empire;  
  8.    require(ECMS_PATH.'e/class/SendEmail.inc.php');  
  9.    $email = array('398927951@qq.com','xxxx@qq.com');  
  10.    $addr=$empire->fetch1("select buycar,bz from {$dbtbpre}enewsshopdd_add where ddid='$ddid' limit 1");  
  11.    $buycar = $addr['buycar'];  
  12.    $beizhu = $addr['bz'];  
  13.    $payby=$dd['payby'];  
  14.    $shop = '';  
  15.    $record="!";  
  16.    $field="|";  
  17.    $totalmoney=0;  
  18.    $totalfen=0;  
  19.    $buycarr=explode($record,$buycar);  
  20.    $bcount=count($buycarr);  
  21.    $j=0;  
  22.    for($i=0;$i<$bcount-1;$i++) {  
  23.       $j++;  
  24.       $pr = explode($field$buycarr[$i]);  
  25.       $productid = $pr[1];  
  26.       $fr = explode(","$pr[1]);  
  27.       //ID  
  28.       $classid = (int)$fr[0];  
  29.       $id = (int)$fr[1];  
  30.       //属性  
  31.       $addatt = '';  
  32.       if ($pr[2]) {  
  33.          $addatt = $pr[2];  
  34.       }  
  35.       //数量  
  36.       $pnum = (int)$pr[3];  
  37.       if ($pnum < 1) {  
  38.          $pnum = 1;  
  39.       }  
  40.       //单价  
  41.       $price = $pr[4];  
  42.       $thistotal = $price * $pnum;  
  43.       $buyfen = $pr[5];  
  44.       $thistotalfen = $buyfen * $pnum;  
  45.       if ($payby == 1) {  
  46.          $showprice = $buyfen . " 点";  
  47.          $showthistotal = $thistotalfen . " 点";  
  48.       } else {  
  49.          $showprice = $price;  
  50.          $showthistotal = $thistotal;  
  51.       }  
  52.       //产品名称  
  53.       $title = stripSlashes($pr[6]);  
  54.       //返回链接  
  55.       $titleurl = "../../public/InfoUrl/?classid=$classid&id=$id";  
  56.       $totalmoney += $thistotal;  
  57.       $totalfen += $thistotalfen;  
  58.       $add = $addatt?' - '.$addatt:'';  
  59.       $shop .= $title.$add.'('.$showprice.' * '.$pnum.')= '.$showthistotal.'<br>';  
  60.    }  
  61.   
  62.    $title = '您有新的水果订单,订单ID:'.$ddid;  
  63.    $text = '订单ID:'.$ddid.'<br>';  
  64.    $text .= '订单号:'.$dd['ddno'].'<br>';  
  65.    $text .= '下单时间:'.$dd['ddtime'].'<br>';  
  66.    $text .= '真实姓名:'.$dd['truename'].'<br>';  
  67.    $text .= '移动电话:'.$dd['phone'].'<br>';  
  68.    $text .= '固定电话:'.$dd['mycall'].'<br>';  
  69.    $text .= '发货地址:'.$dd['address'].'<br>';  
  70.    $text .= '指定送货时间:'.$dd['besttime'].'<br>';  
  71.    $text .= '订单金额:'.$dd['alltotal'].'<br>';  
  72.    $text .= '优惠金额 :'.$dd['pretotal'].'<br>';  
  73.    $text .= '实付金额 :'.number_format($dd['alltotal']-$dd['pretotal'],2).'<br>';  
  74.    $text .= '备注:'.$beizhu.'<br>';  
  75.    $text .= "商品清单:<br><br>";  
  76.    $text .= $shop;  
  77.    $text .= "<br>订单号若重复,请忽略此邮件!";  
  78.      
  79.    $sm = EcmsToSendMail($email,$title,$text);  
  80.    if(!$sm){  
  81.       EcmsToSendMail($email,$title,$text);  
  82.    };  
  83.    return true;  
  84. }  

 


 

3、关于同一个订单号发送支付请求时,由于修改了价格,支付端返回错误:商户订单号重复,在发起未支付继续支付的请求时,同时改变订单号即可:

/e/ShopSys/class/ShopSysFun.php

//未付款的继续支付

function ShopDdToPay($ddid){

PHP Code复制内容到剪贴板
  1. /* 重新生成订单号并更新入库,更新失败提示信息 */  
  2.     $new_ddno = ShopSys_ReturnDdNo();  
  3.     $new_ddno = RepPostVar($new_ddno);  
  4.     $res = $empire->query("update {$dbtbpre}enewsshopdd set `ddno`='{$new_ddno}' where `ddid`=$ddid");  
  5.     if(!$res){  
  6.         printerror2('重新发起支付操作失败,请联系管理员',"history.go(-1)");  
  7.     };  
  8. /* 修改完毕 */  
  9.   
  10.     //支付方式  
  11.     $payr=$empire->fetch1("select payid,payurl from {$dbtbpre}enewsshoppayfs where payid='$r[payfsid]' and isclose=0");  
  12.     if(!$payr['payid']||!$payr['payurl'])  
  13.     {  
  14.         printerror("NotPayfsid","history.go(-1)",1);  
  15.     }  

 

4、 关于获取不到cookie中的payphome操作

e/payapi/BuyGroupPay.php :

PHP Code复制内容到剪贴板
  1. esetcookie("payphome","BuyGroupPay",0);  
  2. esetcookie("paymoneybgid",$id,0);  
  3.   
  4. $payphome = getcvar("payphome");  
  5. if(!$payphome) {  
  6.     $payphome = "BuyGroupPay";  
  7.     $paymoneybgid = $id;  
  8. }  

 

e/payapi/ShopPay.php:

PHP Code复制内容到剪贴板
  1. esetcookie("payphome","ShopPay",0);  
  2. $payphome = getcvar("payphome");  
  3. if(!$payphome) {  
  4.     $payphome = "ShopPay";  
  5. }  

 

e/payapi/pay.php:

PHP Code复制内容到剪贴板
  1. esetcookie("payphome",$phome,0);  
  2. $payphome = getcvar("payphome");  
  3. if(!$payphome) {  
  4.     $payphome = $phome;  
  5. }  

 

 

本文来自于:http://www.yoyo88.cn/note/note1/96.html

Powered by yoyo苏ICP备15045725号