This commit is contained in:
邹景立 2018-05-09 21:23:46 +08:00
commit bb2b479740
22 changed files with 230 additions and 50 deletions

View File

@ -924,6 +924,24 @@ CREATE TABLE `wechat_news_media` (
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='微信素材表'; ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='微信素材表';
-- ----------------------------
-- Table structure for store_goods_stock
-- ----------------------------
DROP TABLE IF EXISTS `store_goods_stock`;
CREATE TABLE `store_goods_stock` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`goods_id` bigint(20) unsigned DEFAULT '0' COMMENT '商品ID',
`goods_spec` varchar(255) DEFAULT '' COMMENT '商品属性',
`goods_stock` bigint(20) unsigned DEFAULT '0' COMMENT '商品库存',
`stock_desc` varchar(255) DEFAULT '' COMMENT '商品库存描述',
`sort` bigint(20) unsigned DEFAULT '0' COMMENT '数据排序',
`status` bigint(1) unsigned DEFAULT '1' COMMENT '商品状态(1有效,0无效)',
`is_deleted` bigint(1) unsigned DEFAULT '0' COMMENT '删除状态(1删除,0未删除)',
`create_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=36 DEFAULT CHARSET=utf8 COMMENT='商城商品库存';
-- ---------------------------- -- ----------------------------
-- Records of wechat_news_media -- Records of wechat_news_media
-- ---------------------------- -- ----------------------------

View File

@ -64,7 +64,7 @@ class Login extends BasicAdmin
($user['password'] !== md5($password)) && $this->error('登录密码与账号不匹配,请重新输入!'); ($user['password'] !== md5($password)) && $this->error('登录密码与账号不匹配,请重新输入!');
empty($user['status']) && $this->error('账号已经被禁用,请联系管理!'); empty($user['status']) && $this->error('账号已经被禁用,请联系管理!');
// 更新登录信息 // 更新登录信息
$data = ['login_at' => ['exp', 'now()'], 'login_num' => ['exp', 'login_num+1']]; $data = ['login_at' => Db::raw('now()'), 'login_num' => Db::raw('login_num+1')];
Db::name('SystemUser')->where(['id' => $user['id']])->update($data); Db::name('SystemUser')->where(['id' => $user['id']])->update($data);
session('user', $user); session('user', $user);
!empty($user['authorize']) && NodeService::applyAuthNode(); !empty($user['authorize']) && NodeService::applyAuthNode();

View File

@ -55,7 +55,7 @@
<img data-tips-image style="height:auto;max-height:32px;min-width:32px" src="{:sysconf('browser_icon')}"/> <img data-tips-image style="height:auto;max-height:32px;min-width:32px" src="{:sysconf('browser_icon')}"/>
<input type="hidden" name="browser_icon" onchange="$(this).prev('img').attr('src', this.value)" value="{:sysconf('browser_icon')}" class="layui-input"> <input type="hidden" name="browser_icon" onchange="$(this).prev('img').attr('src', this.value)" value="{:sysconf('browser_icon')}" class="layui-input">
<a class="btn btn-link" data-file="one" data-uptype="local" data-type="ico,png" data-field="browser_icon">上传图片</a> <a class="btn btn-link" data-file="one" data-uptype="local" data-type="ico,png" data-field="browser_icon">上传图片</a>
<p class="help-block">建议上传ICO图标的尺寸为128x128px此图标用于网站标题前ICON在线制作</p> <p class="help-block">建议上传ICO图标的尺寸为128x128px此图标用于网站标题前<a href="http://www.favicon-icon-generator.com/" target="_blank">ICON在线制作</a></p>
</div> </div>
</div> </div>

View File

@ -88,9 +88,7 @@
<td class='text-left nowrap'> <td class='text-left nowrap'>
{$vo.mail|default="<span class='color-desc'>还没有设置邮箱</span>"|raw} {$vo.mail|default="<span class='color-desc'>还没有设置邮箱</span>"|raw}
</td> </td>
<td class='text-left nowrap'> <td class='text-left nowrap'>{$vo.login_num|default=0}</td>
{$vo.login_num|default="<span class='color-desc'>从未登录</span>"|raw}
</td>
<td class='text-left nowrap'> <td class='text-left nowrap'>
{$vo.login_at|format_datetime|default="<span class='color-desc'>从未登录</span>"|raw} {$vo.login_at|format_datetime|default="<span class='color-desc'>从未登录</span>"|raw}
</td> </td>

View File

@ -223,6 +223,45 @@ class Goods extends BasicAdmin
return ['main' => $main, 'list' => $list]; return ['main' => $main, 'list' => $list];
} }
/**
* 商品库存信息更新
* @return string
* @throws \think\Exception
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
* @throws \think\exception\PDOException
*/
public function stock()
{
if (!$this->request->post()) {
$goods_id = $this->request->get('id');
$goods = Db::name('StoreGoods')->where(['id' => $goods_id, 'is_deleted' => '0'])->find();
empty($goods) && $this->error('该商品无法操作入库操作!');
$where = ['goods_id' => $goods_id, 'status' => '1', 'is_deleted' => '0'];
$goods['list'] = Db::name('StoreGoodsList')->where($where)->select();
return $this->fetch('', ['vo' => $goods]);
}
// 入库保存
$goods_id = $this->request->post('id');
list($post, $data) = [$this->request->post(), []];
foreach ($post['spec'] as $key => $spec) {
if ($post['stock'][$key] > 0) {
$data[] = [
'goods_stock' => $post['stock'][$key],
'stock_desc' => $this->request->post('desc'),
'goods_spec' => $spec, 'goods_id' => $goods_id,
];
}
}
empty($data) && $this->error('无需入库的数据哦!');
if (Db::name('StoreGoodsStock')->insertAll($data) !== false) {
GoodsService::syncGoodsStock($goods_id);
$this->success('商品入库成功!', '');
}
$this->error('商品入库失败,请稍候再试!');
}
/** /**
* 删除商品 * 删除商品
* @throws \think\Exception * @throws \think\Exception

View File

@ -104,7 +104,7 @@ class GoodsBrand extends BasicAdmin
protected function _form_result($result) protected function _form_result($result)
{ {
if ($result !== false) { if ($result !== false) {
list($base, $spm, $url) = [url('@admin'), $this->request->get('spm'), url('goods/brand/index')]; list($base, $spm, $url) = [url('@admin'), $this->request->get('spm'), url('store/goods_brand/index')];
$this->success('数据保存成功!', "{$base}#{$url}?spm={$spm}"); $this->success('数据保存成功!', "{$base}#{$url}?spm={$spm}");
} }
} }

View File

@ -86,7 +86,7 @@ class GoodsService
} }
/** /**
* 同步更新商品库存及售出@todo 需要重新做库存统计) * 同步更新商品库存及售出
* @param int $goods_id 商品ID * @param int $goods_id 商品ID
* @return array * @return array
* @throws \think\Exception * @throws \think\Exception
@ -99,35 +99,31 @@ class GoodsService
{ {
// 检查商品是否需要更新库存 // 检查商品是否需要更新库存
$map = ['id' => $goods_id, 'is_deleted' => '0']; $map = ['id' => $goods_id, 'is_deleted' => '0'];
if (!($goods = Db::name('Goods')->where($map)->find())) { if (!($goods = Db::name('StoreGoods')->where($map)->find())) {
return ['code' => 0, 'msg' => '指定商品信息无法同步库存!']; return ['code' => 0, 'msg' => '指定商品信息无法同步库存!'];
} }
// 统计入库信息 // 统计入库信息
$stockField = 'goods_id,goods_spec,ifnull(sum(goods_stock), 0) goods_stock'; $stockField = 'goods_id,goods_spec,ifnull(sum(goods_stock), 0) goods_stock';
$stockWhere = ['status' => '1', 'is_deleted' => '0', 'goods_id' => $goods_id, 'mch_id' => $mch_id]; $stockWhere = ['status' => '1', 'is_deleted' => '0', 'goods_id' => $goods_id];
$stockList = (array)Db::name('StoreGoodsStock')->field($stockField)->where($stockWhere)->group('goods_id,goods_spec')->select(); $stockList = (array)Db::name('StoreGoodsStock')->field($stockField)->where($stockWhere)->group('goods_id,goods_spec')->select();
// 统计销售信息 // 统计销售信息
$saleField = 'goods_id,goods_spec,ifnull(sum(number), 0) goods_sale'; $saleField = 'goods_id,goods_spec,ifnull(sum(number), 0) goods_sale';
$saleWhere = ['status' => '1', 'is_deleted' => '0', 'goods_id' => $goods_id, 'mch_id' => $mch_id]; $saleWhere = ['status' => '1', 'is_deleted' => '0', 'goods_id' => $goods_id];
$saleList = (array)Db::name('StoreOrderList')->field($saleField)->where($saleWhere)->group('goods_id,goods_spec')->select(); $saleList = (array)Db::name('StoreOrderGoods')->field($saleField)->where($saleWhere)->group('goods_id,goods_spec')->select();
// 库存置零 // 库存置零
list($where, $total_stock, $total_sale) = [['goods_id' => $goods_id], 0, 0]; list($where, $total_sale) = [['goods_id' => $goods_id], 0];
Db::name('StoreGoodsList')->where($where)->update(['goods_stock' => 0, 'goods_sale' => 0, 'mch_id' => $mch_id]); Db::name('StoreGoodsList')->where($where)->update(['goods_stock' => 0, 'goods_sale' => 0]);
// 更新商品库存 // 更新商品库存
foreach ($stockList as $stock) { foreach ($stockList as $stock) {
$total_stock += intval($stock['goods_stock']); $where = ['goods_id' => $goods_id, 'goods_spec' => $stock['goods_spec']];
$where = ['goods_id' => $goods_id, 'goods_spec' => $stock['goods_spec'], 'mch_id' => $mch_id];
Db::name('StoreGoodsList')->where($where)->update(['goods_stock' => $stock['goods_stock']]); Db::name('StoreGoodsList')->where($where)->update(['goods_stock' => $stock['goods_stock']]);
} }
// 更新商品销量 // 更新商品销量
foreach ($saleList as $sale) { foreach ($saleList as $sale) {
$total_sale += intval($sale['goods_sale']); $total_sale += intval($sale['goods_sale']);
$where = ['goods_id' => $goods_id, 'goods_spec' => $sale['goods_spec'], 'mch_id' => $mch_id]; $where = ['goods_id' => $goods_id, 'goods_spec' => $sale['goods_spec']];
Db::name('StoreGoodsList')->where($where)->update(['goods_sale' => $sale['goods_sale']]); Db::name('StoreGoodsList')->where($where)->update(['goods_sale' => $sale['goods_sale']]);
} }
// 更新总库存及总销量
$update = ['package_stock' => $total_stock, 'package_sale' => $total_sale, 'mch_id' => $mch_id];
Db::name('Goods')->where(['id' => $goods_id])->update($update);
return ['code' => 1, 'msg' => '同步商品库存成功!']; return ['code' => 1, 'msg' => '同步商品库存成功!'];
} }

View File

@ -0,0 +1,37 @@
<?php
// +----------------------------------------------------------------------
// | ThinkAdmin
// +----------------------------------------------------------------------
// | 版权所有 2014~2017 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
// +----------------------------------------------------------------------
// | 官方网站: http://think.ctolog.com
// +----------------------------------------------------------------------
// | 开源协议 ( https://mit-license.org )
// +----------------------------------------------------------------------
// | github开源项目https://github.com/zoujingli/ThinkAdmin
// +----------------------------------------------------------------------
namespace app\store\service;
use service\DataService;
/**
* 会员数据初始化
* Class MemberService
* @package app\store\service
*/
class MemberService
{
/**
* 创建会员数据
* @param array $data 会员数据
* @return bool
* @throws \think\Exception
* @throws \think\exception\PDOException
*/
public static function create($data)
{
return DataService::save('StoreMember', $data, 'id');
}
}

View File

@ -14,7 +14,6 @@
namespace app\store\service; namespace app\store\service;
use Pay\Pay;
use service\DataService; use service\DataService;
use service\ToolsService; use service\ToolsService;
use think\Db; use think\Db;
@ -40,18 +39,18 @@ class OrderService
* @throws \think\db\exception\ModelNotFoundException * @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException * @throws \think\exception\DbException
*/ */
public static function create($mid, $params, $addressId = 0, $expressId = 0, $orderDesc = '', $orderType = 1, $from = 'wechat') public static function create($mid, $params, $addressId, $expressId, $orderDesc = '', $orderType = 1, $from = 'wechat')
{ {
// 会员数据获取与检验 // 会员数据获取与检验
if (!($member = Db::name('StoreMember')->where(['id' => $mid])->find())) { if (!($member = Db::name('StoreMember')->where(['id' => $mid])->find())) {
return ['code' => 0, 'msg' => '会员数据处理异常,请刷新重试!']; return ['code' => 0, 'msg' => '会员数据处理异常,请刷新重试!'];
} }
// 订单数据生成 // 订单数据生成
list($order_no, $orderList) = [[], DataService::createSequence(10, 'ORDER'), []]; list($order_no, $orderList) = [DataService::createSequence(10, 'ORDER'), []];
$order = ['mid' => $mid, 'order_no' => $order_no, 'real_price' => 0, 'total_price' => 0, 'desc' => $orderDesc, 'type' => $orderType, 'from' => $from,]; $order = ['mid' => $mid, 'order_no' => $order_no, 'real_price' => 0, 'goods_price' => 0, 'desc' => $orderDesc, 'type' => $orderType, 'from' => $from];
foreach (explode(';', trim($params, ',;@')) as $param) { foreach (explode(';', trim($params, ',;@')) as $param) {
list($goods_id, $goods_spec, $number) = explode('@', "{$param}@@"); list($goods_id, $goods_spec, $number) = explode('@', "{$param}@@");
$item = ['mid' => $mid, 'type' => $orderType, 'order_no' => $order_no, 'goods_id' => $goods_id, 'goods_spec' => $goods_spec, 'goods_number' => $number,]; $item = ['mid' => $mid, 'type' => $orderType, 'order_no' => $order_no, 'goods_id' => $goods_id, 'goods_spec' => $goods_spec, 'goods_number' => $number];
$goodsResult = self::buildOrderData($item, $order, $orderList, 'selling_price'); $goodsResult = self::buildOrderData($item, $order, $orderList, 'selling_price');
if (empty($goodsResult['code'])) { if (empty($goodsResult['code'])) {
return $goodsResult; return $goodsResult;
@ -69,7 +68,10 @@ class OrderService
Db::name('StoreOrderGoods')->insertAll($orderList); // 订单关联的商品信息 Db::name('StoreOrderGoods')->insertAll($orderList); // 订单关联的商品信息
Db::name('storeOrderExpress')->insert($expressResult['data']); // 快递信息 Db::name('storeOrderExpress')->insert($expressResult['data']); // 快递信息
}); });
// @todo 同步相关商品库存 // 同步商品库存列表
foreach (array_unique(array_column($orderList, 'goods_id')) as $stock_goods_id) {
GoodsService::syncGoodsStock($stock_goods_id);
}
} catch (\Exception $e) { } catch (\Exception $e) {
return ['code' => 0, 'msg' => '商城订单创建失败,请稍候再试!' . $e->getLine() . $e->getFile() . $e->getMessage()]; return ['code' => 0, 'msg' => '商城订单创建失败,请稍候再试!' . $e->getLine() . $e->getFile() . $e->getMessage()];
} }
@ -132,13 +134,15 @@ class OrderService
} }
// 商品规格信息 // 商品规格信息
$specField = 'goods_id,goods_spec,market_price,selling_price,goods_stock,goods_sale'; $specField = 'goods_id,goods_spec,market_price,selling_price,goods_stock,goods_sale';
$specWhere = ['status' => '1', 'is_deleted' => '0', 'package_id' => '0', 'goods_id' => $goods_id, 'goods_spec' => $goods_spec]; $specWhere = ['status' => '1', 'is_deleted' => '0', 'goods_id' => $goods_id, 'goods_spec' => $goods_spec];
if (!($goodsSpec = Db::name('StoreGoodsList')->field($specField)->where($specWhere)->find())) { if (!($goodsSpec = Db::name('StoreGoodsList')->field($specField)->where($specWhere)->find())) {
return ['code' => 0, 'msg' => '无效的商品规格信息!', 'data' => "{$goods_id}, {$goods_spec}, {$number}"]; return ['code' => 0, 'msg' => '无效的商品规格信息!', 'data' => "{$goods_id}, {$goods_spec}, {$number}"];
} }
// 商品库存检查
if ($goodsSpec['goods_stock'] - $goodsSpec['goods_sale'] < $number) { if ($goodsSpec['goods_stock'] - $goodsSpec['goods_sale'] < $number) {
return ['code' => 0, 'msg' => '商品库存不足,请更换其它商品!', 'data' => "{$goods_id}, {$goods_spec}, {$number}"]; return ['code' => 0, 'msg' => '商品库存不足,请更换其它商品!', 'data' => "{$goods_id}, {$goods_spec}, {$number}"];
} }
// 订单价格处理
$goodsSpec['price_field'] = $price_field; $goodsSpec['price_field'] = $price_field;
$orderList[] = array_merge($goods, $goodsSpec, ['mid' => $mid, 'number' => $number, 'order_no' => $order_no, 'type' => $type]); $orderList[] = array_merge($goods, $goodsSpec, ['mid' => $mid, 'number' => $number, 'order_no' => $order_no, 'type' => $type]);
$order['goods_price'] += floatval($goodsSpec[$price_field]) * $number; $order['goods_price'] += floatval($goodsSpec[$price_field]) * $number;

View File

@ -159,6 +159,11 @@
<a data-open='{:url("$classuri/edit")}?id={$vo.id}'>编辑</a> <a data-open='{:url("$classuri/edit")}?id={$vo.id}'>编辑</a>
<!--{/if}--> <!--{/if}-->
<!--{if auth("$classuri/stock")}-->
<span class="text-explode">|</span>
<a data-title="商品入库" data-modal='{:url("$classuri/stock")}?id={$vo.id}'>入库</a>
<!--{/if}-->
<!--{if $vo.status eq 1 and auth("$classuri/forbid")}--> <!--{if $vo.status eq 1 and auth("$classuri/forbid")}-->
<span class="text-explode">|</span> <span class="text-explode">|</span>
<a data-update="{$vo.id}" data-field='status' data-value='0' data-action='{:url("$classuri/forbid")}'>下架</a> <a data-update="{$vo.id}" data-field='status' data-value='0' data-action='{:url("$classuri/forbid")}'>下架</a>

View File

@ -0,0 +1,52 @@
<form class="layui-form layui-box modal-form-box" action="{:request()->url()}" data-auto="true" method="post">
<div class="layui-form-item">
<label class="layui-form-label">商品名称</label>
<div class="layui-input-block">
<input value='[{$vo.id}] {$vo.goods_title|default=""}' disabled="disabled" class="layui-input layui-bg-gray">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label label-required">商品库存</label>
<div class="layui-input-block">
<table class="layui-table" lay-size="sm">
<thead>
<tr>
<th>商品规格</th>
<th class="text-right">入库数量</th>
</tr>
</thead>
{foreach $vo.list as $spec}
<tr>
<td>
{$spec.goods_spec|str_replace=['default:default',',',':'],['默认规格','',''],###}
</td>
<td style="padding:0">
<input name="spec[]" value="{$spec.goods_spec}" type="hidden">
<input name="stock[]" value="0" onblur="this.value=parseInt(this.value)||0"
class="layui-input text-right padding-right-10 border-none">
</td>
</tr>
{/foreach}
</table>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">入库描述</label>
<div class="layui-input-block">
<textarea placeholder="请输入入库描述" title="请输入入库描述" class="layui-textarea" name="desc"></textarea>
</div>
</div>
<div class="hr-line-dashed"></div>
<div class="layui-form-item text-center">
{if isset($vo['id'])}<input type='hidden' value='{$vo.id}' name='id'/>{/if}
<button class="layui-btn" type='submit'>保存数据</button>
<button class="layui-btn layui-btn-danger" type='button' data-confirm="确定要取消编辑吗?" data-close>取消编辑</button>
</div>
<script>window.form.render();</script>
</form>

View File

@ -84,7 +84,7 @@ class Config extends BasicAdmin
} }
LogService::write('微信管理', '修改微信接口参数成功'); LogService::write('微信管理', '修改微信接口参数成功');
} catch (\Exception $e) { } catch (\Exception $e) {
$this->error('微信授权保存失败 , 请稍候重试 ! ' . $e->getMessage()); $this->error('微信授权保存成功, 但授权验证失败 ! <br>' . $e->getMessage());
} }
$this->success('微信授权数据修改成功!', url('@admin') . "#" . url('@wechat/config/index')); $this->success('微信授权数据修改成功!', url('@admin') . "#" . url('@wechat/config/index'));
} }

View File

@ -14,8 +14,10 @@
namespace controller; namespace controller;
use app\store\service\MemberService;
use service\WechatService; use service\WechatService;
use think\Controller; use think\Controller;
use think\Db;
/** /**
* 微信基础控制器 * 微信基础控制器
@ -31,6 +33,29 @@ class BasicWechat extends Controller
*/ */
protected $openid; protected $openid;
/**
* 当前会员数据记录
* @var array
*/
protected $member = [];
/**
* 初始化会员数据记录
* @throws \think\Exception
* @throws \think\exception\PDOException
* @return array
*/
protected function initMember()
{
$openid = $this->getOpenid();
$this->member = Db::name('StoreMember')->where(['openid' => $openid])->find();
if (empty($this->member)) {
MemberService::create(['openid' => $openid]);
$this->member = Db::name('StoreMember')->where(['openid' => $openid])->find();
}
return $this->member;
}
/** /**
* 获取粉丝用户OPENID * 获取粉丝用户OPENID
* @return bool|string * @return bool|string

View File

@ -50,6 +50,7 @@ class SoapService
* @param string $name SOAP调用方法名 * @param string $name SOAP调用方法名
* @param array|string $arguments SOAP调用参数 * @param array|string $arguments SOAP调用参数
* @return array|string|bool * @return array|string|bool
* @throws \think\Exception
*/ */
public function __call($name, $arguments) public function __call($name, $arguments)
{ {
@ -57,8 +58,8 @@ class SoapService
return $this->soap->__soapCall($name, $arguments); return $this->soap->__soapCall($name, $arguments);
} catch (\Exception $e) { } catch (\Exception $e) {
Log::error("Soap Error. Call {$name} Method --- " . $e->getMessage()); Log::error("Soap Error. Call {$name} Method --- " . $e->getMessage());
throw new Exception($e->getMessage(), $e->getCode());
} }
return false;
} }
} }

View File

@ -17,5 +17,8 @@ namespace think;
// 加载基础文件 // 加载基础文件
require __DIR__ . '/thinkphp/base.php'; require __DIR__ . '/thinkphp/base.php';
// think文件检查防止TP目录计算异常
file_exists('think') || touch('think');
// 执行应用并响应 // 执行应用并响应
Container::get('app', [__DIR__ . '/application/'])->run()->send(); Container::get('app', [__DIR__ . '/application/'])->run()->send();

2
vendor/autoload.php vendored
View File

@ -4,4 +4,4 @@
require_once __DIR__ . '/composer/autoload_real.php'; require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInitf5974243cd36d6c47ccc2deac6411e2c::getLoader(); return ComposerAutoloaderInit7ecf5ded1a6830a1c375fe7293886da9::getLoader();

View File

@ -165,6 +165,7 @@ return array(
'app\\store\\controller\\wechat\\Demo' => $baseDir . '/application/store/controller/wechat/Demo.php', 'app\\store\\controller\\wechat\\Demo' => $baseDir . '/application/store/controller/wechat/Demo.php',
'app\\store\\controller\\wechat\\Index' => $baseDir . '/application/store/controller/wechat/Index.php', 'app\\store\\controller\\wechat\\Index' => $baseDir . '/application/store/controller/wechat/Index.php',
'app\\store\\service\\GoodsService' => $baseDir . '/application/store/service/GoodsService.php', 'app\\store\\service\\GoodsService' => $baseDir . '/application/store/service/GoodsService.php',
'app\\store\\service\\MemberService' => $baseDir . '/application/store/service/MemberService.php',
'app\\store\\service\\OrderService' => $baseDir . '/application/store/service/OrderService.php', 'app\\store\\service\\OrderService' => $baseDir . '/application/store/service/OrderService.php',
'app\\wechat\\controller\\Config' => $baseDir . '/application/wechat/controller/Config.php', 'app\\wechat\\controller\\Config' => $baseDir . '/application/wechat/controller/Config.php',
'app\\wechat\\controller\\Fans' => $baseDir . '/application/wechat/controller/Fans.php', 'app\\wechat\\controller\\Fans' => $baseDir . '/application/wechat/controller/Fans.php',

View File

@ -2,7 +2,7 @@
// autoload_real.php @generated by Composer // autoload_real.php @generated by Composer
class ComposerAutoloaderInitf5974243cd36d6c47ccc2deac6411e2c class ComposerAutoloaderInit7ecf5ded1a6830a1c375fe7293886da9
{ {
private static $loader; private static $loader;
@ -19,15 +19,15 @@ class ComposerAutoloaderInitf5974243cd36d6c47ccc2deac6411e2c
return self::$loader; return self::$loader;
} }
spl_autoload_register(array('ComposerAutoloaderInitf5974243cd36d6c47ccc2deac6411e2c', 'loadClassLoader'), true, true); spl_autoload_register(array('ComposerAutoloaderInit7ecf5ded1a6830a1c375fe7293886da9', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(); self::$loader = $loader = new \Composer\Autoload\ClassLoader();
spl_autoload_unregister(array('ComposerAutoloaderInitf5974243cd36d6c47ccc2deac6411e2c', 'loadClassLoader')); spl_autoload_unregister(array('ComposerAutoloaderInit7ecf5ded1a6830a1c375fe7293886da9', 'loadClassLoader'));
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
if ($useStaticLoader) { if ($useStaticLoader) {
require_once __DIR__ . '/autoload_static.php'; require_once __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInitf5974243cd36d6c47ccc2deac6411e2c::getInitializer($loader)); call_user_func(\Composer\Autoload\ComposerStaticInit7ecf5ded1a6830a1c375fe7293886da9::getInitializer($loader));
} else { } else {
$map = require __DIR__ . '/autoload_namespaces.php'; $map = require __DIR__ . '/autoload_namespaces.php';
foreach ($map as $namespace => $path) { foreach ($map as $namespace => $path) {
@ -48,19 +48,19 @@ class ComposerAutoloaderInitf5974243cd36d6c47ccc2deac6411e2c
$loader->register(true); $loader->register(true);
if ($useStaticLoader) { if ($useStaticLoader) {
$includeFiles = Composer\Autoload\ComposerStaticInitf5974243cd36d6c47ccc2deac6411e2c::$files; $includeFiles = Composer\Autoload\ComposerStaticInit7ecf5ded1a6830a1c375fe7293886da9::$files;
} else { } else {
$includeFiles = require __DIR__ . '/autoload_files.php'; $includeFiles = require __DIR__ . '/autoload_files.php';
} }
foreach ($includeFiles as $fileIdentifier => $file) { foreach ($includeFiles as $fileIdentifier => $file) {
composerRequiref5974243cd36d6c47ccc2deac6411e2c($fileIdentifier, $file); composerRequire7ecf5ded1a6830a1c375fe7293886da9($fileIdentifier, $file);
} }
return $loader; return $loader;
} }
} }
function composerRequiref5974243cd36d6c47ccc2deac6411e2c($fileIdentifier, $file) function composerRequire7ecf5ded1a6830a1c375fe7293886da9($fileIdentifier, $file)
{ {
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
require $file; require $file;

View File

@ -4,7 +4,7 @@
namespace Composer\Autoload; namespace Composer\Autoload;
class ComposerStaticInitf5974243cd36d6c47ccc2deac6411e2c class ComposerStaticInit7ecf5ded1a6830a1c375fe7293886da9
{ {
public static $files = array ( public static $files = array (
'1cfd2761b63b0a29ed23657ea394cb2d' => __DIR__ . '/..' . '/topthink/think-captcha/src/helper.php', '1cfd2761b63b0a29ed23657ea394cb2d' => __DIR__ . '/..' . '/topthink/think-captcha/src/helper.php',
@ -248,6 +248,7 @@ class ComposerStaticInitf5974243cd36d6c47ccc2deac6411e2c
'app\\store\\controller\\wechat\\Demo' => __DIR__ . '/../..' . '/application/store/controller/wechat/Demo.php', 'app\\store\\controller\\wechat\\Demo' => __DIR__ . '/../..' . '/application/store/controller/wechat/Demo.php',
'app\\store\\controller\\wechat\\Index' => __DIR__ . '/../..' . '/application/store/controller/wechat/Index.php', 'app\\store\\controller\\wechat\\Index' => __DIR__ . '/../..' . '/application/store/controller/wechat/Index.php',
'app\\store\\service\\GoodsService' => __DIR__ . '/../..' . '/application/store/service/GoodsService.php', 'app\\store\\service\\GoodsService' => __DIR__ . '/../..' . '/application/store/service/GoodsService.php',
'app\\store\\service\\MemberService' => __DIR__ . '/../..' . '/application/store/service/MemberService.php',
'app\\store\\service\\OrderService' => __DIR__ . '/../..' . '/application/store/service/OrderService.php', 'app\\store\\service\\OrderService' => __DIR__ . '/../..' . '/application/store/service/OrderService.php',
'app\\wechat\\controller\\Config' => __DIR__ . '/../..' . '/application/wechat/controller/Config.php', 'app\\wechat\\controller\\Config' => __DIR__ . '/../..' . '/application/wechat/controller/Config.php',
'app\\wechat\\controller\\Fans' => __DIR__ . '/../..' . '/application/wechat/controller/Fans.php', 'app\\wechat\\controller\\Fans' => __DIR__ . '/../..' . '/application/wechat/controller/Fans.php',
@ -274,9 +275,9 @@ class ComposerStaticInitf5974243cd36d6c47ccc2deac6411e2c
public static function getInitializer(ClassLoader $loader) public static function getInitializer(ClassLoader $loader)
{ {
return \Closure::bind(function () use ($loader) { return \Closure::bind(function () use ($loader) {
$loader->prefixLengthsPsr4 = ComposerStaticInitf5974243cd36d6c47ccc2deac6411e2c::$prefixLengthsPsr4; $loader->prefixLengthsPsr4 = ComposerStaticInit7ecf5ded1a6830a1c375fe7293886da9::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInitf5974243cd36d6c47ccc2deac6411e2c::$prefixDirsPsr4; $loader->prefixDirsPsr4 = ComposerStaticInit7ecf5ded1a6830a1c375fe7293886da9::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInitf5974243cd36d6c47ccc2deac6411e2c::$classMap; $loader->classMap = ComposerStaticInit7ecf5ded1a6830a1c375fe7293886da9::$classMap;
}, null, ClassLoader::class); }, null, ClassLoader::class);
} }

View File

@ -80,17 +80,17 @@
}, },
{ {
"name": "zoujingli/wechat-developer", "name": "zoujingli/wechat-developer",
"version": "v1.1.3", "version": "v1.1.4",
"version_normalized": "1.1.3.0", "version_normalized": "1.1.4.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/zoujingli/WeChatDeveloper.git", "url": "https://github.com/zoujingli/WeChatDeveloper.git",
"reference": "4b1112e8d4723ce5e6ef0d6eee41a02e588b60ab" "reference": "e72fb2f166ee1a3b4889845cd932a1ab9d2005ee"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://files.phpcomposer.com/files/zoujingli/WeChatDeveloper/4b1112e8d4723ce5e6ef0d6eee41a02e588b60ab.zip", "url": "https://files.phpcomposer.com/files/zoujingli/WeChatDeveloper/e72fb2f166ee1a3b4889845cd932a1ab9d2005ee.zip",
"reference": "4b1112e8d4723ce5e6ef0d6eee41a02e588b60ab", "reference": "e72fb2f166ee1a3b4889845cd932a1ab9d2005ee",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -98,7 +98,7 @@
"ext-openssl": "*", "ext-openssl": "*",
"php": ">=5.4" "php": ">=5.4"
}, },
"time": "2018-05-03T07:30:54+00:00", "time": "2018-05-09T05:38:00+00:00",
"type": "library", "type": "library",
"installation-source": "dist", "installation-source": "dist",
"autoload": { "autoload": {

View File

@ -105,7 +105,7 @@ class BasicWeChat
if (!empty($result['access_token'])) { if (!empty($result['access_token'])) {
Tools::setCache($cache, $result['access_token'], 7000); Tools::setCache($cache, $result['access_token'], 7000);
} }
return $result['access_token']; return $this->access_token = $result['access_token'];
} }
/** /**

View File

@ -299,13 +299,13 @@ class Pay
{ {
$option = []; $option = [];
if ($isCert) { if ($isCert) {
$option['ssl_cer'] = $this->config->get('ssl_cer');
$option['ssl_key'] = $this->config->get('ssl_key');
foreach (['ssl_cer', 'ssl_key'] as $key) { foreach (['ssl_cer', 'ssl_key'] as $key) {
if (empty($options[$key])) { if (empty($option[$key]) || !file_exists($option[$key])) {
throw new InvalidArgumentException("Missing Config -- [{$key}]", '0'); throw new InvalidArgumentException("Missing Config -- [{$key}]", '0');
} }
} }
$option['ssl_cer'] = $this->config->get('ssl_cer');
$option['ssl_key'] = $this->config->get('ssl_key');
} }
$params = $this->params->merge($data); $params = $this->params->merge($data);
$needSignType && ($params['sign_type'] = strtoupper($signType)); $needSignType && ($params['sign_type'] = strtoupper($signType));