wang jun před 2 roky
rodič
revize
46b81081b2

+ 118 - 0
application/api/controller/Meal.php

@@ -0,0 +1,118 @@
+<?php
+namespace app\api\controller;
+
+use app\api\logic\MealLogic;
+use app\api\logic\PayLogic;
+
+/**
+ * 套餐配送
+ *
+ * @author wj
+ * @date 2022-12-03
+ */
+class Meal
+{
+    /**
+     * 获取套餐中心列表
+     *
+     * @return void
+     * @author wj
+     * @date 2022-12-03
+     */
+    public function getcenterlist()
+    {
+        $post = request()->post();
+        $l_m = new MealLogic();
+        $result = $l_m->getcenterlist($post);
+        if (empty($result['status'])) {
+            return backjson2(0, $result['msg']);
+        }
+        return backjson2(200, $result['msg'], $result['data']);
+    }
+    /**
+     * 获取套餐
+     *
+     * @return void
+     * @author wj
+     * @date 2022-12-03
+     */
+    public function getmeals()
+    {
+        $post = request()->post();
+        $l_m = new MealLogic();
+        $result = $l_m->getmeals($post);
+        if (empty($result['status'])) {
+            return backjson2(0, $result['msg']);
+        }
+        return backjson2(200, $result['msg'], $result['data']);
+    }
+    /**
+     * 创建订单
+     *
+     * @return void
+     * @author wj
+     * @date 2022-12-05
+     */
+    public function createOrder()
+    {
+        $post = request()->post();
+        $l_m = new MealLogic();
+        $result = $l_m->createOrder($post);
+        if (empty($result['status'])) {
+            return backjson2(0, $result['msg']);
+        }
+        return backjson2(200, $result['msg'], $result['data']);
+    }
+    /**
+     * 创建支付单
+     *
+     * @return void
+     * @author wj
+     * @date 2022-12-05
+     */
+    public function paymealorder()
+    {
+        $post = request()->post();
+        $l_p = new PayLogic();
+        $result = $l_p->createmealorder($post, 'APP');
+        if (empty($result['status'])) {
+            return backjson2(0, $result['msg']);
+        }
+        return backjson2(200, $result['msg'], $result['data']);
+    }
+    /**
+     * 套餐订购回调
+     *
+     * @return void
+     * @author wj
+     * @date 2022-12-05
+     */
+    public function paycallback_mealorder()
+    {
+        $data = file_get_contents('php://input');
+        $data = xmltoarr($data);
+        $l_p = new PayLogic();
+        $result = $l_p->paycallback_mealorder($data);
+        if (empty($result['status'])) {
+            return backjson2(0, $result['msg']);
+        }
+        return backjson2(200, $result['msg'], $result['data']);
+    }
+    /**
+     * 获取订单列表
+     *
+     * @return void
+     * @author wj
+     * @date 2022-12-05
+     */
+    public function getorderlist()
+    {
+        $post = request()->post();
+        $l_m = new MealLogic();
+        $result = $l_m->getorderlist($post);
+        if (empty($result['status'])) {
+            return backjson2(0, $result['msg']);
+        }
+        return backjson2(200, $result['msg'], $result['data']);
+    }
+}

+ 68 - 0
application/api/controller/User.php

@@ -25,4 +25,72 @@ class User
         }
         return backjson2(200, $result['msg'], $result['data']);
     }
+    /**
+     * 编辑地址
+     *
+     * @return void
+     * @author wj
+     * @date 2022-12-03
+     */
+    public function editaddress()
+    {
+        $post = request()->post();
+        $l_u = new UserLogic();
+        $result = $l_u->editaddress($post);
+        if (empty($result['status'])) {
+            return backjson2(0, $result['msg']);
+        }
+        return backjson2(200, $result['msg'], $result['data']);
+    }
+    /**
+     * 修改默认地址
+     *
+     * @return void
+     * @author wj
+     * @date 2022-12-03
+     */
+    public function updateaddressdefault()
+    {
+        $post = request()->post();
+        $l_u = new UserLogic();
+        $result = $l_u->updateaddressdefault($post);
+        if (empty($result['status'])) {
+            return backjson2(0, $result['msg']);
+        }
+        return backjson2(200, $result['msg'], $result['data']);
+    }
+    /**
+     * 获取全部地址列表
+     *
+     * @return void
+     * @author wj
+     * @date 2022-12-03
+     */
+    public function getaddresslist()
+    {
+        $post = request()->post();
+        $l_u = new UserLogic();
+        $result = $l_u->getaddresslist($post);
+        if (empty($result['status'])) {
+            return backjson2(0, $result['msg']);
+        }
+        return backjson2(200, $result['msg'], $result['data']);
+    }
+    /**
+     * 删除地址
+     *
+     * @return void
+     * @author wj
+     * @date 2022-12-03
+     */
+    public function deleteaddress()
+    {
+        $post = request()->post();
+        $l_u = new UserLogic();
+        $result = $l_u->deleteaddress($post);
+        if (empty($result['status'])) {
+            return backjson2(0, $result['msg']);
+        }
+        return backjson2(200, $result['msg'], $result['data']);
+    }
 }

+ 241 - 0
application/api/logic/MealLogic.php

