From e373631ff390990ed9825f4e41ebeac8d1a14dc0 Mon Sep 17 00:00:00 2001 From: mkm <727897186@qq.com> Date: Wed, 5 Jun 2024 12:36:59 +0800 Subject: [PATCH 1/5] =?UTF-8?q?feat:=20=E4=BF=AE=E6=94=B9=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E5=A4=84=E7=90=86=E5=99=A8=E5=92=8CAPI=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=EF=BC=8C=E5=A2=9E=E5=8A=A0=E9=94=99=E8=AF=AF=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E5=92=8C=E6=97=A5=E5=BF=97=E8=AE=B0=E5=BD=95=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/ExceptionHandler.php | 2 +- app/api/controller/IndexController.php | 88 ++++++++++++++------ app/common/service/wechat/WechatTemplate.php | 2 +- 3 files changed, 66 insertions(+), 26 deletions(-) diff --git a/app/ExceptionHandler.php b/app/ExceptionHandler.php index 283ba1719..8cfa3719a 100644 --- a/app/ExceptionHandler.php +++ b/app/ExceptionHandler.php @@ -37,6 +37,6 @@ class ExceptionHandler extends Handler return response(json_encode($error, JSON_UNESCAPED_UNICODE)); } // 非json请求则返回一个页面 - return new Response(200, [], $exception->getMessage()); + return new Response(200, [], 'msg:'.$exception->getMessage().'。line:'.$exception->getLine().'。file:'.$exception->getFile()); } } diff --git a/app/api/controller/IndexController.php b/app/api/controller/IndexController.php index 6ffbd56a1..2cb6a7358 100644 --- a/app/api/controller/IndexController.php +++ b/app/api/controller/IndexController.php @@ -5,24 +5,60 @@ namespace app\api\controller; use app\admin\validate\tools\GenerateTableValidate; use app\admin\logic\tools\GeneratorLogic; use app\common\logic\store_order\StoreOrderLogic; +use app\common\service\pay\PayService; +use app\common\service\wechat\WechatTemplate; +use Exception; use think\facade\Db; use Webman\Config; use hg\apidoc\annotation as ApiDoc; +use Yansongda\Pay\Exception\InvalidSignException; + #[ApiDoc\NotParse()] class IndexController extends BaseApiController { - public $notNeedLogin = ['index','app_update','express_list','province','city','area','street']; + public $notNeedLogin = ['index', 'app_update', 'express_list', 'province', 'city', 'area', 'street']; public function index() { + try{ + $a=new WechatTemplate(); + $a->NewQuotationNotification(['openid'=>'ocqhF6UfFQXE-SbzbP5YVQJlQAh0','data1'=>'阿萨','data2'=>date('Y-m-d H:i:s'),'data3'=>'占山','data3'=>18982406440]); + }catch (Exception $e){ + d($e); + } - d(2); - $params=['store_id'=>2,'pay_type'=>17]; - $a=StoreOrderLogic::createOrder([1],0,null,$params); +d(22); + $auth_code = $this->request->get('code'); + $pay = (new PayService()); + $order = [ + 'description' => '条码商品', + 'out_trade_no' => (string)time(), + 'payer' => [ + 'auth_code' => (string)$auth_code + ], + 'amount' => [ + 'total' =>1, + ], + 'scene_info' => [ + "store_info" => [ + 'id' => '1' + ] + ], + ]; + + try{ + $a= $pay->wechat->pos($order); + + }catch (\Exception $th) { + d($th); + } +d($a); + $params = ['store_id' => 2, 'pay_type' => 17]; + $a = StoreOrderLogic::createOrder([1], 0, null, $params); d($a); - return json(['msg' =>create_password(123456, '11d3')]); + return json(['msg' => create_password(123456, '11d3')]); } /** @@ -41,42 +77,46 @@ class IndexController extends BaseApiController /** * @notes 获取app更新信息 */ - public function app_update(){ - $find= Db::name('app_update')->where('type',2)->order('id','desc')->findOrEmpty(); - return $this->success('ok',$find); + public function app_update() + { + $find = Db::name('app_update')->where('type', 2)->order('id', 'desc')->findOrEmpty(); + return $this->success('ok', $find); } /** * @notes 获取省列表 */ - public function province(){ - $list= Db::name('geo_province')->select()->toArray(); - return $this->success('ok',$list); + public function province() + { + $list = Db::name('geo_province')->select()->toArray(); + return $this->success('ok', $list); } /** * @notes 获取市列表 */ - public function city(){ - $province_code=$this->request->get('code'); - $list= Db::name('geo_city')->where('province_code',$province_code)->select()?->toArray(); - return $this->success('ok',$list); + public function city() + { + $province_code = $this->request->get('code'); + $list = Db::name('geo_city')->where('province_code', $province_code)->select()?->toArray(); + return $this->success('ok', $list); } /** * @notes 获取区列表 */ - public function area(){ - $city_code=$this->request->get('code'); - $list= Db::name('geo_area')->where('city_code',$city_code)->select()?->toArray(); - return $this->success('ok',$list); + public function area() + { + $city_code = $this->request->get('code'); + $list = Db::name('geo_area')->where('city_code', $city_code)->select()?->toArray(); + return $this->success('ok', $list); } /** * @notes 获取街道列表 */ - public function street(){ - $area_code=$this->request->get('area_code'); - $list= Db::name('geo_street')->where('area_code',$area_code)->select()?->toArray(); - return $this->success('ok',$list); + public function street() + { + $area_code = $this->request->get('area_code'); + $list = Db::name('geo_street')->where('area_code', $area_code)->select()?->toArray(); + return $this->success('ok', $list); } - } diff --git a/app/common/service/wechat/WechatTemplate.php b/app/common/service/wechat/WechatTemplate.php index 52d6c660c..bff36b478 100644 --- a/app/common/service/wechat/WechatTemplate.php +++ b/app/common/service/wechat/WechatTemplate.php @@ -49,7 +49,7 @@ class WechatTemplate 'data' => [ 'thing2' => ['value' => $data['data1']], 'thing3' => ['value' => $data['data2']], - 'const4' => ['value' => $data['data3']??08302669767], + 'const4' => ['value' => $data['data3']??'08302669767'], ] ]; return $this->post($template); From cf384e724e1eead005cf9013ad6672d694a57510 Mon Sep 17 00:00:00 2001 From: liu <1873441552@qq.com> Date: Wed, 5 Jun 2024 12:45:14 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E6=94=AF=E4=BB=98=E5=9B=9E=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/controller/PayController.php | 3 -- app/api/controller/order/OrderController.php | 2 +- app/common/enum/OrderEnum.php | 8 ++++ app/common/logic/PayNotifyLogic.php | 49 +++++++++++++++++++- app/common/model/pay/PayNotify.php | 10 ++++ 5 files changed, 67 insertions(+), 5 deletions(-) create mode 100644 app/common/model/pay/PayNotify.php diff --git a/app/api/controller/PayController.php b/app/api/controller/PayController.php index 8bbf48f80..ded81e91a 100644 --- a/app/api/controller/PayController.php +++ b/app/api/controller/PayController.php @@ -28,12 +28,9 @@ class PayController extends BaseApiController { $app = new PayService(1); $result = $app->wechat->callback(Request()->post()); - Cache::set('log'.time(),$result); - Cache::set('logJ'.time(),json_encode($result)); if ($result && $result->event_type == 'TRANSACTION.SUCCESS') { $ciphertext = $result->resource['ciphertext']; if ($ciphertext['trade_state'] === 'SUCCESS') { - $extra['transaction_id'] = $ciphertext['transaction_id']; $attach = $ciphertext['attach']; switch ($attach) { case 'wechat_common': diff --git a/app/api/controller/order/OrderController.php b/app/api/controller/order/OrderController.php index 5d918bc42..bee4effe9 100644 --- a/app/api/controller/order/OrderController.php +++ b/app/api/controller/order/OrderController.php @@ -130,7 +130,7 @@ class OrderController extends BaseApiController case PayEnum::WECHAT_PAY: //微信支付 $redirectUrl = $params['redirect'] ?? '/pages/payment/payment'; - $result = PaymentLogic::pay($pay_type, 'StoreOrder', $order, $this->userInfo['terminal'], $redirectUrl); + $result = PaymentLogic::pay($pay_type, 'wechat_common', $order, $this->userInfo['terminal'], $redirectUrl); if (PaymentLogic::hasError()) { return $this->fail(PaymentLogic::getError(), $params); } diff --git a/app/common/enum/OrderEnum.php b/app/common/enum/OrderEnum.php index 43dceeedd..6fa8fc99e 100644 --- a/app/common/enum/OrderEnum.php +++ b/app/common/enum/OrderEnum.php @@ -53,6 +53,14 @@ class OrderEnum */ const IS_OK = 1; + /** + * 回调订单相关 + * @PAY 支付 + * @IBACK 退款 + */ + const PAY = 1; + const BACK = 0; + /** * 账户类型 * @USER 用户 diff --git a/app/common/logic/PayNotifyLogic.php b/app/common/logic/PayNotifyLogic.php index 24653c9c7..96458d2ab 100644 --- a/app/common/logic/PayNotifyLogic.php +++ b/app/common/logic/PayNotifyLogic.php @@ -4,6 +4,7 @@ namespace app\common\logic; use app\common\enum\OrderEnum; use app\common\enum\PayEnum; +use app\common\model\pay\PayNotify; use app\common\model\store_finance_flow\StoreFinanceFlow; use app\common\model\store_order\StoreOrder; use app\common\model\user\User; @@ -97,7 +98,7 @@ class PayNotifyLogic extends BaseLogic } else { PushService::push('store_merchant_' . $order['id'], $order['id'], ['type' => 'store_merchant', 'msg' => '您有一笔新的订单']); Redis::send('push-platform-print', ['order_id' => $order['id']], 60); - Db::name('order_middle')->insert(['c_order_id' => $order['id']]); +// Db::name('order_middle')->insert(['c_order_id' => $order['id']]); } if (!empty($extra['payer']['openid']) && $order->pay_type != 9) { Redis::send('push-delivery', ['order_sn' => $order['order_id'], 'openid' => $extra['payer']['openid']], 5); @@ -105,6 +106,31 @@ class PayNotifyLogic extends BaseLogic return true; } + + public static function store_order($orderSn, $extra = []) + { + $order = StoreOrder::where('order_id', $orderSn)->findOrEmpty(); + if ($order->isEmpty() || $order->paid == PayEnum::ISPAID) { + return true; + } + if ($order->pay_type != 10) { + $order->pay_price = bcdiv($extra['amount']['payer_total'], 100, 2); + $order->paid = 1; + $order->pay_time = time(); + $order->status = 1; + $order->save(); + } else { + $extra['transaction_id'] = time(); + } + if ($order->pay_type == 9) { + $order->status = 2; + } + self::afterPay($order); + + return true; + + } + /** * 现金支付 */ @@ -179,4 +205,25 @@ class PayNotifyLogic extends BaseLogic $financeLogic->save(); } + + /** + * 回调日志 + * @param $order + * @param $extra + * @return void + */ + public static function notifyLog($order,$extra) + { + $data = [ + 'pay_type'=>'wechat', + 'type'=>OrderEnum::PAY, + 'amount'=>$extra['amount']['payer_total'],//分 + 'order_sn'=>$order, + 'out_trade_no'=>$extra['transaction_id'], + 'attach'=>$extra['attach'], + 'create_time'=>date('Y-m-d H:i:s',time()), + ]; + PayNotify::create($data); + } + } diff --git a/app/common/model/pay/PayNotify.php b/app/common/model/pay/PayNotify.php new file mode 100644 index 000000000..44d3c4e38 --- /dev/null +++ b/app/common/model/pay/PayNotify.php @@ -0,0 +1,10 @@ + Date: Wed, 5 Jun 2024 13:27:17 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E6=A0=B8=E9=94=80=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/controller/order/OrderController.php | 23 +++++++++ app/api/logic/order/OrderLogic.php | 51 ++++++++++++++++++++ app/common/model/store_order/StoreOrder.php | 3 +- 3 files changed, 76 insertions(+), 1 deletion(-) diff --git a/app/api/controller/order/OrderController.php b/app/api/controller/order/OrderController.php index bee4effe9..8a0a57c91 100644 --- a/app/api/controller/order/OrderController.php +++ b/app/api/controller/order/OrderController.php @@ -28,6 +28,29 @@ class OrderController extends BaseApiController return $this->dataLists(new OrderList()); } + #[ + ApiDoc\Title('核销订单列表'), + ApiDoc\url('/api/order/order/write_list'), + ApiDoc\Method('POST'), + ApiDoc\Param(name: "type", type: "int", require: true, desc: "1:待核销;2:已核销"), + ApiDoc\Param(name: "name", type: "string", require: false, desc: "商品名/订单id"), + ApiDoc\NotHeaders(), + ApiDoc\Header(name: "token", type: "string", require: true, desc: "token"), + ApiDoc\ResponseSuccess("data", type: "array"), + ] + public function write_list() + { + $status = (int)$this->request->post('status',1); + $params = $this->request->post(); + $params['page_no'] = isset($params['page_no'])?: 1; + $params['page_size'] = isset($params['page_size'])?: 15; + $info = $this->userInfo; + $res = OrderLogic::write_list($info,$status,$params); + $res['page_no'] =$params['page_no']; + $res['page_size'] =$params['page_size']; + return $this->success('ok',$res); + + } #[ ApiDoc\Title('订单校验'), ApiDoc\url('/api/order/order/checkOrder'), diff --git a/app/api/logic/order/OrderLogic.php b/app/api/logic/order/OrderLogic.php index 4b6aa2db3..926936caf 100644 --- a/app/api/logic/order/OrderLogic.php +++ b/app/api/logic/order/OrderLogic.php @@ -16,6 +16,7 @@ use app\common\model\store_product\StoreProduct; use app\common\model\store_product_attr_value\StoreProductAttrValue; use app\common\model\store_product_unit\StoreProductUnit; use app\common\model\system_store\SystemStore; +use app\common\model\system_store\SystemStoreStaff; use app\common\model\user\User; use app\common\model\user\UserAddress; use support\Log; @@ -438,4 +439,54 @@ class OrderLogic extends BaseLogic } + public static function write_list($info,$status,$params) + { + + $store_id = SystemStoreStaff::where('phone',$info['mobile'])->value('store_id'); + if(empty($store_id)){ + throw new \Exception('该用户未绑定店铺请查看'); + } + + //先查商品相似 + $query = StoreOrderCartInfo::alias('o') + ->leftJoin('store_branch_product p','p.id = o.product_id') + ->leftJoin('store_order s','s.id = o.oid') + ->field('o.oid,p.store_name,s.order_id') + ->where('o.store_id',$store_id); + + if(isset($params['name']) && $params['name']){ + if($params['name'] && preg_match('/[\x{4e00}-\x{9fff}]+/u', $params['name'])==1){ + $query->where('p.store_name','like','%'.$params['name'].'%'); + }else{ + $query->where('s.order_id',$params['name']); + } + + } + $product = $query->select(); + if(empty($product)){ + return [ + 'list'=>[], + 'count'=>0 + ]; + } + $oids = array_column($product->toArray(), 'oid'); + $uniqueOids = array_unique($oids); + $query = StoreOrder::with(['store']) + ->whereIn('id',$uniqueOids) + ->where('status',$status); + $count = $query->count(); + $list = $query + ->page($params['page_no'], $params['page_size']) + ->order(['id' => 'desc']) + ->select() + ->each(function($item){ + $item['goods_list']=StoreOrderCartInfo::where('oid',$item['id'])->with('goodsName')->field('product_id,cart_num,verify_code,is_writeoff,writeoff_time')->limit(3)->select(); + $item['goods_count']=count(explode(',',$item['cart_id'])); + }) + ->toArray(); + return [ + 'list'=>$list, + 'count'=>$count + ]; + } } diff --git a/app/common/model/store_order/StoreOrder.php b/app/common/model/store_order/StoreOrder.php index 14fea056d..e22aad9a6 100644 --- a/app/common/model/store_order/StoreOrder.php +++ b/app/common/model/store_order/StoreOrder.php @@ -22,7 +22,8 @@ class StoreOrder extends BaseModel public function store() { - return $this->hasOne(SystemStore::class, 'id','store_id'); + return $this->hasOne(SystemStore::class, 'id','store_id') + ->bind(['store_name'=>'name', 'store_phone'=>'phone']); } public function getPayTypeAttr($value, $data) From 01f4d9749498432aae85873d8a8b119ffec867ec Mon Sep 17 00:00:00 2001 From: liu <1873441552@qq.com> Date: Wed, 5 Jun 2024 13:37:25 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E5=85=85=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/controller/PayController.php | 4 ++++ app/api/controller/user/UserController.php | 2 +- app/common/logic/PayNotifyLogic.php | 23 +++++++--------------- 3 files changed, 12 insertions(+), 17 deletions(-) diff --git a/app/api/controller/PayController.php b/app/api/controller/PayController.php index ded81e91a..42c1df249 100644 --- a/app/api/controller/PayController.php +++ b/app/api/controller/PayController.php @@ -37,6 +37,10 @@ class PayController extends BaseApiController PayNotifyLogic::handle('wechat_common', $ciphertext['out_trade_no'], $ciphertext); $app->wechat->success(); break; + case 'recharge': + PayNotifyLogic::handle('recharge', $ciphertext['out_trade_no'], $ciphertext); + $app->wechat->success(); + break; } } } diff --git a/app/api/controller/user/UserController.php b/app/api/controller/user/UserController.php index bafb2f34d..1a118bf11 100644 --- a/app/api/controller/user/UserController.php +++ b/app/api/controller/user/UserController.php @@ -72,7 +72,7 @@ class UserController extends BaseApiController $params['channel_type'] = $this->userInfo['terminal']; $order = UserLogic::recharge($params); $redirectUrl = $params['redirect'] ?? '/pages/payment/payment'; - $result = PaymentLogic::pay(PayEnum::WECHAT_PAY, 'StoreOrder', $order, $this->userInfo['terminal'], $redirectUrl); + $result = PaymentLogic::pay(PayEnum::WECHAT_PAY, 'recharge', $order, $this->userInfo['terminal'], $redirectUrl); if (PaymentLogic::hasError()) { return $this->fail(PaymentLogic::getError(), $params); } diff --git a/app/common/logic/PayNotifyLogic.php b/app/common/logic/PayNotifyLogic.php index 96458d2ab..cb5179ce0 100644 --- a/app/common/logic/PayNotifyLogic.php +++ b/app/common/logic/PayNotifyLogic.php @@ -8,6 +8,7 @@ use app\common\model\pay\PayNotify; use app\common\model\store_finance_flow\StoreFinanceFlow; use app\common\model\store_order\StoreOrder; use app\common\model\user\User; +use app\common\model\user\UserRecharge; use app\common\service\PushService; use support\Log; use think\facade\Db; @@ -107,26 +108,16 @@ class PayNotifyLogic extends BaseLogic } - public static function store_order($orderSn, $extra = []) + public static function recharge($orderSn, $extra = []) { - $order = StoreOrder::where('order_id', $orderSn)->findOrEmpty(); + $order = UserRecharge::where('order_id', $orderSn)->findOrEmpty(); if ($order->isEmpty() || $order->paid == PayEnum::ISPAID) { return true; } - if ($order->pay_type != 10) { - $order->pay_price = bcdiv($extra['amount']['payer_total'], 100, 2); - $order->paid = 1; - $order->pay_time = time(); - $order->status = 1; - $order->save(); - } else { - $extra['transaction_id'] = time(); - } - if ($order->pay_type == 9) { - $order->status = 2; - } - self::afterPay($order); - + $order->price = bcdiv($extra['amount']['payer_total'], 100, 2); + $order->paid = 1; + $order->pay_time = time(); + $order->save(); return true; } From 8f069e16ec63edddfdc3b1c1d28e7a953402bf31 Mon Sep 17 00:00:00 2001 From: liu <1873441552@qq.com> Date: Wed, 5 Jun 2024 13:50:00 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/controller/order/OrderController.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/api/controller/order/OrderController.php b/app/api/controller/order/OrderController.php index 8a0a57c91..e0ed0421d 100644 --- a/app/api/controller/order/OrderController.php +++ b/app/api/controller/order/OrderController.php @@ -32,8 +32,9 @@ class OrderController extends BaseApiController ApiDoc\Title('核销订单列表'), ApiDoc\url('/api/order/order/write_list'), ApiDoc\Method('POST'), - ApiDoc\Param(name: "type", type: "int", require: true, desc: "1:待核销;2:已核销"), - ApiDoc\Param(name: "name", type: "string", require: false, desc: "商品名/订单id"), + ApiDoc\Param(name: "status", type: "int", require: true, desc: "1:待核销;2:已核销"), + ApiDoc\Param(name: "page_no", type: "int", require: true, desc: "默认1页数"), + ApiDoc\Param(name: "page_size", type: "int", require: false, desc: "条数默认15"), ApiDoc\NotHeaders(), ApiDoc\Header(name: "token", type: "string", require: true, desc: "token"), ApiDoc\ResponseSuccess("data", type: "array"),