这个项目很简单,就是谁在哪个栏目增加了什么商品,商品的保质期是哪天,到指定日期发起消息通知。
涉及到的接口如下:
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 个回复