@@ -0,0 +1,241 @@
+<?php
+namespace app\api\logic;
+
+use app\common\model\CookbookModel;
+use app\common\model\MealcenterModel;
+use app\common\model\MealModel;
+use app\common\model\MealOrdersModel;
+use app\common\model\UserAddressModel;
+use think\Db;
+
+class MealLogic
+{
+    /**
+     * 获取套餐配送中心列表
+     *
+     * @return void
+     * @author wj
+     * @date 2022-12-01
+     */
+    public function getcenterlist($arr)
+    {
+        $fillfields = ['lat', 'long'];
+        foreach ($fillfields as $key => $value) {
+            if (!isset($arr[$value]) || empty($arr[$value])) {
+                return backarr(0, "参数缺少");
+            }
+        }
+        $page = isset($arr['page']) && is_numeric($arr['page']) && !empty($arr['page']) && $arr['page'] > 0 ? $arr['page'] : 1;
+        $size = isset($arr['size']) && is_numeric($arr['size']) && !empty($arr['size']) && $arr['size'] > 0 ? $arr['size'] : 10;
+        $lat = $arr['lat'];
+        $long = $arr['long'];
+
+        $where = ['is_active' => 1];
+        $m_m = new MealcenterModel();
+        $count = $m_m->getList($where, 'count');
+        if ($count <= 0) {
+            return backarr(0, "无数据");
+        }
+        $totalpage = ceil($count / $size);
+        $page > $totalpage && $page = $totalpage;
+        $list = $m_m->getlistbycoord(['lat' => $lat, 'long' => $long], $page, $size);
+        $data = [
+            'page' => $page,
+            'size' => $size,
+            'count' => $count,
+            'list' => $list,
+        ];
+        return backarr(1, "查询成功", $data);
+    }
+    /**
+     * 获取套餐
+     *
+     * @return void
+     * @author wj
+     * @date 2022-12-01
+     */
+    public function getmeals($arr)
+    {
+        $fillfields = ['center_id'];
+        foreach ($fillfields as $key => $value) {
+            if (!isset($arr[$value]) || empty($arr[$value])) {
+                return backarr(0, "参数缺少");
+            }
+        }
+        $center_id = $arr['center_id'];
+        $m_m = new MealModel();
+        $where = [
+            'center_id' => $center_id,
+            'is_active' => 1,
+        ];
+        $mlist = $m_m->getList($where);
+        if (empty($mlist)) {
+            return backarr(0, "无数据");
+        }
+        $m_c = new CookbookModel();
+        foreach ($mlist as $key => $value) {
+            $value['cooks'] = $m_c->getcooks($center_id, $value['id']);
+            $mlist[$key] = $value;
+        }
+        return backarr(1, "查询成功", $mlist);
+    }
+    /**
+     * 创建订单
+     *
+     * @return void
+     * @author wj
+     * @date 2022-12-01
+     */
+    public function createOrder($arr)
+    {
+        $fillfields = ['center_id', 'meal_id', 'quantity', 'user_id'];
+        foreach ($fillfields as $key => $value) {
+            if (!isset($arr[$value]) || empty($arr[$value])) {
+                return backarr(0, "参数缺少");
+            }
+        }
+        $center_id = $arr['center_id'];
+        $meal_id = $arr['meal_id'];
+        $quantity = $arr['quantity'];
+        $userid = $arr['user_id'];
+        $m_mc = new MealcenterModel();
+        $mcinfo = $m_mc->getInfo(['id' => $center_id, 'is_active' => 1]);
+        if (empty($mcinfo)) {
+            return backarr(0, "配餐中心不存在");
+        }
+        $m_m = new MealModel();
+        $minfo = $m_m->getInfo(['id' => $meal_id, 'is_active' => 1]);
+        if (empty($minfo)) {
+            return backarr(0, "套餐信息不存在");
+        }
+        Db::startTrans();
+        try {
+            $m_ua = new UserAddressModel();
+            if (!isset($arr['address_id']) || empty($arr['address_id'])) {
+                $fillfields = ['receiver_address', 'address', 'receiver_name', 'receiver_telno', 'lat', 'long'];
+                foreach ($fillfields as $key => $value) {
+                    if (!isset($arr[$value]) || empty($arr[$value])) {
+                        throw new \Exception("参数缺少");
+                    }
+                }
+                $insertData = [
+                    'receiver_address' => $arr['receiver_address'],
+                    'address' => $arr['address'],
+                    'receiver_name' => $arr['receiver_name'],
+                    'receiver_telno' => $arr['receiver_telno'],
+                    'lat' => $arr['lat'],
+                    'long' => $arr['long'],
+                    'user_id' => $userid,
+                ];
+                $uaid = $m_ua->insertData($insertData);
+                if (empty($uaid)) {
+                    throw new \Exception("地址保存失败");
+                }
+            } else {
+                $uaid = $arr['address_id'];
+                $uinfo = $m_ua->getInfo(['id' => $uaid]);
+                if (empty($uinfo)) {
+                    throw new \Exception("无地址信息");
+                }
+            }
+            $many = bcmul($quantity, $minfo['price'], 2);
+            $m_c = new CookbookModel();
+            $cooks = $m_c->getcooks($center_id, $meal_id)->toArray();
+            $cooksids = implode(',', array_column($cooks, 'id'));
+            $orderno = date('ymdhis') . $center_id . $meal_id . $userid;
+            $remark = isset($arr['remark']) ? $arr['remark'] : '';
+            $insertData = [
+                'center_id' => $center_id,
+                'meal_id' => $meal_id,
+                'orderno' => $orderno,
+                'user_id' => $userid,
+                'address_id' => $uaid,
+                'quantity' => $quantity,
+                'money' => $many,
+                'status' => 0,
+                'createtime' => date('Y-m-d H:i:s'),
+                //'status_delivery' => '',
+                //'deliverytime' => '',
+                'cooks' => $cooksids,
+                'remark' => $remark,
+            ];
+            $m_mo = new MealOrdersModel();
+            $moid = $m_mo->insertData($insertData);
+            if (empty($moid)) {
+                throw new \Exception("订单添加失败");
+            }
+            Db::commit();
+            return backarr(1, "订单添加成功", ['moid' => $moid]);
+        } catch (\Exception $e) {
+            Db::rollback();
+            $msg = $e->getMessage();
+            return backarr(0, $msg);
+        }
+    }
+    /**
+     * 根据id获取订单详情
+     *
+     * @return void
+     * @author wj
+     * @date 2022-12-02
+     */
+    public function getorderinfobyid()
+    {
+
+    }
+    /**
+     * 获取订单列表 客户端查看
+     *
+     * @return void
+     * @author wj
+     * @date 2022-12-03
+     */
+    public function getorderlist($arr)
+    {
+        $wherefields = ['user_id', 'status'];
+        $where = [];
+        foreach ($wherefields as $key => $value) {
+            if ($arr[$value]) {
+                $where[$value] = $arr[$value];
+            }
+        }
+        $page = isset($arr['page']) && is_numeric($arr['page']) && !empty($arr['page']) && $arr['page'] > 0 ? $arr['page'] : 1;
+        $size = isset($arr['size']) && is_numeric($arr['size']) && !empty($arr['size']) && $arr['size'] > 0 ? $arr['size'] : 10;
+        $m_mo = new MealOrdersModel();
+        $m_m = new MealModel();
+        $m_ua = new UserAddressModel();
+        $count = $m_mo->getList($where, 'count');
+        if ($count <= 0) {
+            return backarr(0, "无数据");
+        }
+        $totalpage = ceil($count / $size);
+        $page > $totalpage && $page = $totalpage;
+        $mofield = ['id', 'orderno', 'meal_id', 'center_id', 'user_id', 'address_id', 'quantity', 'status', 'status_delivery'];
+        $list = $m_mo->getList($where, $mofield, $page, $size);
+        foreach ($list as $key => $value) {
+            $minfo = $m_m->getInfo(['id' => $value['meal_id']], ['name_meal', 'price']);
+            $uainfo = $m_ua->getInfo(['id' => $value['address_id']], "*");
+            $value['minfo'] = $minfo;
+            $value['uainfo'] = $uainfo;
+            $list[$key] = $value;
+        }
+        $data = [
+            'page' => $page,
+            'size' => $size,
+            'count' => $count,
+            'list' => $list,
+        ];
+        return backarr(1, "查询成功", $data);
+    }
+    /**
+     * 获取订单列表 配送员查看
+     *
+     * @return void
+     * @author wj
+     * @date 2022-12-03
+     */
+    public function getorderlistforcourier()
+    {
+
+    }
+}

