提交 63e67aa0 编写于 作者: D devil_gong

运费应用

上级 85002e5b
...@@ -66,6 +66,7 @@ ...@@ -66,6 +66,7 @@
<th class="am-hide-sm-only">快递信息</th> <th class="am-hide-sm-only">快递信息</th>
<th>订单状态</th> <th>订单状态</th>
<th>订单金额(元)</th> <th>订单金额(元)</th>
<th>扩展数据</th>
<th>更多</th> <th>更多</th>
<th>操作</th> <th>操作</th>
</tr> </tr>
...@@ -127,10 +128,21 @@ ...@@ -127,10 +128,21 @@
</td> </td>
<td> <td>
金额:{{$v.price}}<br /> 金额:{{$v.price}}<br />
增加:{{$v.increase_price}}<br />
优惠:{{$v.preferential_price}}<br /> 优惠:{{$v.preferential_price}}<br />
总价:{{$v.total_price}}<br /> 总价:{{$v.total_price}}<br />
支付:{{$v.pay_price}} 支付:{{$v.pay_price}}
</td> </td>
<td>
{{if empty($v['extension_data'])}}
<span class="cr-ddd"></span>
{{else /}}
{{foreach $v.extension_data as $extk=>$ext}}
{{if $extk gt 0}}<br />{{/if}}
{{$ext.name}} [{{$ext.tips}}]
{{/foreach}}
{{/if}}
</td>
<td> <td>
<span class="am-icon-caret-down c-p" data-am-modal="{target: '#my-popup{{$v.id}}'}"> 查看更多</span> <span class="am-icon-caret-down c-p" data-am-modal="{target: '#my-popup{{$v.id}}'}"> 查看更多</span>
<div class="am-popup am-radius" id="my-popup{{$v.id}}"> <div class="am-popup am-radius" id="my-popup{{$v.id}}">
...@@ -209,12 +221,25 @@ ...@@ -209,12 +221,25 @@
<span class="cr-ddd">未填写</span> <span class="cr-ddd">未填写</span>
{{else /}} {{else /}}
金额:{{$v.price}}<br /> 金额:{{$v.price}}<br />
增加:{{$v.increase_price}}<br />
优惠:{{$v.preferential_price}}<br /> 优惠:{{$v.preferential_price}}<br />
总价:{{$v.total_price}}<br /> 总价:{{$v.total_price}}<br />
支付:{{$v.pay_price}} 支付:{{$v.pay_price}}
{{/if}} {{/if}}
</dd> </dd>
<dt>扩展数据</dt>
<dd>
{{if empty($v['extension_data'])}}
<span class="cr-ddd"></span>
{{else /}}
{{foreach $v.extension_data as $extk=>$ext}}
{{if $extk gt 0}}<br />{{/if}}
{{$ext.name}} [{{$ext.tips}}]
{{/foreach}}
{{/if}}
</dd>
<dt>确认时间</dt> <dt>确认时间</dt>
<dd>{{if empty($v['confirm_time'])}}<span class="cr-ddd">未填写</span>{{else /}}{{$v.confirm_time}}{{/if}}</dd> <dd>{{if empty($v['confirm_time'])}}<span class="cr-ddd">未填写</span>{{else /}}{{$v.confirm_time}}{{/if}}</dd>
......
...@@ -117,6 +117,10 @@ class Goods extends Common ...@@ -117,6 +117,10 @@ class Goods extends Common
{ {
// 开始处理 // 开始处理
$params = $this->data_post; $params = $this->data_post;
if(isset($_POST['spec']))
{
$params['spec'] = $_POST['spec'];
}
return GoodsService::GoodsSpecType($params); return GoodsService::GoodsSpecType($params);
} }
...@@ -132,6 +136,10 @@ class Goods extends Common ...@@ -132,6 +136,10 @@ class Goods extends Common
{ {
// 开始处理 // 开始处理
$params = $this->data_post; $params = $this->data_post;
if(isset($_POST['spec']))
{
$params['spec'] = $_POST['spec'];
}
return GoodsService::GoodsSpecDetail($params); return GoodsService::GoodsSpecDetail($params);
} }
......
...@@ -91,15 +91,16 @@ class User extends Common ...@@ -91,15 +91,16 @@ class User extends Common
} }
// 授权 // 授权
$result = (new \base\AlipayAuth())->GetAlipayUserInfo($this->data_post['authcode'], MyC('common_app_mini_alipay_appid')); $ret = (new \base\AlipayAuth())->GetAlipayUserInfo($this->data_post['authcode'], MyC('common_app_mini_alipay_appid'));
if($result === false) if($ret['status'] != 0)
{ {
return DataReturn('获取授权信息失败', -10); return DataReturn($ret['msg'], -10);
} else { } else {
$result['gender'] = empty($result['gender']) ? 0 : ($result['gender'] == 'm') ? 2 : 1; $data = $ret['data'];
$result['openid'] = $result['user_id']; $data['gender'] = empty($data['gender']) ? 0 : ($data['gender'] == 'm') ? 2 : 1;
$result['referrer']= isset($this->data_post['referrer']) ? intval($this->data_post['referrer']) : 0; $data['openid'] = $data['user_id'];
return UserService::AuthUserProgram($result, 'alipay_openid'); $data['referrer']= isset($this->data_post['referrer']) ? intval($this->data_post['referrer']) : 0;
return UserService::AuthUserProgram($data, 'alipay_openid');
} }
} }
......
...@@ -51,7 +51,7 @@ class Cart extends Common ...@@ -51,7 +51,7 @@ class Cart extends Common
$base = [ $base = [
'total_price' => empty($cart_list['data']) ? 0 : array_sum(array_column($cart_list['data'], 'total_price')), 'total_price' => empty($cart_list['data']) ? 0 : array_sum(array_column($cart_list['data'], 'total_price')),
'total_stock' => empty($cart_list['data']) ? 0 : array_sum(array_column($cart_list['data'], 'stock')), 'buy_count' => empty($cart_list['data']) ? 0 : array_sum(array_column($cart_list['data'], 'stock')),
'ids' => empty($cart_list['data']) ? '' : implode(',', array_column($cart_list['data'], 'id')), 'ids' => empty($cart_list['data']) ? '' : implode(',', array_column($cart_list['data'], 'id')),
]; ];
$this->assign('base', $base); $this->assign('base', $base);
......
...@@ -153,6 +153,13 @@ ...@@ -153,6 +153,13 @@
<div class="table-no"><i class="am-icon-warning"></i> 没有商品</div> <div class="table-no"><i class="am-icon-warning"></i> 没有商品</div>
{{/if}} {{/if}}
<!-- 含运费小计 -->
<div class="buy-point-discharge">
<p>
合计 <span>¥</span><em class="pay-sum">{{$base.total_price}}</em>
</p>
</div>
<!-- 留言 --> <!-- 留言 -->
<div class="buy-message"> <div class="buy-message">
<div class="order-extra"> <div class="order-extra">
...@@ -165,12 +172,17 @@ ...@@ -165,12 +172,17 @@
</div> </div>
</div> </div>
<!-- 含运费小计 --> <!-- 扩展展示数据 -->
<div class="buy-point-discharge"> {{if !empty($extension_data)}}
<p> <ul class="buy-extension-data">
合计(含运费) <span>¥</span><em class="pay-sum">{{$base.total_price}}</em> {{foreach $extension_data as $ext}}
</p> <li>
</div> <span class="extension-items-name">{{$ext.name}}</span>
<span class="am-fr extension-items-tips">{{$ext.tips}}</span>
</li>
{{/foreach}}
</ul>
{{/if}}
<!-- 信息 --> <!-- 信息 -->
<div class="order-nav"> <div class="order-nav">
...@@ -180,7 +192,7 @@ ...@@ -180,7 +192,7 @@
<em>实付款:</em> <em>实付款:</em>
<span class="price"> <span class="price">
<span>¥</span> <span>¥</span>
<em class="nav-total-price">{{$base.total_price}}</em> <em class="nav-total-price">{{$base.actual_price}}</em>
</span> </span>
</div> </div>
......
...@@ -296,6 +296,17 @@ ...@@ -296,6 +296,17 @@
</table> </table>
</div> </div>
{{if !empty($data['extension_data'])}}
<div class="am-alert am-alert-warning">
{{foreach $data.extension_data as $ertk=>$ext}}
<div class="items">
<div class="items-title am-fl">{{$ext.name}}:</div>
<div class="items-detail am-fl">{{$ext.tips}}</div>
</div>
{{/foreach}}
</div>
{{/if}}
<div class="am-alert am-alert-secondary"> <div class="am-alert am-alert-secondary">
{{if !empty($data.price)}} {{if !empty($data.price)}}
<div class="items"> <div class="items">
...@@ -303,6 +314,12 @@ ...@@ -303,6 +314,12 @@
<div class="items-detail am-fl">¥{{$data.price}}</div> <div class="items-detail am-fl">¥{{$data.price}}</div>
</div> </div>
{{/if}} {{/if}}
{{if !empty($data.increase_price)}}
<div class="items">
<div class="items-title am-fl">增加金额:</div>
<div class="items-detail am-fl">+¥{{$data.increase_price}}</div>
</div>
{{/if}}
{{if !empty($data.preferential_price)}} {{if !empty($data.preferential_price)}}
<div class="items"> <div class="items">
<div class="items-title am-fl">优惠金额:</div> <div class="items-title am-fl">优惠金额:</div>
......
<?php <?php
// +----------------------------------------------------------------------
// | ShopXO 国内领先企业级B2C免费开源电商系统
// +----------------------------------------------------------------------
// | Copyright (c) 2011~2019 http://shopxo.net All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: Devil
// +----------------------------------------------------------------------
namespace app\plugins\freightfee; namespace app\plugins\freightfee;
use think\Controller; use app\service\PluginsService;
/** /**
* 运费设置 - 钩子入口 * 运费设置 - 钩子入口
...@@ -10,25 +19,203 @@ use think\Controller; ...@@ -10,25 +19,203 @@ use think\Controller;
* @version 0.0.1 * @version 0.0.1
* @datetime 2016-12-01T21:51:08+0800 * @datetime 2016-12-01T21:51:08+0800
*/ */
class Hook extends Controller class Hook
{ {
// 应用响应入口 /**
* 应用响应入口
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2019-02-09T14:25:44+0800
* @param [array] $params [输入参数]
*/
public function run($params = []) public function run($params = [])
{ {
// 是否控制器钩子 if(!empty($params['hook_name']))
// is_backend 当前为后端业务处理
// hook_name 钩子名称
if(isset($params['is_backend']) && $params['is_backend'] === true && !empty($params['hook_name']))
{ {
// 参数一 描述 switch($params['hook_name'])
// 参数二 0 为处理成功, 负数为失败 {
// 参数三 返回数据 // 运费计算
return DataReturn('返回描述', 0); case 'plugins_service_buy_handle' :
$ret = $this->FreightFeeCalculate($params);
break;
// 默认返回视图 default :
$ret = '';
}
return $ret;
}
}
/**
* 运费计算
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2019-03-21
* @desc description
* @param [array] $params [输入参数]
*/
public function FreightFeeCalculate($params = [])
{
$ret = PluginsService::PluginsData('freightfee');
if($ret['code'] == 0)
{
// 是否设置运费数据
if(!empty($ret['data']['data'][0]))
{
// 规则
$rules = $this->RulesHandle($ret['data']['data'], $params['data']['base']['address']);
// 计费方式
if(!empty($rules))
{
$price = 0;
switch($ret['data']['valuation'])
{
// 按件
case 0 :
$price = $this->PieceCalculate($rules, $params['data']);
break;
// 按量
case 1 :
$price = $this->QuantityCalculate($rules, $params['data']);
break;
}
// 扩展展示数据
$show_name = empty($ret['data']['show_name']) ? '运费' : $ret['data']['show_name'];
$params['data']['extension_data'][] = [
'name' => $show_name,
'price' => $price,
'type' => 0,
'tips' => '+¥'.$price.'元',
];
// 金额
$params['data']['base']['increase_price'] += $price;
$params['data']['base']['actual_price'] += $price;
}
return DataReturn('处理成功', 0);
}
return DataReturn('无需处理', 0);
} else { } else {
return 'hello world!'; return $ret['msg'];
}
}
/**
* 按重计费
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2019-03-21
* @desc description
* @param [array] $rules [规则]
* @param [array] $buy [生成订单数据]
*/
public function QuantityCalculate($rules, $buy)
{
$price = 0;
if($rules['first_price'] > 0 && $buy['base']['spec_weight_total'] >= $rules['first'])
{
$price = $rules['first_price'];
}
if($rules['continue_price'] > 0 && $buy['base']['spec_weight_total'] >= $rules['continue']+$rules['first'])
{
$number = ($buy['base']['spec_weight_total']-$rules['first'])/$rules['continue'];
if($number > 0)
{
$price += round($rules['continue_price']*$number);
}
}
return $price;
}
/**
* 按件计费
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2019-03-21
* @desc description
* @param [array] $rules [规则]
* @param [array] $buy [生成订单数据]
*/
public function PieceCalculate($rules, $buy)
{
$price = 0;
if($rules['first_price'] > 0 && $buy['base']['buy_count'] >= $rules['first'])
{
$price = $rules['first_price'];
}
if($rules['continue_price'] > 0 && $buy['base']['buy_count'] >= $rules['continue']+$rules['first'])
{
$number = round(($buy['base']['buy_count']-$rules['first'])/$rules['continue']);
if($number > 0)
{
$price += round($rules['continue_price']*$number);
}
}
return $price;
}
/**
* 运费规则匹配
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2019-03-21
* @desc description
* @param [array] $rules [运费规则列表]
* @param [array] $address [用户地址]
*/
public function RulesHandle($rules, $address)
{
if(count($rules) > 1 && !empty($address))
{
$data = [
'province' => ['rules' => [], 'number' => 0],
'city' => ['rules' => [], 'number' => 0],
];
foreach($rules as $k=>$v)
{
if($k != 0)
{
$region = explode('-', $v['region']);
if(!empty($region))
{
if(in_array($address['province'], $region))
{
$data['province']['rules'] = $v;
$data['province']['number']++;
}
if(in_array($address['city'], $region))
{
$data['city']['rules'] = $v;
$data['city']['number']++;
}
}
}
}
if($data['city']['number'] > 0)
{
if($data['province']['number'] > $data['city']['number'])
{
return $data['province']['rules'];
}
return $data['city']['rules'];
} else {
if($data['province']['number'] > 0)
{
return $data['province']['rules'];
}
}
} }
return $rules[0];
} }
} }
?> ?>
\ No newline at end of file
...@@ -21,6 +21,8 @@ ...@@ -21,6 +21,8 @@
"is_home":false "is_home":false
}, },
"hook":{ "hook":{
"plugins_service_buy_handle":[
"app\\plugins\\freightfee\\Hook"
]
} }
} }
\ No newline at end of file
...@@ -25,11 +25,12 @@ use app\service\UserService; ...@@ -25,11 +25,12 @@ use app\service\UserService;
class Hook extends Controller class Hook extends Controller
{ {
/** /**
* 钩子入口 * 应用响应入口
* @author Guoguo * @author Devil
* @blog http://gadmin.cojz8.com * @blog http://gong.gg/
* @version 1.0.0 * @version 1.0.0
* @datetime 2019年3月14日 * @datetime 2019-02-09T14:25:44+0800
* @param [array] $params [输入参数]
*/ */
public function run($params = []) public function run($params = [])
{ {
......
...@@ -9,6 +9,17 @@ ...@@ -9,6 +9,17 @@
</legend> </legend>
<div class="freightfee-content"> <div class="freightfee-content">
<div class="items">
<label>展示名称</label>
<div>
{{if empty($data['show_name'])}}
运费
{{else /}}
{{$data.show_name}}
{{/if}}
</div>
</div>
<div class="items"> <div class="items">
<label>计价方式</label> <label>计价方式</label>
<div> <div>
......
...@@ -10,6 +10,11 @@ ...@@ -10,6 +10,11 @@
<a href="{{:PluginsAdminUrl('freightfee', 'admin', 'index')}}" class="fr fs-14 m-t-5 am-icon-mail-reply"> 返回</a> <a href="{{:PluginsAdminUrl('freightfee', 'admin', 'index')}}" class="fr fs-14 m-t-5 am-icon-mail-reply"> 返回</a>
</legend> </legend>
<div class="business-form-block am-form-group">
<label>展示名称<span class="am-form-group-label-tips">默认 运费</span></label>
<input type="text" name="show_name" placeholder="展示名称" maxlength="16" data-validation-message="展示名称格式最多 16 个字符" class="am-radius" value="{{if !empty($data['show_name'])}}{{$data.show_name}}{{else /}}运费{{/if}}" />
</div>
<div class="business-form-block am-form-group"> <div class="business-form-block am-form-group">
<label>计价方式</label> <label>计价方式</label>
<div> <div>
...@@ -75,12 +80,12 @@ ...@@ -75,12 +80,12 @@
{{if $v['region'] eq 'default'}} {{if $v['region'] eq 'default'}}
<div class="region-td none"></div>默认运费 <div class="region-td none"></div>默认运费
<input type="text" class="am-radius region-name" name="data[{{$k}}][region]" data-validation-message="请选择地区" value="default" required /> <input type="text" class="am-radius region-name" name="data[{{$k}}][region]" data-validation-message="请选择地区" value="default" required />
<input type="hidden" class="am-radius region-name-show" name="data[{{$k}}][region_show]" value="{{$v.region}}" /> <input type="hidden" class="am-radius region-name-show" name="data[{{$k}}][region_show]" value="{{$v.region_show}}" />
{{else /}} {{else /}}
<div class="region-td">{{$v.region_names}}</div> <div class="region-td">{{$v.region_names}}</div>
<span class="fs-12 cr-blue c-p line-edit" data-index="{{$k}}">添加地区</span> <span class="fs-12 cr-blue c-p line-edit" data-index="{{$k}}">添加地区</span>
<input type="text" class="am-radius region-name" name="data[{{$k}}][region]" data-validation-message="请选择地区" value="{{$v.region}}" required /> <input type="text" class="am-radius region-name" name="data[{{$k}}][region]" data-validation-message="请选择地区" value="{{$v.region}}" required />
<input type="hidden" class="am-radius region-name-show" name="data[{{$k}}][region_show]" value="{{$v.region}}" /> <input type="hidden" class="am-radius region-name-show" name="data[{{$k}}][region_show]" value="{{$v.region_show}}" />
{{/if}} {{/if}}
</td> </td>
<td> <td>
...@@ -123,12 +128,12 @@ ...@@ -123,12 +128,12 @@
{{if $v['region'] eq 'default'}} {{if $v['region'] eq 'default'}}
<div class="region-td none"></div>默认运费 <div class="region-td none"></div>默认运费
<input type="text" class="am-radius region-name" name="data[{{$k}}][region]" data-validation-message="请选择地区" value="default" required /> <input type="text" class="am-radius region-name" name="data[{{$k}}][region]" data-validation-message="请选择地区" value="default" required />
<input type="hidden" class="am-radius region-name-show" name="data[{{$k}}][region_show]" value="{{$v.region}}" /> <input type="hidden" class="am-radius region-name-show" name="data[{{$k}}][region_show]" value="{{$v.region_show}}" />
{{else /}} {{else /}}
<div class="region-td">{{$v.region_names}}</div> <div class="region-td">{{$v.region_names}}</div>
<span class="fs-12 cr-blue c-p line-edit" data-index="{{$k}}">添加地区</span> <span class="fs-12 cr-blue c-p line-edit" data-index="{{$k}}">添加地区</span>
<input type="text" class="am-radius region-name" name="data[{{$k}}][region]" data-validation-message="请选择地区" value="{{$v.region}}" required /> <input type="text" class="am-radius region-name" name="data[{{$k}}][region]" data-validation-message="请选择地区" value="{{$v.region}}" required />
<input type="hidden" class="am-radius region-name-show" name="data[{{$k}}][region_show]" value="{{$v.region}}" /> <input type="hidden" class="am-radius region-name-show" name="data[{{$k}}][region_show]" value="{{$v.region_show}}" />
{{/if}} {{/if}}
</td> </td>
<td> <td>
......
...@@ -273,6 +273,17 @@ ...@@ -273,6 +273,17 @@
</table> </table>
</div> </div>
{{if !empty($data['extension_data'])}}
<div class="am-alert am-alert-warning">
{{foreach $data.extension_data as $ertk=>$ext}}
<div class="items">
<div class="items-title am-fl">{{$ext.name}}:</div>
<div class="items-detail am-fl">{{$ext.tips}}</div>
</div>
{{/foreach}}
</div>
{{/if}}
<div class="am-alert am-alert-secondary"> <div class="am-alert am-alert-secondary">
{{if !empty($data.price)}} {{if !empty($data.price)}}
<div class="items"> <div class="items">
...@@ -280,6 +291,12 @@ ...@@ -280,6 +291,12 @@
<div class="items-detail am-fl">¥{{$data.price}}</div> <div class="items-detail am-fl">¥{{$data.price}}</div>
</div> </div>
{{/if}} {{/if}}
{{if !empty($data.increase_price)}}
<div class="items">
<div class="items-title am-fl">增加金额:</div>
<div class="items-detail am-fl">+¥{{$data.increase_price}}</div>
</div>
{{/if}}
{{if !empty($data.preferential_price)}} {{if !empty($data.preferential_price)}}
<div class="items"> <div class="items">
<div class="items-title am-fl">优惠金额:</div> <div class="items-title am-fl">优惠金额:</div>
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
namespace app\service; namespace app\service;
use think\Db; use think\Db;
use think\facade\Hook;
use app\service\GoodsService; use app\service\GoodsService;
use app\service\UserService; use app\service\UserService;
use app\service\ResourcesService; use app\service\ResourcesService;
...@@ -529,10 +530,29 @@ class BuyService ...@@ -529,10 +530,29 @@ class BuyService
// 商品/基础信息 // 商品/基础信息
$total_price = empty($goods) ? 0 : array_sum(array_column($goods, 'total_price')); $total_price = empty($goods) ? 0 : array_sum(array_column($goods, 'total_price'));
$base = [ $base = [
'total_price' => $total_price, // 总价
'actual_price' => $total_price, 'total_price' => $total_price,
'total_stock' => empty($goods) ? 0 : array_sum(array_column($goods, 'stock')),
'address' => empty($address['data']) ? null : $address['data'], // 订单实际支付金额(已减去优惠金额, 已加上增加金额)
'actual_price' => $total_price,
// 优惠金额
'preferential_price' => 0.00,
// 增加金额
'increase_price' => 0.00,
// 商品数量
'goods_count' => count($goods),
// 规格重量总计
'spec_weight_total' => empty($goods) ? 0 : array_sum(array_map(function($v) {return $v['spec_weight']*$v['stock'];}, $goods)),
// 购买总数
'buy_count' => empty($goods) ? 0 : array_sum(array_column($goods, 'stock')),
// 默认地址
'address' => empty($address['data']) ? null : $address['data'],
]; ];
// 扩展展示数据 // 扩展展示数据
...@@ -541,18 +561,12 @@ class BuyService ...@@ -541,18 +561,12 @@ class BuyService
// type 类型(0减少, 1增加) // type 类型(0减少, 1增加)
// tips 提示信息 // tips 提示信息
$extension_data = [ $extension_data = [
[ // [
'name' => '感恩节9折', // 'name' => '感恩节9折',
'price' => 23, // 'price' => 23,
'type' => 0, // 'type' => 0,
'tips' => '-¥23元' // 'tips' => '-¥23元'
], // ],
[
'name' => '运费',
'price' => 10,
'type' => 1,
'tips' => '+¥10元'
],
]; ];
// 返回数据 // 返回数据
...@@ -561,6 +575,20 @@ class BuyService ...@@ -561,6 +575,20 @@ class BuyService
'base' => $base, 'base' => $base,
'extension_data' => $extension_data, 'extension_data' => $extension_data,
]; ];
// 生成订单数据处理钩子
$hook_name = 'plugins_service_buy_handle';
$ret = Hook::listen($hook_name, [
'hook_name' => $hook_name,
'is_backend' => true,
'params' => &$params,
'data' => &$result,
]);
if(isset($ret['code']) && $ret['code'] != 0)
{
return $ret;
}
return DataReturn('操作成功', 0, $result); return DataReturn('操作成功', 0, $result);
} }
...@@ -593,7 +621,6 @@ class BuyService ...@@ -593,7 +621,6 @@ class BuyService
} }
// 数据校验 // 数据校验
$total_price = 0;
foreach($params['goods'] as $v) foreach($params['goods'] as $v)
{ {
// 获取商品信息 // 获取商品信息
...@@ -630,16 +657,9 @@ class BuyService ...@@ -630,16 +657,9 @@ class BuyService
{ {
return DataReturn('['.$v['goods_id'].']超过商品限购数量['.$v['stock'].'>'.$goods['buy_max_number'].']', -1); return DataReturn('['.$v['goods_id'].']超过商品限购数量['.$v['stock'].'>'.$goods['buy_max_number'].']', -1);
} }
// 总价
$total_price += $goods['price']*$v['stock'];
$result[] = $goods;
} }
$data = [ return DataReturn('操作成功', 0);
'total_price' => $total_price,
];
return DataReturn('操作成功', 0, $data);
} }
/** /**
...@@ -688,27 +708,25 @@ class BuyService ...@@ -688,27 +708,25 @@ class BuyService
} }
// 清单商品 // 清单商品
$goods = self::BuyTypeGoodsList($params); $buy = self::BuyTypeGoodsList($params);
if(!isset($goods['code']) || $goods['code'] != 0) if(!isset($buy['code']) || $buy['code'] != 0)
{ {
return $goods; return $buy;
} }
$check = self::BuyGoodsCheck(['goods'=>$goods['data']['goods']]); $check = self::BuyGoodsCheck(['goods'=>$buy['data']['goods']]);
if(!isset($check['code']) || $check['code'] != 0) if(!isset($check['code']) || $check['code'] != 0)
{ {
return $check; return $check;
} }
// 用户地址 // 收货地址
$address = UserService::UserAddressRow(array_merge($params, ['id'=>$params['address_id']])); if(empty($buy['data']['base']['address']))
if(empty($address))
{ {
return $address; return DataReturn('收货地址有误', -1);
} else {
$address = $buy['data']['base']['address'];
} }
// 优惠金额
$preferential_price = 0.00;
// 店铺 // 店铺
$shop_id = 0; $shop_id = 0;
...@@ -717,18 +735,20 @@ class BuyService ...@@ -717,18 +735,20 @@ class BuyService
'order_no' => date('YmdHis').GetNumberCode(6), 'order_no' => date('YmdHis').GetNumberCode(6),
'user_id' => $params['user']['id'], 'user_id' => $params['user']['id'],
'shop_id' => $shop_id, 'shop_id' => $shop_id,
'receive_address_id' => $address['data']['id'], 'receive_address_id' => $address['id'],
'receive_name' => $address['data']['name'], 'receive_name' => $address['name'],
'receive_tel' => $address['data']['tel'], 'receive_tel' => $address['tel'],
'receive_province' => $address['data']['province'], 'receive_province' => $address['province'],
'receive_city' => $address['data']['city'], 'receive_city' => $address['city'],
'receive_county' => $address['data']['county'], 'receive_county' => $address['county'],
'receive_address' => $address['data']['address'], 'receive_address' => $address['address'],
'user_note' => isset($params['user_note']) ? htmlentities($params['user_note']) : '', 'user_note' => isset($params['user_note']) ? htmlentities($params['user_note']) : '',
'status' => (intval(MyC('common_order_is_booking', 0)) == 1) ? 0 : 1, 'status' => (intval(MyC('common_order_is_booking', 0)) == 1) ? 0 : 1,
'preferential_price' => $preferential_price, 'preferential_price' => $buy['data']['base']['preferential_price'],
'price' => $check['data']['total_price'], 'increase_price' => $buy['data']['base']['increase_price'],
'total_price' => $check['data']['total_price']-$preferential_price, 'price' => $buy['data']['base']['total_price'],
'total_price' => $buy['data']['base']['actual_price'],
'extension_data' => empty($buy['data']['extension_data']) ? '' : json_encode($buy['data']['extension_data']),
'payment_id' => isset($params['payment_id']) ? intval($params['payment_id']) : 0, 'payment_id' => isset($params['payment_id']) ? intval($params['payment_id']) : 0,
'add_time' => time(), 'add_time' => time(),
]; ];
...@@ -744,7 +764,7 @@ class BuyService ...@@ -744,7 +764,7 @@ class BuyService
$order_id = Db::name('Order')->insertGetId($order); $order_id = Db::name('Order')->insertGetId($order);
if($order_id > 0) if($order_id > 0)
{ {
foreach($goods['data']['goods'] as $v) foreach($buy['data']['goods'] as $v)
{ {
$detail = [ $detail = [
'order_id' => $order_id, 'order_id' => $order_id,
......
...@@ -648,6 +648,9 @@ class OrderService ...@@ -648,6 +648,9 @@ class OrderService
{ {
$v['user_note'] = null; $v['user_note'] = null;
} }
// 扩展数据
$v['extension_data'] = empty($v['extension_data']) ? null : json_decode($v['extension_data'], true);
// 订单详情 // 订单详情
$buy_number_count = 0; $buy_number_count = 0;
......
...@@ -120,5 +120,9 @@ return array ( ...@@ -120,5 +120,9 @@ return array (
array ( array (
0 => 'app\\plugins\\touristbuy\\Hook', 0 => 'app\\plugins\\touristbuy\\Hook',
), ),
'plugins_service_buy_handle' =>
array (
0 => 'app\\plugins\\freightfee\\Hook',
),
); );
?> ?>
\ No newline at end of file
...@@ -68,12 +68,12 @@ class AlipayAuth ...@@ -68,12 +68,12 @@ class AlipayAuth
$result = GS($key); $result = GS($key);
if($result !== false) if($result !== false)
{ {
return $result; return ['status'=>0, 'msg'=>'success', 'data'=>$result];
} }
// 获取授权信息并且获取用户信息 // 获取授权信息并且获取用户信息
$auth = $this->GetAuthAccessToken($authcode, $app_id); $auth = $this->GetAuthAccessToken($authcode, $app_id);
if($auth != false) if($auth['status'] == 0)
{ {
// 请求参数 // 请求参数
$param = [ $param = [
...@@ -84,7 +84,7 @@ class AlipayAuth ...@@ -84,7 +84,7 @@ class AlipayAuth
'sign_type' => 'RSA2', 'sign_type' => 'RSA2',
'timestamp' => date('Y-m-d H:i:s'), 'timestamp' => date('Y-m-d H:i:s'),
'version' => '1.0', 'version' => '1.0',
'auth_token' => $auth['access_token'], 'auth_token' => $auth['data']['access_token'],
]; ];
// 生成签名参数+签名 // 生成签名参数+签名
...@@ -99,17 +99,21 @@ class AlipayAuth ...@@ -99,17 +99,21 @@ class AlipayAuth
// 验证签名正确则存储缓存返回数据 // 验证签名正确则存储缓存返回数据
if(!$this->SyncRsaVerify($result, 'alipay_user_info_share_response')) if(!$this->SyncRsaVerify($result, 'alipay_user_info_share_response'))
{ {
return false; return ['status'=>-1, 'msg'=>'签名验证失败'];
} }
// 存储缓存 // 存储缓存
SS($key, $result['alipay_user_info_share_response']); SS($key, $result['alipay_user_info_share_response']);
// 返回用户数据 // 返回用户数据
return $result['alipay_user_info_share_response']; return ['status'=>0, 'msg'=>'success', 'data'=>$result['alipay_user_info_share_response']];
} }
$msg = empty($result['error_response']['sub_msg']) ? '授权失败' : $result['error_response']['sub_msg'];
return ['status'=>-1, 'msg'=>$msg];
} else {
return $auth;
} }
return false;
} }
/** /**
...@@ -157,7 +161,7 @@ class AlipayAuth ...@@ -157,7 +161,7 @@ class AlipayAuth
{ {
if(empty($app_id) || empty($key) || (empty($authcode) && empty($refresh_token))) if(empty($app_id) || empty($key) || (empty($authcode) && empty($refresh_token)))
{ {
return false; return ['status'=>-1, 'msg'=>'参数有误'];
} }
// 请求参数 // 请求参数
...@@ -188,20 +192,22 @@ class AlipayAuth ...@@ -188,20 +192,22 @@ class AlipayAuth
// 执行请求 // 执行请求
$result = $this->HttpRequest('https://openapi.alipay.com/gateway.do', $param); $result = $this->HttpRequest('https://openapi.alipay.com/gateway.do', $param);
// 结果正确则验证签名 并且 存储缓存返回access_token // 结果正确则验证签名 并且 存储缓存返回access_token
if(!empty($result['alipay_system_oauth_token_response']['user_id'])) if(!empty($result['alipay_system_oauth_token_response']['user_id']))
{ {
// 验证签名正确则存储缓存返回数据 // 验证签名正确则存储缓存返回数据
if(!$this->SyncRsaVerify($result, 'alipay_system_oauth_token_response')) if(!$this->SyncRsaVerify($result, 'alipay_system_oauth_token_response'))
{ {
return false; return ['status'=>-1, 'msg'=>'签名验证失败'];
} }
// 存储缓存 // 存储缓存
SS($key, $result['alipay_system_oauth_token_response']); SS($key, $result['alipay_system_oauth_token_response']);
return $result['alipay_system_oauth_token_response']; return ['status'=>0, 'msg'=>'success', 'data'=>$result['alipay_system_oauth_token_response']];
} }
return false; $msg = empty($result['error_response']['sub_msg']) ? '授权失败' : $result['error_response']['sub_msg'];
return ['status'=>-1, 'msg'=>$msg];
} }
/** /**
......
...@@ -58,7 +58,7 @@ App({ ...@@ -58,7 +58,7 @@ App({
// 请求地址 // 请求地址
request_url: "{{request_url}}", request_url: "{{request_url}}",
//request_url: "https://test.shopxo.net/", //request_url: "https://test.shopxo.net/",
//request_url: 'http://tp5-dev.com/', request_url: 'http://tp5-dev.com/',
// 基础信息 // 基础信息
application_title: "{{application_title}}", application_title: "{{application_title}}",
......
...@@ -86,7 +86,7 @@ Page({ ...@@ -86,7 +86,7 @@ Page({
} else { } else {
this.setData({ this.setData({
goods_list: data.goods_list, goods_list: data.goods_list,
total_price: data.base.total_price, total_price: data.base.actual_price,
extension_data: data.extension_data || [], extension_data: data.extension_data || [],
data_list_loding_status: 3, data_list_loding_status: 3,
common_order_is_booking: data.common_order_is_booking || 0, common_order_is_booking: data.common_order_is_booking || 0,
......
...@@ -31,17 +31,17 @@ ...@@ -31,17 +31,17 @@
<text class="buy-number">x{{detail.buy_number}}</text> <text class="buy-number">x{{detail.buy_number}}</text>
</view> </view>
</navigator> </navigator>
<view class="item-describe tr cr-666">{{item.describe}}</view> </view>
<view a:if="{{item.status <= 3}}" class="item-operation tr br-t"> <view class="item-describe tr cr-666">{{item.describe}}</view>
<button a:if="{{item.status <= 1}}" class="submit-cancel" type="default" size="mini" onTap="cancel_event" data-value="{{item.id}}" data-index="{{index}}" hover-class="none">取消 <view a:if="{{item.status <= 3}}" class="item-operation tr br-t">
</button> <button a:if="{{item.status <= 1}}" class="submit-cancel" type="default" size="mini" onTap="cancel_event" data-value="{{item.id}}" data-index="{{index}}" hover-class="none">取消
<button a:if="{{item.status == 1}}" class="submit-pay cr-666" type="default" size="mini" onTap="pay_event" data-value="{{item.id}}" data-index="{{index}}" hover-class="none">支付 </button>
</button> <button a:if="{{item.status == 1}}" class="submit-pay cr-666" type="default" size="mini" onTap="pay_event" data-value="{{item.id}}" data-index="{{index}}" hover-class="none">支付
<button a:if="{{item.status == 2}}" class="submit-rush cr-666" type="default" size="mini" onTap="rush_event" data-value="{{item.id}}" data-index="{{index}}" hover-class="none">催催 </button>
</button> <button a:if="{{item.status == 2}}" class="submit-rush cr-666" type="default" size="mini" onTap="rush_event" data-value="{{item.id}}" data-index="{{index}}" hover-class="none">催催
<button a:if="{{item.status == 3}}" class="submit-success cr-666" type="default" size="mini" onTap="collect_event" data-value="{{item.id}}" data-index="{{index}}" hover-class="none">收货 </button>
</button> <button a:if="{{item.status == 3}}" class="submit-success cr-666" type="default" size="mini" onTap="collect_event" data-value="{{item.id}}" data-index="{{index}}" hover-class="none">收货
</view> </button>
</view> </view>
</view> </view>
......
...@@ -84,7 +84,7 @@ Page({ ...@@ -84,7 +84,7 @@ Page({
} else { } else {
this.setData({ this.setData({
goods_list: data.goods_list, goods_list: data.goods_list,
total_price: data.base.total_price, total_price: data.base.actual_price,
extension_data: data.extension_data || [], extension_data: data.extension_data || [],
data_list_loding_status: 3, data_list_loding_status: 3,
common_order_is_booking: data.common_order_is_booking || 0, common_order_is_booking: data.common_order_is_booking || 0,
......
...@@ -31,18 +31,17 @@ ...@@ -31,18 +31,17 @@
<text class="buy-number">x{{detail.buy_number}}</text> <text class="buy-number">x{{detail.buy_number}}</text>
</view> </view>
</navigator> </navigator>
<view class="item-describe tr cr-666">{{item.describe}} </view>
</view> <view class="item-describe tr cr-666">{{item.describe}}</view>
<view wx:if="{{item.status <= 3}}" class="item-operation tr br-t"> <view wx:if="{{item.status <= 3}}" class="item-operation tr br-t">
<button wx:if="{{item.status <= 1}}" class="submit-cancel" type="default" size="mini" bindtap="cancel_event" data-value="{{item.id}}" data-index="{{index}}" hover-class="none">取消 <button wx:if="{{item.status <= 1}}" class="submit-cancel" type="default" size="mini" bindtap="cancel_event" data-value="{{item.id}}" data-index="{{index}}" hover-class="none">取消
</button> </button>
<button wx:if="{{item.status == 1}}" class="submit-pay cr-666 br" type="default" size="mini" bindtap="pay_event" data-value="{{item.id}}" data-index="{{index}}" hover-class="none">支付 <button wx:if="{{item.status == 1}}" class="submit-pay cr-666 br" type="default" size="mini" bindtap="pay_event" data-value="{{item.id}}" data-index="{{index}}" hover-class="none">支付
</button> </button>
<button wx:if="{{item.status == 2}}" class="submit-rush cr-666 br" type="default" size="mini" bindtap="rush_event" data-value="{{item.id}}" data-index="{{index}}" hover-class="none">催催 <button wx:if="{{item.status == 2}}" class="submit-rush cr-666 br" type="default" size="mini" bindtap="rush_event" data-value="{{item.id}}" data-index="{{index}}" hover-class="none">催催
</button> </button>
<button wx:if="{{item.status == 3}}" class="submit-success cr-666 br" type="default" size="mini" bindtap="collect_event" data-value="{{item.id}}" data-index="{{index}}" hover-class="none">收货 <button wx:if="{{item.status == 3}}" class="submit-success cr-666 br" type="default" size="mini" bindtap="collect_event" data-value="{{item.id}}" data-index="{{index}}" hover-class="none">收货
</button> </button>
</view>
</view> </view>
</view> </view>
......
...@@ -28,8 +28,8 @@ ul.logistics-list li.selected i.icon-active, ul.payment-list li.selected i.icon- ...@@ -28,8 +28,8 @@ ul.logistics-list li.selected i.icon-active, ul.payment-list li.selected i.icon-
.business-item ul { padding: 10px 3px 5px 5px;} .business-item ul { padding: 10px 3px 5px 5px;}
ul.logistics-list li img, ul.payment-list li img { width: 36px; height: 36px; } ul.logistics-list li img, ul.payment-list li img { width: 36px; height: 36px; }
/*运费、留言*/ /*运费、留言、扩展数据*/
.buy-message{padding:0px 5px} .buy-message {padding:0px 5px}
.td.td-oplist .pay-logis,.td.td-bonus select{position:absolute;top:6px;right:0;} .td.td-oplist .pay-logis,.td.td-bonus select{position:absolute;top:6px;right:0;}
.memo-input{width:calc(100% - 64px);border: 1px solid #ccc;padding: 5px;outline:none;border-radius: 2px;} .memo-input{width:calc(100% - 64px);border: 1px solid #ccc;padding: 5px;outline:none;border-radius: 2px;}
...@@ -46,6 +46,13 @@ ul.logistics-list li img, ul.payment-list li img { width: 36px; height: 36px; } ...@@ -46,6 +46,13 @@ ul.logistics-list li img, ul.payment-list li img { width: 36px; height: 36px; }
ul.address-list, .business-item ul { overflow: hidden; } ul.address-list, .business-item ul { overflow: hidden; }
.nav-buy .btn-go.am-disabled { background-color: #efa4af; } .nav-buy .btn-go.am-disabled { background-color: #efa4af; }
/* 扩展数据 */
.buy-extension-data { background: #ffffeb; border: 1px solid #ffe2cf; margin-top: 10px; padding: 5px 10px; margin: 10px 5px 0 5px; }
.buy-extension-data li { padding: 5px 0; }
.buy-extension-data li:not(:last-child) { border-bottom: 1px dashed #ffe2cf; }
.buy-extension-data .extension-items-name { }
.buy-extension-data .extension-items-tips { color: #ff8f44; }
/** /**
* 手机下选择地址 * 手机下选择地址
*/ */
...@@ -91,8 +98,6 @@ ul.address-list, .business-item ul { overflow: hidden; } ...@@ -91,8 +98,6 @@ ul.address-list, .business-item ul { overflow: hidden; }
.base-real-pay .g_price span {font-size: 26px;} .base-real-pay .g_price span {font-size: 26px;}
.price .nav-total-price {color: #d2364c;font: 700 26px tahoma;} .price .nav-total-price {color: #d2364c;font: 700 26px tahoma;}
.order-nav .buy-footer-address .buy-line-title {color: #404040;font-weight: 700;} .order-nav .buy-footer-address .buy-line-title {color: #404040;font-weight: 700;}
.link-list{margin:0px auto;} .link-list{margin:0px auto;}
/*地址管理*/ /*地址管理*/
.address ul{margin-top:10px ;} .address ul{margin-top:10px ;}
...@@ -121,6 +126,9 @@ ul.address-list, .business-item ul { overflow: hidden; } ...@@ -121,6 +126,9 @@ ul.address-list, .business-item ul { overflow: hidden; }
.link-list h3 { padding: 0 0 5px 0; } .link-list h3 { padding: 0 0 5px 0; }
.buy-message { margin: 0; } .buy-message { margin: 0; }
.buy-point-discharge { padding: 10px 0px; } .buy-point-discharge { padding: 10px 0px; }
/*扩展数据*/
.buy-extension-data { margin: 10px 0 0 0; }
} }
@media only screen and (max-width:640px) { @media only screen and (max-width:640px) {
......
...@@ -110,7 +110,6 @@ ul.progress li.current .title { ...@@ -110,7 +110,6 @@ ul.progress li.current .title {
overflow: hidden; overflow: hidden;
} }
.items-detail { .items-detail {
width: calc(100% - 62px);
color: #666; color: #666;
} }
......
...@@ -110,7 +110,6 @@ ul.progress li.current .title { ...@@ -110,7 +110,6 @@ ul.progress li.current .title {
overflow: hidden; overflow: hidden;
} }
.items-detail { .items-detail {
width: calc(100% - 62px);
color: #666; color: #666;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册