首页 » 产品日记 » 正文

记录用TP6开发后端接口(5.3)

这个项目很简单,就是谁在哪个栏目增加了什么商品,商品的保质期是哪天,到指定日期发起消息通知。

涉及到的接口如下:
1、商品分类、商品列表、搜索

获取参数token、cateid
// 直接取数据
$getgoodscate = Goodscate::where('is_deleted',0)->select();


// 这里把搜索也整合进去了
$map = []

if(isset($keywords)){
            if ($keywords){
                $map[] = ['goodsname|barcode','like','%'.$keywords.'%'];
                // 复合条件/多条件查询,上面的还可以用&,但是&和|不能同时使用
                // TP6貌似不支持'_logic'='or'这种写法了
            }
        }
$getgoodslist = Goods::where([
                           'token'=>$token,
                          'cateid'=>$cateid
                           ])->where($map)->select();

if ($getgoodslist->isEmpty()){
      $code = 201;
      $msg = '没有数据';
        }else{
  $code = 200;
      $msg = '请求成功';
        }
return json(['code'=>$code,'msg'=>$msg,'catelist'=>$getgoodscate,'data'=>$data]);

2、微信登录
微信授权登录接口的方式变更了,所以业务逻辑也做了一些调整。具体前端调用放到下一篇,这篇只说后端。
通过下列方法获得openid

// 微信获取openid/sessionKey
    private function getopenid($code)
    {

        $APPID = 在小程序后台获取APPID;
        $SECRET = 在小程序后台获取SECRET;

        // 拼接url
        $url = "https://api.weixin.qq.com/sns/jscode2session?appid={$APPID}&secret={$SECRET}&js_code={$code}&grant_type=authorization_code";
        $curl = curl_init(); // 启动一个CURL会话
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_HEADER, 0);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);  // 从证书中检查SSL加密算法是否存在
        $tmpInfo = curl_exec($curl);     //返回api的json对象

        //检查请求状态
        if($tmpInfo===false){
            $msg    = curl_error($tmpInfo);
            return $msg;
        }

        //关闭URL请求
        curl_close($curl);

        $result = json_decode($tmpInfo, true);

        return $result;
    }

下一步就检查openid是否在数据库中存在,不存在则作为新用户添加,存在则直接返回给前端就行了,这个项目本身用到用户信息并不多,只要标示身份就行,至于是谁并没有去在意。

3、添加和编辑
添加和编辑用TP的create方法,前台数据用对象的形式传过来,包含了ID的自动执行修改操作,没有包含ID的则直接作为新数据添加。

// 获取前端传过来的数据
$file = $request->file('file');//获取上传的文件
//数据校验
//把文件保存路径也塞到$data中去
$rs = Goods::create($data)->getData('id'); //执行保存操作并返回主键
return json(['code'=>200,'msg'=>‘保存成功’]);

4、删除商品
除了删除数据,同时还要删除上传的商品图片。

public function del()
{
 $data = Goods::find($id);
$filename = app()->getRootPath().$data['Goodsimg'];
            // unlink参数需要绝对路径
            @unlink($filename);
$rs = $data->delete();
if($rs){
$msg = '删除成功';
}else{
$msg = '删除失败';
}
return json(['msg'=>$msg]);
}

5、消息推送(微信小程序订阅消息)
逻辑是这样的:
先用appid和secret换取access_token
接着把符合条件的消息发送对象找出来
然后把数据按照选用的消息模版ID分别向微信服务器接口发起请求
最后在自己的服务器上把这个接口添加到计划任务,因为提醒时间最小颗粒度是天,所以每天执行一次即可。
关于这块,放到下一篇单独记录。

本文共 1 个回复

发表评论