+ 210 - 0
application/api/logic/PayLogic.php

@@ -0,0 +1,210 @@
+<?php
+namespace app\api\logic;
+
+use app\common\server\WatchPay;
+use app\common\model\MealOrdersModel;
+use app\common\model\PayorderModel;
+use think\Db;
+use think\Facade\Log;
+
+class PayLogic
+{
+    //套餐订购支付单创建
+    public function createmealorder($arr, $tradetype = "APP")
+    {
+        $fillfields = ['orderno', 'user_id'];
+        foreach ($fillfields as $key => $value) {
+            if (!isset($arr[$value]) || empty($arr[$value])) {
+                return backarr(0, "参数缺少");
+            }
+        }
+        $orderno = $arr['orderno'];
+        $userid = $arr['user_id'];
+        $m_mo = new MealOrdersModel();
+        $where = [
+            'orderno' => $orderno,
+            'user_id' => $userid,
+            'status' => 0,
+        ];
+        $moinfo = $m_mo->getInfo($where);
+        if (empty($moinfo)) {
+            return backarr(0, "订单信息不存在");
+        }
+        $notify_url = "https://app.tjzhxx.cn:11443/index.php/api/pay/paycallback_mealorder"; //支付回调地址
+        $trade_type = $tradetype;
+        $total_fee = bcmul($moinfo['money'], 100);
+        $body = '套餐订购';
+        $orderinfo = [
+            'body' => $body,
+            'total_fee' => $total_fee,
+            'notify_url' => $notify_url,
+            'orderNo' => $moinfo['orderno'],
+            'trade_type' => $trade_type,
+        ];
+        $s_wp = new WatchPay();
+        switch ($tradetype) {
+            case 'APP':
+                $appid = $s_wp->getConfig('appidApp');
+                break;
+            case 'JSAPI':
+                $appid = $s_wp->getConfig('appid');
+                break;
+            default:
+                //默认app
+                $appid = $s_wp->getConfig('appidApp');
+                break;
+        }
+        $orderinfo['appid'] = $appid;
+        $result = $s_wp->crateOrder($orderinfo);
+        if (empty($result)) {
+            return backarr(0, "微信订单创建失败");
+        }
+        $return_msg = $result['return_msg'];
+        if ('OK' != $return_msg) {
+            return backarr(0, $return_msg);
+        }
+        //下单成功
+        Db::startTrans();
+        try {
+            $m_p = new PayorderModel();
+            $insertData = [
+                'type' => 1,
+                'kind' => 1,
+                'ref_id' => $moinfo['id'],
+                'user_id' => $userid,
+                'payfee' => $total_fee,
+                'outorderno' => $orderinfo['orderNo'],
+                'status' => 0,
+                'cratetime' => date('Y-m-d H:i:s'),
+            ];
+            $pid = $m_p->insertData($insertData);
+            if (empty($pid)) {
+                throw new \Exception("支付单创建失败");
+            }
+            $prepayid = $result['prepay_id'];
+            $returnData = [
+                'appid' => $result['appid'], //应用id
+                'partnerid' => $result['mch_id'], //商户号
+                'prepayid' => $prepayid, //预支付交易会话ID
+                //'package' => 'Sign=WXPay', //订单详情扩展字符串
+                'noncestr' => $result['nonce_str'], //随机字符串
+                'timestamp' => time() . "",
+                //'sign' => '', //签名
+            ];
+            switch ($tradetype) {
+                case 'APP':
+                    $returnData['package'] = 'Sign=WXPay';
+                    break;
+                case 'JSAPI':
+                    $returnData['package'] = "prepay_id=" . $prepayid;
+                    break;
+                default:
+                    //默认app
+                    $returnData['package'] = 'Sign=WXPay';
+                    break;
+            }
+            $sign = $s_wp->getsign($returnData);
+            $returnData['sign'] = $sign;
+            $pupdateData = [
+                'prepay_id' => $result['prepay_id'],
+            ];
+            $row = $m_p->updateinfo(['id' => $pid], $pupdateData);
+            if (empty($row)) {
+                Log::error("支付单修改失败");
+            }
+            $returnData['orderid'] = $moinfo['id'];
+            Db::commit();
+            return backarr(1, "订单创建成功", $returnData);
+        } catch (\Exception $e) {
+            Db::rollback();
+            $msg = $e->getMessage();
+            //var_dump($msg, $e->getTraceAsString());
+            return backarr(0, $msg);
+        }
+    }
+    /**
+     * 套餐订购单回调
+     *
+     * @return void
+     * @author wj
+     * @date 2022-12-02
+     */
+    public function paycallback_mealorder($arr)
+    {
+        $reurnData = [
+            "return_code" => "SUCCESS",
+            "return_msg" => "OK",
+        ];
+        Db::startTrans();
+        try {
+            $orderstatus = 2; //2支付失败 1支付成功
+            $ispay = 0; //是否已支付 0否 1是
+            $mostatus = -1; //订购单支付状态 1成功 -1失败
+            //app 可能返回  trade_state
+            if (isset($arr['trade_state'])) {
+                $paystatus = $arr['trade_state'];
+            } else {
+                $paystatus = $arr['result_code'];
+            }
+            if ("SUCCESS" == $paystatus) {
+                $orderstatus = 1;
+                $ispay = 1;
+                $mostatus = 1;
+            }
+            $orderno = $arr['out_trade_no'];
+            $m_mo = new MealOrdersModel();
+            $moinfo = $m_mo->getInfo(['orderno' => $orderno]);
+            if (empty($moinfo)) {
+                throw new \Exception("无订单信息");
+            }
+            if (1 == $moinfo['status']) {
+                throw new \Exception("订购单已支付", 2);
+            }
+            $moid = $moinfo['id'];
+            $m_p = new PayorderModel();
+            $pinfo = $m_p->getInfo(['ref_id' => $moid, 'kind' => 1, 'type' => 1]);
+            if (empty($pinfo)) {
+                throw new \Exception("无支付单信息");
+            }
+            if (1 == $pinfo['status']) {
+                throw new \Exception("支付单已支付", 2);
+            }
+            $pid = $pinfo['id'];
+            $time = date('Y-m-d H:i:s');
+            $moupdateData = [
+                'status' => $mostatus,
+                'paytime' => $time,
+            ];
+            $row = $m_mo->updateinfo(['id' => $moid], $moupdateData);
+            if (empty($row)) {
+                throw new \Exception("套餐订购单修改失败");
+            }
+            $pupdateData = [
+                'status' => $orderstatus,
+                'is_pay' => $ispay,
+                'paytime' => $time,
+                'is_rect_back' => 1,
+            ];
+            $row = $m_p->updateinfo(['id' => $pid], $pupdateData);
+            if (empty($row)) {
+                throw new \Exception("套餐订购支付单修改失败");
+            }
+            Db::commit();
+            log::info("commit");
+            $xml = arrtoxml($reurnData);
+            exit($xml);
+        } catch (\Exception $e) {
+            $code = $e->getCode();
+            $reurnData['return_msg'] = $e->getMessage();
+            if (2 == $code) {
+                $reurnData['return_code'] = "SUCCESS";
+            } else {
+                $reurnData['return_code'] = "FAIL";
+            }
+            Db::rollback();
+            log::info("rollback");
+            $xml = arrtoxml($reurnData);
+            exit($xml);
+        }
+    }
+}

