| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- <?php
- namespace app\controller\api;
- use app\extra\basic\Base;
- use app\extra\tools\CodeExtend;
- use app\middleware\WxMiddleware;
- use app\model\saas\SaasCombo;
- use app\model\saas\SaasUser;
- use app\model\saas\SaasUserBuy;
- use app\model\saas\SaasUserLog;
- use LinFly\Annotation\Route\Controller;
- use LinFly\Annotation\Route\Middleware;
- use LinFly\Annotation\Route\Route;
- use support\Request;
- use support\Response;
- #[Controller(prefix: "/wx_api/card"),Middleware(WxMiddleware::class)]
- class Card extends Base
- {
- #[Route(path: "data",methods: "get")]
- public function getCardData(Request $request): Response
- {
- try {
- $param = $this->_valid([
- "shop.require" => "参数错误"
- ]);
- if (!is_array($param)) return error($param);
- $memberCard = (new SaasUser)->where("shop_id",$param['shop'])->where("openid",$request->user['openid'])->with(["shop" => function($query){
- $query->field("shop_id,shop_name,user_card_price,user_card");
- }])->findOrEmpty();
- if ($memberCard->isEmpty()) return success("",[],2);
- $memberCard['balance'] = format_money($memberCard['balance']/100,2);
- $memberCard['end_at'] = date("Y-m-d",strtotime($memberCard['create_at']));
- $isRecharge = (new SaasUserBuy)->where("shop_id",$param['shop'])->where("openid",$request->user['openid'])->where("status",1)->sum("money");
- if ($memberCard['shop']['user_card'] == 2) { // 自定义套餐
- $cardPrice = array_values($memberCard['shop']['user_card_price']);
- } else {
- $cardPrice = (new SaasCombo)->where("type",2)->select();
- }
- $cardPrice = array_filter($cardPrice, function($item) use ($isRecharge) {
- if ($isRecharge > 0) {
- return $item['is_first'] != '1'; // 注意:这里使用松散比较,因为数据中有字符串'1'
- } else {
- return $item;
- }
- });
- foreach ($cardPrice as $key=>$val) {
- $cardPrice[$key] = $val;
- $cardPrice[$key]['money'] = $val['money'];
- $cardPrice[$key]['old_money'] = $val['old_money'];
- }
- $memberCard['card'] = array_values($cardPrice);
- return success("ok",$memberCard->toArray());
- } catch (\Throwable $throwable) {
- echo getDateFull()."==会员卡报错\n";
- echo $throwable->getLine()."\n";
- echo $throwable->getFile()."\n";
- return error($throwable->getMessage());
- }
- }
- /**
- * 会员卡消费明细
- * @param Request $request
- * @return Response
- */
- #[Route(path: "log",methods: "get")]
- public function getOrderList(Request $request): Response
- {
- try {
- $param = $this->_valid([
- "page.require" => "参数错误",
- "size.require" => "参数错误",
- "shop.require" => "参数错误",
- "card.require" => "参数错误"
- ]);
- if (!is_array($param)) return error($param);
- $map = ["openid" => $request->user['openid'],"shop_id" => $param['shop']];
- $resp = (new SaasUserLog)->where($map)->order("create_at desc")->paginate([
- "list_rows" => $param['size'],
- "page" => $param['page']
- ]);
- return success("ok",$resp->toArray());
- } catch (\Throwable $throwable) {
- return error($throwable->getMessage());
- }
- }
- /**
- * 下单
- * @param Request $request
- * @return Response|void|null
- */
- #[Route(path: "create",methods: "post")]
- public function createOrder(Request $request)
- {
- try {
- $param = $this->_valid([
- "card.require" => "参数错误",
- "shop.require" => "参数错误"
- ],"post");
- if (!is_array($param)) return error($param);
- $map = ["openid" => $request->user['openid'],"shop_id" => $param['shop']];
- $card = (new SaasUser)->where($map)->with(['shop' => function($query){
- $query->field("shop_id,shop_name");
- }])->findOrEmpty();
- if ($card->isEmpty()) return error("尚未开通会员卡");
- $orderSn = strtoupper(CodeExtend::random(12,3));
- $buyCard = json_decode($param['card'],true);
- $state = (new SaasUserBuy)->insertGetId([
- "uid" => $request->user['id'],
- "openid" => $request->user['openid'],
- "order_sn" => $orderSn,
- "shop_id" => $param['shop'],
- "card_no" => $card['card_no'],
- "money" => $buyCard['money'] * 100,
- "card_money" => $buyCard['money'] * 100 + $buyCard['old_money'] * 100,
- "remark" => "赠送金额".$buyCard['old_money']
- ]);
- if ($state) {
- $wechat = new \WeChat\Pay($this->getWxConfig());
- $options = [
- 'body' => $card['shop']['shop_name']."-会员卡充值",
- 'out_trade_no' => $orderSn."-".CodeExtend::random(8),
- "attach" => $orderSn,
- 'total_fee' => $buyCard['money'] * 100,
- 'openid' => $request->user['openid'],
- 'trade_type' => 'JSAPI',
- 'notify_url' => 'https://apiv.ujia5.com/notify/recharge',
- 'spbill_create_ip' => $request->getRealIp(),
- ];
- // 生成预支付码
- $result = $wechat->createOrder($options);
- // 创建JSAPI参数签名
- $resp = $wechat->createParamsForJsApi($result['prepay_id']);
- return success("ok",$resp);
- }
- return error("发起充值失败");
- } catch (\Throwable $throwable) {
- return error($throwable->getMessage());
- }
- }
- #[Route(path: "del",methods: "post")]
- public function delCard(Request $request): Response
- {
- try {
- $param = $this->_valid([
- "shop.require" => "参数错误"
- ],"post");
- if (!is_array($param)) return error($param);
- $map = ["openid" => $request->user['openid'],"shop_id" => $param['shop']];
- $card = (new SaasUser)->where($map)->findOrEmpty();
- if ($card->isEmpty()) return error("会员卡不存在");
- $state = $card->delete();
- if ($state) return success("注销成功");
- return error("注销失败");
- } catch (\Throwable $throwable) {
- return error($throwable->getMessage());
- }
- }
- /**
- * 小程序配置
- * @return array
- */
- protected function getWxConfig(): array
- {
- return [
- 'token' => 'test',
- 'appid' => sConf("wechat.mini_appid"),
- 'appsecret' => sConf("wechat.mini_secret"),
- 'encodingaeskey' => 'BJIUzE0gqlWy0GxfPp4J1oPTBmOrNDIGPNav1YFH5Z5',
- // 配置商户支付参数(可选,在使用支付功能时需要)
- 'mch_id' => sConf("wechat.mch_id"),
- 'mch_key' => sConf("wechat.mch_key")
- ];
- }
- }
|