diff --git a/app/common.php b/app/common.php
index 6e76e16..71a4a02 100644
--- a/app/common.php
+++ b/app/common.php
@@ -670,5 +670,12 @@ if (!function_exists('resourceJoin')) {
return $domain.$string;
}
}
+if (!function_exists('replaceStoragePath'))
+{
+ function replaceStoragePath ($content){
+ $pregRule = "/<[img|IMG].*?src=[\'|\"][\/storage]{1}(.*?(?:[\.jpg|\.jpeg|\.png|\.gif|\.bmp]))[\'|\"].*?[\/]?>/";
+ return preg_replace($pregRule, '', (string)$content );
+ }
+}
diff --git a/app/controller/api/Index.php b/app/controller/api/Index.php
index b9ef1be..9356370 100644
--- a/app/controller/api/Index.php
+++ b/app/controller/api/Index.php
@@ -93,9 +93,7 @@ class Index extends Base
try {
CConfig::load('extra/statement', 'statement');
$content = config('statement')['content'] ?? '';
- $pregRule = "/<[img|IMG].*?src=[\'|\"][\/storage]{1}(.*?(?:[\.jpg|\.jpeg|\.png|\.gif|\.bmp]))[\'|\"].*?[\/]?>/";
- $content = preg_replace($pregRule, '', (string)$content );
-
+ $content = replaceStoragePath($content);
return $this->json(0, 'success', ['content' => $content]);
} catch (Exception $e) {
return $this->json(5000, '获取免责声明失败');
@@ -111,8 +109,8 @@ class Index extends Base
try {
CConfig::load('extra/purchaseinstructions', 'purchaseinstructions');
$content = config('purchaseinstructions')['content'] ?? '';
- $pregRule = "/<[img|IMG].*?src=[\'|\"][\/storage]{1}(.*?(?:[\.jpg|\.jpeg|\.png|\.gif|\.bmp]))[\'|\"].*?[\/]?>/";
- $content = preg_replace($pregRule, '', (string)$content );
+
+ $content = replaceStoragePath($content);
return $this->json(0, 'success', ['content' => $content]);
} catch (Exception $e) {
return $this->json(5000, '获取失败');
@@ -129,9 +127,7 @@ class Index extends Base
try {
CConfig::load('extra/addwechat', 'addwechat');
$res = config('addwechat')?? [];
- $pregRule = "/<[img|IMG].*?src=[\'|\"][\/storage]{1}(.*?(?:[\.jpg|\.jpeg|\.png|\.gif|\.bmp]))[\'|\"].*?[\/]?>/";
- $res["content"] = preg_replace($pregRule, '', (string)$res["content"] );
-
+ $res["content"] = replaceStoragePath($res["content"]);
return $this->json(0, 'success', $res);
} catch (Exception $e) {
return $this->json(5000, '获取添加微信失败');
@@ -147,9 +143,7 @@ class Index extends Base
try {
CConfig::load('extra/about', 'about');
$res = config('about')?? [];
- $pregRule = "/<[img|IMG].*?src=[\'|\"][\/storage]{1}(.*?(?:[\.jpg|\.jpeg|\.png|\.gif|\.bmp]))[\'|\"].*?[\/]?>/";
- $res["content"] = preg_replace($pregRule, '', (string)$res["content"] );
-
+ $res["content"] = replaceStoragePath($res["content"]);
return $this->json(0, 'success', $res);
} catch (Exception $e) {
return $this->json(5000, '获取关于我们失败');
diff --git a/app/controller/api/Order.php b/app/controller/api/Order.php
index e16cfb2..9beddd0 100644
--- a/app/controller/api/Order.php
+++ b/app/controller/api/Order.php
@@ -7,9 +7,11 @@ use app\repository\OrderRepository;
use app\model\Order as OrderModel;
use Exception;
use GuzzleHttp\Exception\GuzzleException;
+use Intervention\Image\ImageManagerStatic;
use think\db\exception\DataNotFoundException;
use think\db\exception\DbException;
use think\db\exception\ModelNotFoundException;
+use think\facade\Config as CConfig;
use think\response\Json;
/**
@@ -20,6 +22,7 @@ use think\response\Json;
*/
class Order extends Base
{
+
/**
* 创建订单
*
@@ -32,6 +35,7 @@ class Order extends Base
$params = $this->request->param();
$accountId = $this->request->user['user_id'] ?? 0;
+
try {
$data = OrderRepository::getInstance()->createOrder($accountId, $params);
OrderRepository::getInstance()->updateSpuStock([]);
@@ -40,7 +44,7 @@ class Order extends Base
return $this->json(4000, $e->getMessage());
} catch (Exception $e) {
OrderRepository::log('订单创建失败', $e, 'error', 'order');
- return $this->json(5000, '订单创建失败');
+ return $this->json(5000, '订单创建失败'.$e->getMessage());
}
}
return $this->json(4002, '请求错误');
@@ -428,9 +432,44 @@ class Order extends Base
}
- public function shopCartCartOrder()
+ //生成订单图片
+ public function orderQrCode()
{
+ $id = input("id/d",0);
+ $order = OrderModel::findById($id);
+ if(empty($order)){
+ return $this->json(4001,"订单不存在");
+ }
+ $orderCoding = $order->coding;
+ CConfig::load('extra/addwechat', "addwechat");
+ $addwechat = config("addwechat");
+ $qrImg = public_path() . ($addwechat["wechat"] ?? '');
+ $content = replaceStoragePath($addwechat['content']??'');
+ if(!is_file($qrImg)){
+ return $this->json(4001,"生成订单二维码图片失败");
+ }
+ if(!is_writable(public_path()."/storage/")){
+ return $this->json("上传文件夹需要写入权限");
+ }
+ if(!is_dir( public_path()."/storage/order_qr_code/")){
+ mkdir(public_path()."/storage/order_qr_code");
+ }
+
+ $savePath = "/storage/order_qr_code/" . $orderCoding . ".png";
+ ImageManagerStatic::canvas(800, 700, '#fff')
+ ->insert(ImageManagerStatic::make($qrImg)->resize(500,500),"top-left",150,0)
+ ->text("订单:".$orderCoding,400,600, function ($font){
+ $font->file(public_path() . "/static/HYa3gj.ttf");
+ $font->size(46);
+ $font->align("center");
+ $font->valign("center");
+ })
+
+// ->insert(ImageManagerStatic::make($mpCode)->resize(380, 380), 'bottom-right', 560, 723)
+// ->encode('data-url');
+ ->save(public_path() . $savePath);
+ return $this->json(0, "success", ["path" => $savePath, "content" => $content]);
}
}
\ No newline at end of file
diff --git a/app/controller/api/User.php b/app/controller/api/User.php
index 1588388..7d2ca40 100644
--- a/app/controller/api/User.php
+++ b/app/controller/api/User.php
@@ -231,7 +231,7 @@ class User extends Base
'id', 'coding', 'real_name', 'nickname', 'headimgurl', 'mobile',
// 'province', 'city', 'county', 'country', 'birthday', 'gender'
'score', 'status', 'invite_code', 'channel',
- 'is_active', "continuity_sign", "last_sign_online", 'phone_active'
+ 'is_active', "continuity_sign", "last_sign_online", 'phone_active','address','contacts'
];
$repo = AccountRepository::getInstance();
$user = $repo->findById($accountId, $fields);
diff --git a/app/repository/OrderRepository.php b/app/repository/OrderRepository.php
index b5085a8..0c5cb7b 100644
--- a/app/repository/OrderRepository.php
+++ b/app/repository/OrderRepository.php
@@ -153,8 +153,8 @@ class OrderRepository extends Repository
throw new RepositoryException('收货地址不能为空');
}
- if (!isset($data['phone']) || empty($data['phone'])) {
- throw new RepositoryException('收货联系电话不能为空');
+ if (!isset($data['phone']) || empty($data['phone'])||!preg_match("/^1[3456789]{1}\d{9}$/",$data['phone'])) {
+ throw new RepositoryException('收货联系电话不能为空或格式不正确');
}
if (!isset($data['contacts']) || empty($data['contacts'])) {
throw new RepositoryException('收货联系人不能为空');
@@ -299,11 +299,12 @@ class OrderRepository extends Repository
$dataSku = $data['sku_list'];//商品sku coding=>num 商品数量
$skuList = SpuRepository::getInstance()->listBySkuCoding(array_keys($dataSku), true);
- if (isset($data['is_only']) && $data['is_only'] > Spu::COMMON_OFF) {
- $skuPriceList = $skuList->column('original_price', 'coding');
- } else {
- $skuPriceList = $skuList->column('price', 'coding');
- }
+ $skuPriceList = $skuList->column('original_price', 'coding');
+// if (isset($data['is_only']) && $data['is_only'] > Spu::COMMON_OFF) {
+// $skuPriceList = $skuList->column('original_price', 'coding');
+// } else {
+// $skuPriceList = $skuList->column('price', 'coding');
+// }
$skuScoreList = $skuList->column('score', 'coding');//商品规格=》积分
$skuStockList = $skuList->column('stock', 'coding');
$totalPrice = 0;//商品原总价 单位(元) 未做任何优惠
@@ -338,28 +339,29 @@ class OrderRepository extends Repository
(new Sku())->saveAll($updateSkuStock);
- $freight = 0;//运费(元)
- // 邮寄方式
- if ($data['pick_self'] == Order::COMMON_OFF) {
- // 快递公司默认运费
- if (isset($data['express_code']) && !empty($data['express_code'])) {
- $freight = Express::getDefaultFreight($data['express_code']);
- }
+ // $freight = 0;//运费(元)
+// // 邮寄方式
+// if ($data['pick_self'] == Order::COMMON_OFF) {
+// // 快递公司默认运费
+// if (isset($data['express_code']) && !empty($data['express_code'])) {
+// $freight = Express::getDefaultFreight($data['express_code']);
+// }
+//
+// if (!$address = AccountAddress::findById($data['address_id'])) {
+// throw new RepositoryException('收货地址不存在');
+// }
+//
+// $addressInfo = sprintf("%s,%s,%s %s %s %s", $address['name'], $address['phone'],
+// $address['province_str'], $address['city_str'], $address['county_str'], $address['address']);
+// } else {
+// $addressInfo = '自提';
+// }
- if (!$address = AccountAddress::findById($data['address_id'])) {
- throw new RepositoryException('收货地址不存在');
- }
-
- $addressInfo = sprintf("%s,%s,%s %s %s %s", $address['name'], $address['phone'],
- $address['province_str'], $address['city_str'], $address['county_str'], $address['address']);
- } else {
- $addressInfo = '自提';
- }
-
- $realTotalPrice = $totalPrice - $data['coupon_price'];//实际应支付=商品总价-优惠券金额
+ //$realTotalPrice = $totalPrice - $data['coupon_price'];//实际应支付=商品总价-优惠券金额
+ $realTotalPrice = $totalPrice;//实际应支付=商品总价-优惠券金额
$realTotalPrice = $realTotalPrice <= 0 ? 0 : $realTotalPrice;
- $realTotalPrice += $freight;//加运费
+ // $realTotalPrice += $freight;//加运费
$insert = [];
$time = time();
@@ -370,12 +372,12 @@ class OrderRepository extends Repository
$payType = Order::PAY_TYPE_WECHAT;
// 积分支付
- if ($data['is_score'] > 0) {
- if ($account['score'] < $totalScore) {
- throw new RepositoryException('积分不足');
- }
- $payType = Order::PAY_TYPE_SCORE;
- }
+// if ($data['is_score'] > 0) {
+// if ($account['score'] < $totalScore) {
+// throw new RepositoryException('积分不足');
+// }
+// $payType = Order::PAY_TYPE_SCORE;
+// }
$create = [
'coding' => generateCode(),
@@ -383,26 +385,32 @@ class OrderRepository extends Repository
'original_price' => $totalPrice,
'price' => $realTotalPrice,
'pay_type' => $payType,//支付方式
- 'status' => self::STATUS_WAITING,
+ 'status' => self::STATUS_ORDER_PLACED,
'created_at' => $now,
'score' => $totalScore,//使用积分
'expired_at' => $expired,
'address_id' => $data['address_id'] ?? 0,
- 'address' => $addressInfo,
+ //'address' => $addressInfo,
'remarks' => $data['remarks'] ?? '',
- 'express_code' => $data['express_code'],
+ 'express_code' => $data['express_code']??'',
'express_name' => $data['express_name'] ?? '',
- 'pick_self' => $data['pick_self'],
+ 'pick_self' => $data['pick_self'] ??0,
'coupon_id' => $data['coupon_id'] ?? 0,
- 'freight' => $freight,
+ 'freight' => 0,
'coupon_price' => $data['coupon_price'] ?? 0,
- 'phone' => $address['phone'] ?? $data['pick_self_phone'],
+ //'phone' => $address['phone'] ?? $data['pick_self_phone'],
'is_only' => isset($data['is_only']) && $data['is_only'] > 0 ? 1 : 0,
'is_score' => $data['is_score'] ?? 0,
+
+ 'wedding_date' => $data['wedding_date'] ?? null,
+ 'expected_delivery_date' => $data['expected_delivery_date'] ?? null,
+ 'address' => $data['address'] ?? '',
+ 'phone' => $data['phone'] ?? '',
+ 'contacts' => $data['contacts'] ?? '',
];
if ($realTotalPrice == 0) {
- $create['status'] = self::STATUS_PAID;
+ $create['status'] = self::STATUS_ORDER_PLACED;
$create['paid_at'] = $now;
}
@@ -411,26 +419,26 @@ class OrderRepository extends Repository
throw new RepositoryException('订单创建失败,请稍后重试');
}
- // 优惠券状态变更
- if ($data['coupon_id'] > 0 && $data['coupon_price'] > 0) {
- AccountCoupon::use($accountId, $data['coupon_id'], $order['coding']);
- }
+// // 优惠券状态变更
+// if ($data['coupon_id'] > 0 && $data['coupon_price'] > 0) {
+// AccountCoupon::use($accountId, $data['coupon_id'], $order['coding']);
+// }
// 创建活动商品订单
// OrderRepository::getInstance()->createActivityOrder($accountId, $order->coding, $skuArr->toArray());
- if ($realTotalPrice > 0) {
- //创建支付记录
- PaymentLog::create([
- 'account_id' => $accountId,
- 'order_coding' => $order['coding'],
- 'created_at' => $now,
- 'type' => 'order',
- 'amount' => $order['price'],
- ]);
- }
+// if ($realTotalPrice > 0) {
+// //创建支付记录
+// PaymentLog::create([
+// 'account_id' => $accountId,
+// 'order_coding' => $order['coding'],
+// 'created_at' => $now,
+// 'type' => 'order',
+// 'amount' => $order['price'],
+// ]);
+// }
- $order->needPay = $realTotalPrice > 0;//是否需要付款
+// $order->needPay = $realTotalPrice > 0;//是否需要付款
$orderHasVirtual = 0;//是否拥有虚拟商品
$skuIds = [];//当前订单涉及到的skuID
@@ -479,30 +487,35 @@ class OrderRepository extends Repository
throw new RepositoryException('订单商品保存失败');
}
- if ($realTotalPrice > 0) {
- //统一下单
- $res = $this->wechatMiniPay($order->coding, $account->openid, Math::yuan2Fen($realTotalPrice));
- $order->save(['prepay_id' => $res['prepay_id']]);
-
- //生成小程序支付请求的参数
- $order->payment_params = $this->miniPayReqParams($res['prepay_id']);
- }
+// if ($realTotalPrice > 0) {
+// //统一下单
+// $res = $this->wechatMiniPay($order->coding, $account->openid, Math::yuan2Fen($realTotalPrice));
+// $order->save(['prepay_id' => $res['prepay_id']]);
+//
+// //生成小程序支付请求的参数
+// $order->payment_params = $this->miniPayReqParams($res['prepay_id']);
+// }
// 积分订单 扣减积分并记录
- if ($totalScore > 0) {
- AccountDataLog::log($accountId,
- '积分商品下单', -$totalScore,
- AccountDataLog::TYPE_SCORE,
- AccountDataLog::ACTION_ORDER,
- $account['score'] - $totalScore);
- $account->score = Db::raw('`score` - '.$totalScore);
- }
+// if ($totalScore > 0) {
+// AccountDataLog::log($accountId,
+// '积分商品下单', -$totalScore,
+// AccountDataLog::TYPE_SCORE,
+// AccountDataLog::ACTION_ORDER,
+// $account['score'] - $totalScore);
+// $account->score = Db::raw('`score` - '.$totalScore);
+// }
+ $account->mobile = $data["phone"];
+ $account->address = $data["address"];
+ $account->contacts = $data["contacts"];
$account->save();
- if ($realTotalPrice == 0) {
- // 设为已付款
- $this->afterPaid($accountId, $order['coding']);
- }
+// if ($realTotalPrice == 0) {
+// // 设为已付款
+// $this->afterPaid($accountId, $order['coding']);
+// }
+ // 设为已付款
+ $this->afterPaid($accountId, $order['coding']);
Db::commit();
return $order;
@@ -513,7 +526,7 @@ class OrderRepository extends Repository
//回滚
Db::rollback();
self::log('订单创建失败', $e, 'error', 'order');
- throw new RepositoryException('订单创建失败');
+ throw new RepositoryException('订单创建失败'.$e->getMessage());
}
}
@@ -860,8 +873,8 @@ class OrderRepository extends Repository
public function afterPaid(int $accountId, string $orderCoding)
{
OrderSku::setPaid($orderCoding);//订单商品
- OrderActivity::setPaid($orderCoding);//活动订单
- OrderGroupList::setPaid($orderCoding);//订单拼团列表
+ //OrderActivity::setPaid($orderCoding);//活动订单
+ // OrderGroupList::setPaid($orderCoding);//订单拼团列表
// 付款后 所有商品销量添加
$this->updateAmount($orderCoding);
diff --git a/app/traits/order/ShoppingCartTrait.php b/app/traits/order/ShoppingCartTrait.php
index 33e5785..8e8c5d6 100644
--- a/app/traits/order/ShoppingCartTrait.php
+++ b/app/traits/order/ShoppingCartTrait.php
@@ -150,7 +150,6 @@ trait ShoppingCartTrait
if (!$item = ShoppingCart::where('id', $id)->find()) {
throw new RepositoryException('记录不存在');
}
-
return $item->save(['num' => $num]);
}
diff --git a/public/.htaccess b/public/.htaccess
index 8aa9d23..be1eac6 100644
--- a/public/.htaccess
+++ b/public/.htaccess
@@ -1,4 +1,5 @@
+ SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
Options +FollowSymlinks -Multiviews
RewriteEngine On
diff --git a/public/static/HYa3gj.ttf b/public/static/HYa3gj.ttf
new file mode 100644
index 0000000..d1ce68d
Binary files /dev/null and b/public/static/HYa3gj.ttf differ