+ 53 - 0
application/api/logic/SettingLogic.php

@@ -0,0 +1,53 @@
+<?php
+namespace app\api\logic;
+
+use app\common\model\SettingModel;
+
+class SettingLogic
+{
+    /**
+     * 设置配置值
+     *
+     * @param  [type] $arr
+     * @return void
+     * @author wj
+     * @date 2022-12-01
+     */
+    public function setinfo($arr)
+    {
+        $keys = array_keys($arr);
+        if (empty($keys)) {
+            return backarr(0, "无修改内容");
+        }
+        $m_s = new SettingModel();
+        $where = ['key', ['in' => $keys]];
+        $list = $m_s->getList($where, '*', 1, 0);
+        foreach ($list as $key => $value) {
+            if ($value['value'] != $arr[$value['key']]) {
+                $upateData = ['value' => $arr[$value['key']]];
+                $where = ['id' => $value['id']];
+                $row = $m_s->updateinfo($where, $upateData);
+                if (empty($row)) {
+                    return backarr(0, "修改失败");
+                }
+            }
+        }
+    }
+    /**
+     * 获取配置值
+     *
+     * @return void
+     * @author wj
+     * @date 2022-12-01
+     */
+    public function getinfo($key)
+    {
+        $where = ['key' => $key];
+        $m_s = new SettingModel();
+        $info = $m_s->getInfo($where);
+        if (empty($info)) {
+            return false;
+        }
+        return $info['value'];
+    }
+}

+ 141 - 0
application/api/logic/UserLogic.php

@@ -1,6 +1,7 @@
 <?php
 namespace app\api\logic;
 
+use app\common\model\UserAddressModel;
 use app\common\model\UserModel;
 
 class UserLogic
@@ -99,4 +100,144 @@ class UserLogic
         $token = sha1($str . $str);
         return $token;
     }
+    /**
+     * 编辑地址
+     *
+     * @return void
+     * @author wj
+     * @date 2022-12-01
+     */
+    public function editaddress($arr)
+    {
+        $fillfields = ['receiver_address', 'address', 'receiver_name', 'receiver_telno', 'lat', 'long', 'user_id'];
+        foreach ($fillfields as $key => $value) {
+            if (!isset($arr[$value]) || empty($arr[$value])) {
+                return backarr(0, "参数缺少");
+            }
+        }
+        $isadd = true;
+        $m_ua = new UserAddressModel();
+        if (isset($arr['id'])) {
+            if (isset($arr['user_id'])) {
+                //user_id 不可更改
+                unset($arr['user_id']);
+            }
+            $id = $arr['id'];
+            $uawhere = ['id' => $id];
+            $uainfo = $m_ua->getInfo($uawhere);
+            if (!empty($uainfo)) {
+                $isadd = false;
+                //修改
+                $updateData = [];
+                foreach ($arr as $key => $value) {
+                    if (isset($uainfo[$key]) && $uainfo[$key] != $value) {
+                        $updateData[$key] = $value;
+                    }
+                }
+                $row = $m_ua->updateinfo(['id' => $id], $updateData);
+                if (empty($row)) {
+                    return backarr(0, "地址修改失败");
+                }
+            }
+            $uaid = $uainfo['id'];
+        }
+        if ($isadd) {
+            //添加
+            $uaid = $m_ua->insertData($arr);
+            if (empty($uaid)) {
+                return backarr(0, "地址添加失败");
+            }
+        }
+        return backarr(1, "地址编辑成功", ['uaid' => $uaid]);
+    }
+    /**
+     * 修改默认地址
+     *
+     * @return void
+     * @author wj
+     * @date 2022-12-01
+     */
+    public function updateaddressdefault($arr)
+    {
+        $fillfields = ['id', 'user_id'];
+        foreach ($fillfields as $key => $value) {
+            if (!isset($arr[$value]) || empty($arr[$value])) {
+                return backarr(0, "参数缺少");
+            }
+        }
+        $id = $arr['id'];
+        $user_id = $arr['user_id'];
+        $updateData = ['is_default' => 0];
+        $where = ['user_id' => $user_id];
+        $m_ua = new UserAddressModel();
+        $m_ua->updateinfo($where, $updateData);
+        $where = ['id' => $id, 'user_id' => $user_id];
+        $updateData = ['is_default' => 1];
+        $row = $m_ua->updateinfo($where, $updateData);
+        if (empty($row)) {
+            return backarr(0, "默认地址修改失败");
+        }
+        return backarr(1, "默认地址修改成功", ['uaid' => $id]);
+    }
+    /**
+     * 删除地址
+     *
+     * @return void
+     * @author wj
+     * @date 2022-12-01
+     */
+    public function deleteaddress($arr)
+    {
+        $fillfields = ['id', 'user_id'];
+        foreach ($fillfields as $key => $value) {
+            if (!isset($arr[$value]) || empty($arr[$value])) {
+                return backarr(0, "参数缺少");
+            }
+        }
+        $id = $arr['id'];
+        $user_id = $arr['user_id'];
+        $m_ua = new UserAddressModel();
+        $where = ['id' => $id, 'user_id' => $user_id];
+        $updateData = ['is_active' => 0];
+        $row = $m_ua->updateinfo($where, $updateData);
+        if (empty($row)) {
+            return backarr(0, "地址删除失败");
+        }
+        return backarr(1, "地址删除成功", ['uaid' => $id]);
+    }
+    /**
+     * 获取全部地址列表
+     *
+     * @return void
+     * @author wj
+     * @date 2022-12-01
+     */
+    public function getaddresslist($arr)
+    {
+        $userid = isset($arr['userid']) && is_numeric($arr['userid']) && !empty($arr['userid']) && $arr['userid'] > 0 ? $arr['userid'] : 0;
+        $page = isset($arr['page']) && is_numeric($arr['page']) && !empty($arr['page']) && $arr['page'] > 0 ? $arr['page'] : 1;
+        $size = isset($arr['size']) && is_numeric($arr['size']) && !empty($arr['size']) && $arr['size'] > 0 ? $arr['size'] : 10;
+        $where = [];
+        if (!empty($userid)) {
+            $where['userid'] = $userid;
+        }
+        if(isset($arr['is_active'])){
+            $where['is_active'] = $arr['is_active'];
+        }   
+        $m_ua = new UserAddressModel();
+        $count = $m_ua->getList($where, 'count');
+        if ($count <= 0) {
+            return backarr(0, "无数据");
+        }
+        $totalpage = ceil($count / $size);
+        $page > $totalpage && $page = $totalpage;
+        $list = $m_ua->getList($where, "*", $page, $size, 'is_default,id desc');
+        $data = [
+            'page' => $page,
+            'size' => $size,
+            'count' => $count,
+            'list' => $list,
+        ];
+        return backarr(1, "查询成功", $data);
+    }
 }

+ 85 - 0
application/common.php

@@ -36,3 +36,88 @@ function backarr($status, $msg = "", $data = [])
     ];
     return $backData;
 }
+/**
+ * 获取星期几
+ *
+ * @param  string  $day
+ * @param  integer $type
+ * @return void
+ * @author wj
+ * @date 2022-12-02
+ */
+function getweek($day = '', $type = 1)
+{
+    $weekarr = [7, 1, 2, 3, 4, 5, 6];
+    if (empty($day)) {
+        $day = time();
+    } else {
+        switch ($type) {
+            case 1:
+                $day = strtotime($day);
+                break;
+        }
+    }
+    $date = date('w', $day);
+    return $weekarr[$date];
+}
+/**
+ * 数组转xml
+ *
+ * @param  [type] $arr
+ * @param  [type] $xml
+ * @param  string $root
+ * @return void
+ * @author wj
+ * @date 2022-12-02
+ */
+function arrtoxml($arr, $xml = null, $root = '')
+{
+    if (empty($xml)) {
+        header("Content-type:text/xml;Charset=UTF-8");
+        $xml = new XMLWriter();
+        $xml->openMemory();
+        //$xml->startDocument('1.0', 'UTF-8');
+        if (!empty($root)) {
+            $xml->startElement($root);
+        } else {
+            $xml->setIndent(true);
+        }
+        arrtoxml($arr, $xml);
+        if (!empty($root)) {
+            $xml->endElement();
+        }
+        $xml->endDocument();
+        return $xml->outputMemory(true);
+    } else {
+        if (is_array($arr)) {
+            foreach ($arr as $key => $value) {
+                if (is_array($value)) {
+                    $xml->startElement($key);
+                    arrtoxml($value, $xml);
+                    $xml->endElement();
+                } else {
+                    if (is_numeric($value)) {
+                        $xml->writeElement($key, $value);
+                    } else {
+                        $xml->startElement($key);
+                        $xml->writeCdata($value);
+                        $xml->endElement();
+                    }
+                }
+            }
+        }
+    }
+}
+/**
+ * xml转数组
+ *
+ * @return void
+ * @author wj
+ * @date 2022-12-02
+ */
+function xmltoarr($xml)
+{
+    $arr = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
+    $arr = json_decode(json_encode($arr), true);
+    return $arr;
+}

+ 104 - 0
application/common/model/CookbookModel.php

@@ -0,0 +1,104 @@
+<?php
+namespace app\common\model;
+
+use think\Model;
+
+class CookbookModel extends Model
+{
+    protected $table = "t_cookbook";
+
+    public function insertData($data)
+    {
+        if (!isset($data['createtime']) || empty($data['createtime']) || !is_string($data['createtime'])) {
+            $data['createtime'] = date("Y-m-d H:i:s");
+        }
+        if (isset($data['id'])) {
+            unset($data['id']);
+        }
+        $data = $this->formatData($data);
+        if (empty($data)) {
+            return false;
+        }
+        $id = $this->insertGetId($data);
+        return $id ? $id : false;
+    }
+
+    /**
+     * 校验入库数据
+     * 20220119
+     */
+    private function formatData($data)
+    {
+        $useData = [];
+        $fields = $this->getTableFields();
+        foreach ($data as $key => $value) {
+            if (in_array($key, $fields)) {
+                $useData[$key] = $value;
+            }
+        }
+        return $useData;
+    }
+    public function getInfo($where, $field = "*", $row = true)
+    {
+        $info = $this->field($field)->where($where);
+        if ($row) {
+            $info = $info->find();
+        } else {
+            $info = $info->select();
+        }
+        return empty($info) ? false : $info;
+    }
+
+    public function updateinfo($where, $updateData)
+    {
+        $row = $this->where($where)->update($updateData);
+        return empty($row) ? false : $row;
+    }
+
+    public function deleteinfo($where)
+    {
+        $row = $this->where($where)->delete();
+        return empty($row) ? false : $row;
+    }
+
+    public function getList($where = [], $field = "*", $page = 1, $size = 10, $order = "id desc", $group = "", $row = false)
+    {
+        $sqlObj = $this->where($where);
+        if ("count" != $field) {
+            if (empty($size)) {
+                $sqlObj = $sqlObj->field($field)->order($order)->group($group);
+            } else {
+                $sqlObj = $sqlObj->field($field)->order($order)->group($group)->page($page, $size);
+            }
+            if ($row) {
+                $data = $sqlObj->find();
+            } else {
+                $data = $sqlObj->select();
+            }
+        } else {
+            $data = $sqlObj->count();
+        }
+        return $data;
+    }
+    /**
+     * 返回当日菜单 根据中心id和套餐id
+     *
+     * @param  [type] $center_id
+     * @param  [type] $meal_id
+     * @return void
+     * @author wj
+     * @date 2022-12-02
+     */
+    public function getcooks($center_id,$meal_id){
+        $week = getweek();
+        $is_active =1;
+        $where = [
+            'center_id' => $center_id,
+            'week' => $week,
+            'meal_id' => $meal_id,
+            'is_active' => $is_active,
+        ];
+        $list = $this->where($where)->select();
+        return empty($list)?[]:$list;
+    }
+}

+ 83 - 0
application/common/model/MealModel.php

@@ -0,0 +1,83 @@
+<?php
+namespace app\common\model;
+
+use think\Model;
+
+class MealModel extends Model
+{
+    protected $table = "t_meal";
+
+    public function insertData($data)
+    {
+        if (!isset($data['createtime']) || empty($data['createtime']) || !is_string($data['createtime'])) {
+            $data['createtime'] = date("Y-m-d H:i:s");
+        }
+        if (isset($data['id'])) {
+            unset($data['id']);
+        }
+        $data = $this->formatData($data);
+        if (empty($data)) {
+            return false;
+        }
+        $id = $this->insertGetId($data);
+        return $id ? $id : false;
+    }
+
+    /**
+     * 校验入库数据
+     * 20220119
+     */
+    private function formatData($data)
+    {
+        $useData = [];
+        $fields = $this->getTableFields();
+        foreach ($data as $key => $value) {
+            if (in_array($key, $fields)) {
+                $useData[$key] = $value;
+            }
+        }
+        return $useData;
+    }
+    public function getInfo($where, $field = "*", $row = true)
+    {
+        $info = $this->field($field)->where($where);
+        if ($row) {
+            $info = $info->find();
+        } else {
+            $info = $info->select();
+        }
+        return empty($info) ? false : $info;
+    }
+
+    public function updateinfo($where, $updateData)
+    {
+        $row = $this->where($where)->update($updateData);
+        return empty($row) ? false : $row;
+    }
+
+    public function deleteinfo($where)
+    {
+        $row = $this->where($where)->delete();
+        return empty($row) ? false : $row;
+    }
+
+    public function getList($where = [], $field = "*", $page = 1, $size = 10, $order = "id desc", $group = "", $row = false)
+    {
+        $sqlObj = $this->where($where);
+        if ("count" != $field) {
+            if (empty($size)) {
+                $sqlObj = $sqlObj->field($field)->order($order)->group($group);
+            } else {
+                $sqlObj = $sqlObj->field($field)->order($order)->group($group)->page($page, $size);
+            }
+            if ($row) {
+                $data = $sqlObj->find();
+            } else {
+                $data = $sqlObj->select();
+            }
+        } else {
+            $data = $sqlObj->count();
+        }
+        return $data;
+    }
+}

+ 83 - 0
application/common/model/MealOrdersModel.php

@@ -0,0 +1,83 @@
+<?php
+namespace app\common\model;
+
+use think\Model;
+
+class MealOrdersModel extends Model
+{
+    protected $table = "t_meal_orders";
+
+    public function insertData($data)
+    {
+        if (!isset($data['createtime']) || empty($data['createtime']) || !is_string($data['createtime'])) {
+            $data['createtime'] = date("Y-m-d H:i:s");
+        }
+        if (isset($data['id'])) {
+            unset($data['id']);
+        }
+        $data = $this->formatData($data);
+        if (empty($data)) {
+            return false;
+        }
+        $id = $this->insertGetId($data);
+        return $id ? $id : false;
+    }
+
+    /**
+     * 校验入库数据
+     * 20220119
+     */
+    private function formatData($data)
+    {
+        $useData = [];
+        $fields = $this->getTableFields();
+        foreach ($data as $key => $value) {
+            if (in_array($key, $fields)) {
+                $useData[$key] = $value;
+            }
+        }
+        return $useData;
+    }
+    public function getInfo($where, $field = "*", $row = true)
+    {
+        $info = $this->field($field)->where($where);
+        if ($row) {
+            $info = $info->find();
+        } else {
+            $info = $info->select();
+        }
+        return empty($info) ? false : $info;
+    }
+
+    public function updateinfo($where, $updateData)
+    {
+        $row = $this->where($where)->update($updateData);
+        return empty($row) ? false : $row;
+    }
+
+    public function deleteinfo($where)
+    {
+        $row = $this->where($where)->delete();
+        return empty($row) ? false : $row;
+    }
+
+    public function getList($where = [], $field = "*", $page = 1, $size = 10, $order = "id desc", $group = "", $row = false)
+    {
+        $sqlObj = $this->where($where);
+        if ("count" != $field) {
+            if (empty($size)) {
+                $sqlObj = $sqlObj->field($field)->order($order)->group($group);
+            } else {
+                $sqlObj = $sqlObj->field($field)->order($order)->group($group)->page($page, $size);
+            }
+            if ($row) {
+                $data = $sqlObj->find();
+            } else {
+                $data = $sqlObj->select();
+            }
+        } else {
+            $data = $sqlObj->count();
+        }
+        return $data;
+    }
+}

+ 110 - 0
application/common/model/MealcenterModel.php

@@ -0,0 +1,110 @@
+<?php
+namespace app\common\model;
+
+use think\Model;
+
+class MealcenterModel extends Model
+{
+    protected $table = "t_mealcenter";
+
+    public function insertData($data)
+    {
+        if (!isset($data['createtime']) || empty($data['createtime']) || !is_string($data['createtime'])) {
+            $data['createtime'] = date("Y-m-d H:i:s");
+        }
+        if (isset($data['id'])) {
+            unset($data['id']);
+        }
+        $data = $this->formatData($data);
+        if (empty($data)) {
+            return false;
+        }
+        $id = $this->insertGetId($data);
+        return $id ? $id : false;
+    }
+
+    /**
+     * 校验入库数据
+     * 20220119
+     */
+    private function formatData($data)
+    {
+        $useData = [];
+        $fields = $this->getTableFields();
+        foreach ($data as $key => $value) {
+            if (in_array($key, $fields)) {
+                $useData[$key] = $value;
+            }
+        }
+        return $useData;
+    }
+    public function getInfo($where, $field = "*", $row = true)
+    {
+        $info = $this->field($field)->where($where);
+        if ($row) {
+            $info = $info->find();
+        } else {
+            $info = $info->select();
+        }
+        return empty($info) ? false : $info;
+    }
+
+    public function updateinfo($where, $updateData)
+    {
+        $row = $this->where($where)->update($updateData);
+        return empty($row) ? false : $row;
+    }
+
+    public function deleteinfo($where)
+    {
+        $row = $this->where($where)->delete();
+        return empty($row) ? false : $row;
+    }
+
+    public function getList($where = [], $field = "*", $page = 1, $size = 10, $order = "id desc", $group = "", $row = false)
+    {
+        $sqlObj = $this->where($where);
+        if ("count" != $field) {
+            if (empty($size)) {
+                $sqlObj = $sqlObj->field($field)->order($order)->group($group);
+            } else {
+                $sqlObj = $sqlObj->field($field)->order($order)->group($group)->page($page, $size);
+            }
+            if ($row) {
+                $data = $sqlObj->find();
+            } else {
+                $data = $sqlObj->select();
+            }
+        } else {
+            $data = $sqlObj->count();
+        }
+        return $data;
+    }
+
+    public function getlistbycoord($where, $page = 1, $size = 0)
+    {
+        $long = $where['long'];
+        $lat = $where['lat'];
+        $startinex = ($page - 1) * $size;
+        $sql = "
+            select * from
+            (
+                select
+                m.*,
+                st_distance_sphere(
+                    point(
+                    CAST(m.long AS decimal(11,8)),
+                    CAST(m.lat AS decimal(11,8))
+                    ),
+                    point(
+                    CAST(" . $long . " AS decimal(11,8)),
+                    CAST(" . $lat . " AS decimal(11,8))
+                    )
+                ) as distance
+                from t_mealcenter as m where is_active=1
+            ) as tab order by distance asc limit " . $startinex . "," . $size . "
+        ";
+        $list = $this->query($sql);
+        return $list;
+    }
+}

+ 83 - 0
application/common/model/PayorderModel.php

@@ -0,0 +1,83 @@
+<?php
+namespace app\common\model;
+
+use think\Model;
+
+class PayorderModel extends Model
+{
+    protected $table = "t_payorder";
+
+    public function insertData($data)
+    {
+        if (!isset($data['createtime']) || empty($data['createtime']) || !is_string($data['createtime'])) {
+            $data['createtime'] = date("Y-m-d H:i:s");
+        }
+        if (isset($data['id'])) {
+            unset($data['id']);
+        }
+        $data = $this->formatData($data);
+        if (empty($data)) {
+            return false;
+        }
+        $id = $this->insertGetId($data);
+        return $id ? $id : false;
+    }
+
+    /**
+     * 校验入库数据
+     * 20220119
+     */
+    private function formatData($data)
+    {
+        $useData = [];
+        $fields = $this->getTableFields();
+        foreach ($data as $key => $value) {
+            if (in_array($key, $fields)) {
+                $useData[$key] = $value;
+            }
+        }
+        return $useData;
+    }
+    public function getInfo($where, $field = "*", $row = true)
+    {
+        $info = $this->field($field)->where($where);
+        if ($row) {
+            $info = $info->find();
+        } else {
+            $info = $info->select();
+        }
+        return empty($info) ? false : $info;
+    }
+
+    public function updateinfo($where, $updateData)
+    {
+        $row = $this->where($where)->update($updateData);
+        return empty($row) ? false : $row;
+    }
+
+    public function deleteinfo($where)
+    {
+        $row = $this->where($where)->delete();
+        return empty($row) ? false : $row;
+    }
+
+    public function getList($where = [], $field = "*", $page = 1, $size = 10, $order = "id desc", $group = "", $row = false)
+    {
+        $sqlObj = $this->where($where);
+        if ("count" != $field) {
+            if (empty($size)) {
+                $sqlObj = $sqlObj->field($field)->order($order)->group($group);
+            } else {
+                $sqlObj = $sqlObj->field($field)->order($order)->group($group)->page($page, $size);
+            }
+            if ($row) {
+                $data = $sqlObj->find();
+            } else {
+                $data = $sqlObj->select();
+            }
+        } else {
+            $data = $sqlObj->count();
+        }
+        return $data;
+    }
+}

+ 77 - 0
application/common/model/SettingModel.php

@@ -0,0 +1,77 @@
+<?php
+namespace app\common\model;
+
+use think\Model;
+
+class SettingModel extends Model
+{
+    protected $table = "t_setting";
+
+    public function insertData($data)
+    {
+        $data = $this->formatData($data);
+        if (empty($data)) {
+            return false;
+        }
+        $id = $this->insertGetId($data);
+        return $id ? $id : false;
+    }
+
+    /**
+     * 校验入库数据
+     * 20220119
+     */
+    private function formatData($data)
+    {
+        $useData = [];
+        $fields = $this->getTableFields();
+        foreach ($data as $key => $value) {
+            if (in_array($key, $fields)) {
+                $useData[$key] = $value;
+            }
+        }
+        return $useData;
+    }
+    public function getInfo($where, $field = "*", $row = true)
+    {
+        $info = $this->field($field)->where($where);
+        if ($row) {
+            $info = $info->find();
+        } else {
+            $info = $info->select();
+        }
+        return empty($info) ? false : $info;
+    }
+
+    public function updateinfo($where, $updateData)
+    {
+        $row = $this->where($where)->update($updateData);
+        return empty($row) ? false : $row;
+    }
+
+    public function deleteinfo($where)
+    {
+        $row = $this->where($where)->delete();
+        return empty($row) ? false : $row;
+    }
+
+    public function getList($where = [], $field = "*", $page = 1, $size = 10, $order = "id desc", $group = "", $row = false)
+    {
+        $sqlObj = $this->where($where);
+        if ("count" != $field) {
+            if (empty($size)) {
+                $sqlObj = $sqlObj->field($field)->order($order)->group($group);
+            } else {
+                $sqlObj = $sqlObj->field($field)->order($order)->group($group)->page($page, $size);
+            }
+            if ($row) {
+                $data = $sqlObj->find();
+            } else {
+                $data = $sqlObj->select();
+            }
+        } else {
+            $data = $sqlObj->count();
+        }
+        return $data;
+    }
+}

+ 83 - 0
application/common/model/UserAddressModel.php

@@ -0,0 +1,83 @@
+<?php
+namespace app\common\model;
+
+use think\Model;
+
+class UserAddressModel extends Model
+{
+    protected $table = "t_user_address";
+
+    public function insertData($data)
+    {
+        if (!isset($data['createtime']) || empty($data['createtime']) || !is_string($data['createtime'])) {
+            $data['createtime'] = date("Y-m-d H:i:s");
+        }
+        if (isset($data['id'])) {
+            unset($data['id']);
+        }
+        $data = $this->formatData($data);
+        if (empty($data)) {
+            return false;
+        }
+        $id = $this->insertGetId($data);
+        return $id ? $id : false;
+    }
+
+    /**
+     * 校验入库数据
+     * 20220119
+     */
+    private function formatData($data)
+    {
+        $useData = [];
+        $fields = $this->getTableFields();
+        foreach ($data as $key => $value) {
+            if (in_array($key, $fields)) {
+                $useData[$key] = $value;
+            }
+        }
+        return $useData;
+    }
+    public function getInfo($where, $field = "*", $row = true)
+    {
+        $info = $this->field($field)->where($where);
+        if ($row) {
+            $info = $info->find();
+        } else {
+            $info = $info->select();
+        }
+        return empty($info) ? false : $info;
+    }
+
+    public function updateinfo($where, $updateData)
+    {
+        $row = $this->where($where)->update($updateData);
+        return empty($row) ? false : $row;
+    }
+
+    public function deleteinfo($where)
+    {
+        $row = $this->where($where)->delete();
+        return empty($row) ? false : $row;
+    }
+
+    public function getList($where = [], $field = "*", $page = 1, $size = 10, $order = "id desc", $group = "", $row = false)
+    {
+        $sqlObj = $this->where($where);
+        if ("count" != $field) {
+            if (empty($size)) {
+                $sqlObj = $sqlObj->field($field)->order($order)->group($group);
+            } else {
+                $sqlObj = $sqlObj->field($field)->order($order)->group($group)->page($page, $size);
+            }
+            if ($row) {
+                $data = $sqlObj->find();
+            } else {
+                $data = $sqlObj->select();
+            }
+        } else {
+            $data = $sqlObj->count();
+        }
+        return $data;
+    }
+}

+ 209 - 0
application/common/server/WatchPay.php

@@ -0,0 +1,209 @@
+<?php
+namespace app\api\server;
+
+use think\Facade\Log;
+
+/**
+ * 微信支付
+ *
+ * @author wj
+ * @date 2022-12-02
+ */
+/*
+统一下订单回执
+<xml>
+  <return_code><![CDATA[SUCCESS]]></return_code>
+  <return_msg><![CDATA[OK]]></return_msg>
+  <result_code><![CDATA[SUCCESS]]></result_code>
+  <mch_id><![CDATA[10000100]]></mch_id>
+  <appid><![CDATA[wx2421b1c4370ec43b]]></appid>
+  <sub_mch_id><![CDATA[375907253]]></sub_mch_id>
+  <device_info><![CDATA[123001]]></device_info>
+  <nonce_str><![CDATA[mb8t557HOLqv0soV]]></nonce_str>
+  <sign><![CDATA[A530CC111F66A1A6B040D4923E2D2726]]></sign>
+  <prepay_id><![CDATA[wx04025233661291269e5f7daa32c5aa0000]]></prepay_id>
+  <trade_type><![CDATA[APP]]></trade_type>
+</xml>
+ */
+class WatchPay
+{
+    //统一下单api路径
+    private $unifiedorderurl = "https://api.mch.weixin.qq.com/pay/unifiedorder";
+    //水猫工匠商户信息
+    private $config = [
+        'appid' => "wxcacf6eb6e7478e29",
+        'appidApp' => "wxe554be4a48e92d5a",
+        'MCHID' => '1616316171',
+        'KEY' => "WaterCat20211001ShuiMaoGongJiang",
+    ];
+
+    public function setConfig($config)
+    {
+        foreach ($this->$config as $key => $value) {
+            if (empty($value) != $config[$key]) {
+                $this->config[$key] = $config[$key];
+            }
+        }
+    }
+
+    public function getConfig($field)
+    {
+        if (isset($this->config[$field])) {
+            return $this->config[$field];
+        }
+        return false;
+    }
+    /**
+     * 获取订单信息
+     *
+     * @return void
+     * @author wj
+     * @date 2022-12-02
+     */
+    public function getorderinfo($orderInfo)
+    {
+        $config = $this->config;
+        $mchid = $config['MCHID'];
+        $key = $config['KEY'];
+        $body = $orderInfo['body'];
+        $total_fee = $orderInfo['total_fee'];
+        $notify_url = $orderInfo['notify_url'];
+        //$appid = $config['appid'];
+        $ordrNo = $orderInfo['orderNo'];
+        $trade_type = $orderInfo['trade_type'];
+        $appid = $orderInfo['appid'];
+        $data = [
+            "appid" => $appid, //服务商应用ID
+            "mch_id" => $mchid, //服务商应用ID
+            "nonce_str" => md5($mchid . time()),
+            "body" => $body,
+            "out_trade_no" => $ordrNo,
+            "notify_url" => $notify_url,
+            "total_fee" => $total_fee,
+            "currency" => "CNY",
+            "spbill_create_ip" => '8.8.8.8',
+            'trade_type' => $trade_type,
+        ];
+        if (isset($orderInfo['openid'])) {
+            $openid = $orderInfo['openid'];
+            $data['openid'] = $openid;
+        }
+        ksort($data);
+        $sign_str = $this->ToUrlParams($data);
+        $sign_str = $sign_str . "&key=" . $key;
+        $data['sign'] = strtoupper(md5($sign_str));
+        return $data;
+
+    }
+    /**
+     * 创建订单 统一下单
+     *
+     * @param  [type] $orderinfo
+     * @return void
+     * @author wj
+     * @date 2022-12-02
+     */
+    public function crateOrder($orderinfo)
+    {
+        $data = $this->getorderinfo($orderinfo);
+        Log::info($data);
+        $xml = arrtoxml($data, null, 'xml');
+        //$xml = $this->arrayToXml($data);
+        $url = $this->unifiedorderurl;
+        Log::info($url);
+        Log::info($xml);
+        $resultxml = $this->postXmlCurl($xml, $url, true);
+        $result = $this->getpayback($resultxml);
+        return $result;
+    }
+    /**
+     * 解析并记录返回的xml
+     *
+     * @param  [type] $xml
+     * @return void
+     * @author wj
+     * @date 2022-12-02
+     */
+    public function getpayback($xml)
+    {
+        Log::info($xml);
+        $result = xmltoarr($xml);
+        Log::info($result);
+        return $result;
+    }
+    /*
+     *   用于微信支付转换认证的信息用的
+     *   by:leoyi
+     *   date:2018-4-8
+     */
+    public function ToUrlParams($data)
+    {
+        $buff = "";
+        foreach ($data as $k => $v) {
+            if ($k != "sign" && $v != "" && !is_array($v)) {
+                $buff .= $k . "=" . $v . "&";
+            }
+        }
+
+        $buff = trim($buff, "&");
+        return $buff;
+    }
+    /**
+     * 用户post方法请求xml信息用的
+     * @author write by leoyi 2018-04-8
+     */
+    public function postXmlCurl($xml, $url, $useCert = false, $second = 10)
+    {
+        $ch = curl_init();
+        //设置超时
+        curl_setopt($ch, CURLOPT_TIMEOUT, $second);
+        curl_setopt($ch, CURLOPT_URL, $url);
+        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
+        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //严格校验2
+        //设置header
+        curl_setopt($ch, CURLOPT_HEADER, false);
+        //要求结果为字符串且输出到屏幕上
+        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+        curl_setopt($ch, CURLOPT_POST, true);
+        curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
+        //运行curl
+        $data = curl_exec($ch);
+        //返回结果
+        if ($data) {
+            curl_close($ch);
+            return $data;
+        } else {
+            $error = curl_errno($ch);
+            curl_close($ch);
+            return $error;
+        }
+    }
+    /**
+     * 获取签名
+     *
+     * @return void
+     * @author wj
+     * @date 2022-12-02
+     */
+    public function getsign($data)
+    {
+        ksort($data);
+        $sign_str = $this->ToUrlParams($data);
+        $sign_str = $sign_str . "&key=" . $this->config['KEY'];
+        $sign = strtoupper(md5($sign_str));
+        return $sign;
+    }
+    public function arrayToXml($arr)
+    {
+        $xml = "<xml>";
+        foreach ($arr as $key => $val) {
+            if (is_numeric($val)) {
+                $xml .= "<" . $key . ">" . $val . "</" . $key . ">";
+            } else {
+                $xml .= "<" . $key . "><![CDATA[" . $val . "]]></" . $key . ">";
+            }
+        }
+        $xml .= "</xml>";
+        return $xml;
+    }
+}