作者 何书鹏

api更新

... ... @@ -47,7 +47,7 @@ class Goods extends Model
'status' => 'up',
];
//排序字段
if (isset($order)) {
if (isset($order) && $order !== '') {
$order = self::getGoodsListOrder($order);
}else{
... ...
... ... @@ -21,7 +21,64 @@ class Cart extends Base
*
* @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
*
* @ApiReturn()
* @ApiReturn({
"code": 1,
"msg": "我的购物车",
"time": "1608087096",
"data": [{
"id": 1, //购物车ID
"user_id": 1, //用户ID
"goods_id": 4, //商品ID
"goods_num": 2, //加入数量
"sku_price_id": 6,
"goods": { //商品信息
"id": 4, //商品ID
"type": "normal",
"title": "测试", //商品标题
"subtitle": "2", //商品副标题
"weigh": 0,
"category_ids": "3",
"image": "http://www.ant.top/uploads/20201214/076abf7cf60e82783cfdd819746b4b19.png", //商品主图
"images": [ //商品轮播图
"http://www.ant.top/uploads/20201214/b655ea4dc4779222ab7a4e2b95feb3a4.png"
],
"params": [],
"content": "测试多规格",
"price": "20", //现价
"original_price": "200.00", //原价
"is_sku": 1, //是否多规格:0=否,1=是
"likes": 0,
"views": 1,
"sales": 0,
"show_sales": 0,
"service_ids": "4,3",
"dispatch_type": "express",
"dispatch_ids": "1",
"deletetime": null,
"dispatch_type_arr": [
"express"
]
},
"sku_price": {
"id": 6,
"goods_sku_ids": "2,6",
"goods_id": 4,
"weigh": 0,
"image": "",
"stock": 20,
"sales": 0,
"sn": "",
"weight": 1,
"price": "10.00",
"goods_sku_text": "黄色,小",
"status": "up",
"goods_sku_id_arr": [
"2",
"6"
]
}
}]
})
*/
public function index()
{
... ... @@ -36,9 +93,14 @@ class Cart extends Base
* @ApiMethod (POST)
*
* @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
* @ApiParams (name=goods_list, type=object, required=false, description="购买的商品:[{goods_id: 3, goods_num: 1, sku_price_id: 3, goods_price: 0.10}]")
* @ApiParams (name=goods_list[], type=array, required=false, description="购买的商品:[{goods_id: 3, goods_num: 1, sku_price_id: 3, goods_price: 0.10}]")
*
* @ApiReturn()
* @ApiReturn({
"code": 1,
"msg": "已添加",
"time": "1608087096",
"data": null
})
*/
public function add()
{
... ...
... ... @@ -67,6 +67,7 @@ class Category extends Base
/**
* @ApiInternal
* 商城分类商品
*/
public function goods() {
$params = $this->request->get();
... ...
<?php
namespace addons\shopro\controller;
namespace app\api\controller;
use addons\shopro\exception\Exception;
use addons\shopro\model\Order;
... ... @@ -8,6 +8,10 @@ use addons\shopro\model\User;
use think\Db;
use think\Log;
/**
* @ApiInternal
* 物流信息订阅回调接口
*/
class Express extends Base
{
... ... @@ -16,6 +20,7 @@ class Express extends Base
/**
* @ApiInternal
* 物流信息订阅回调接口
*/
public function callback()
... ...
<?php
namespace addons\shopro\controller;
namespace app\api\controller;
/**
* 常见问题接口
*/
class Faq extends Base
{
protected $noNeedLogin = ['*'];
protected $noNeedRight = ['*'];
// faq 列表
/**
* @ApiWeigh (99)
* @ApiTitle (常见问题列表)
* @ApiSummary (常见问题列表)
* @ApiMethod (GET)
*
* @ApiReturn()
*/
public function index()
{
$this->success('获取成功', \addons\shopro\model\Faq::order('id', 'DESC')->paginate(10));
}
/**
* @ApiWeigh (97)
* @ApiTitle (常见问题详情)
* @ApiSummary (常见问题详情)
* @ApiMethod (GET)
*
* @ApiParams (name=id, type=inter, required=true, description="常见问题ID")
*
* @ApiReturn()
*/
public function detail () {
$id = $this->request->get('id');
$this->success('签到成功', \addons\shopro\model\Faq::where('id', $id)->find());
$this->success('常见问题详情', \addons\shopro\model\Faq::where('id', $id)->find());
}
}
... ...
<?php
namespace addons\shopro\controller;
namespace app\api\controller;
/**
* 问题反馈接口
*/
class Feedback extends Base
{
protected $noNeedLogin = ['type'];
protected $noNeedRight = ['*'];
/**
* @ApiWeigh (99)
* @ApiTitle (反馈类型)
* @ApiSummary (反馈类型)
* @ApiMethod (GET)
*
* @ApiHeaders (name=token, type=string, required=true, description="请求的token")
* @ApiParams (name=id, type=inter, required=true, description="优惠券ID")
*
* @ApiReturn({
"code": 1,
"msg": "领取成功",
"time": "1607911049",
"data": {
"user_id": 1, //用户ID
"coupons_id": "2", //优惠券ID
"createtime": 1607911050, //领取时间戳
"id": "1" //领取ID
}
})
*/
public function type()
{
$this->success('反馈类型', array_values(\addons\shopro\model\Feedback::$typeAll));
}
/**
* @ApiWeigh (97)
* @ApiTitle (反馈)
* @ApiSummary (反馈)
* @ApiMethod (POST)
*
* @ApiHeaders (name=token, type=string, required=true, description="请求的token")
* @ApiParams (name=type, type=string, required=true, description="反馈类型:product=产品功能问题反馈,feedback=建议及意见反馈,complaint=投诉客服其他问题")
* @ApiParams (name=content, type=string, required=true, description="反馈内容")
* @ApiParams (name=images, type=array, required=true, description="图片,多图数组")
* @ApiParams (name=phone, type=string, required=true, description="联系电话")
*
* @ApiReturn()
*/
public function add() {
$params = $this->request->post();
... ...
<?php
namespace addons\shopro\controller;
namespace app\api\controller;
/**
* 商品评价接口
*/
class GoodsComment extends Base
{
protected $noNeedLogin = ['index', 'type'];
protected $noNeedRight = ['*'];
/**
* @ApiWeigh (99)
* @ApiTitle (评价列表)
* @ApiSummary (评价列表)
* @ApiMethod (GET)
*
* @ApiParams (name=goods_id, type=inter, required=true, description="商品ID")
* @ApiParams (name=type, type=string, required=false, description="评价类型:all=全部,images=有图,good=好评,moderate=中评,bad=差评")
*
* @ApiReturn({
"code": 1,
"msg": "领取成功",
"time": "1607911049",
"data": {
"user_id": 1, //用户ID
"coupons_id": "2", //优惠券ID
"createtime": 1607911050, //领取时间戳
"id": "1" //领取ID
}
})
*/
public function index()
{
$params = $this->request->get();
$goodsComments = \addons\shopro\model\GoodsComment::getList($params);
$this->success('评价详情', $goodsComments);
$this->success('评价列表', $goodsComments);
}
/**
* @ApiWeigh (97)
* @ApiTitle (筛选类型)
* @ApiSummary (筛选类型)
* @ApiMethod (GET)
*
* @ApiParams (name=goods_id, type=inter, required=true, description="商品ID")
*
* @ApiReturn({
"code": 1,
"msg": "领取成功",
"time": "1607911049",
"data": {
"user_id": 1, //用户ID
"coupons_id": "2", //优惠券ID
"createtime": 1607911050, //领取时间戳
"id": "1" //领取ID
}
})
*/
public function type() {
$goods_id = $this->request->get('goods_id', 0);
... ...
<?php
namespace addons\shopro\controller;
namespace app\api\controller;
/**
* 售后接口
*/
class OrderAftersale extends Base
{
protected $noNeedLogin = [];
protected $noNeedRight = ['*'];
/**
* @ApiWeigh (99)
* @ApiTitle (售后列表)
* @ApiSummary (售后列表)
* @ApiMethod (GET)
*
* @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
* @ApiParams (name=type, type=string, required=false, description="售后类型:all=全部")
*
* @ApiReturn()
*/
public function index()
{
$params = $this->request->get();
... ... @@ -17,9 +29,16 @@ class OrderAftersale extends Base
$this->success('售后列表', \addons\shopro\model\OrderAftersale::getList($params));
}
/**
* 详情
* @ApiWeigh (97)
* @ApiTitle (详情)
* @ApiSummary (详情)
* @ApiMethod (GET)
*
* @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
* @ApiParams (name=id, type=inter, required=true, description="售后ID")
*
* @ApiReturn()
*/
public function detail()
{
... ... @@ -30,9 +49,23 @@ class OrderAftersale extends Base
$this->success('售后详情', \addons\shopro\model\OrderAftersale::detail($params));
}
// 申请售后
/**
* @ApiWeigh (95)
* @ApiTitle (申请售后)
* @ApiSummary (申请售后)
* @ApiMethod (POST)
*
* @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
* @ApiParams (name=type, type=string, required=true, description="类型:refund=退款,return=退货,other=其他")
* @ApiParams (name=order_id, type=inter, required=true, description="订单ID")
* @ApiParams (name=order_item_id, type=inter, required=true, description="订单商品ID")
* @ApiParams (name=phone, type=string, required=true, description="联系方式")
* @ApiParams (name=reason, type=string, required=false, description="售后原因")
* @ApiParams (name=content, type=string, required=false, description="售后原因内容")
* @ApiParams (name=images, type=string, required=false, description="售后图片,数组")
*
* @ApiReturn()
*/
public function aftersale()
{
$params = $this->request->post();
... ... @@ -43,8 +76,17 @@ class OrderAftersale extends Base
$this->success('申请成功', \addons\shopro\model\OrderAftersale::aftersale($params));
}
// 取消售后单
/**
* @ApiWeigh (93)
* @ApiTitle (取消售后单)
* @ApiSummary (取消售后单)
* @ApiMethod (POST)
*
* @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
* @ApiParams (name=id, type=inter, required=true, description="售后ID")
*
* @ApiReturn()
*/
public function cancel()
{
$params = $this->request->post();
... ... @@ -55,7 +97,17 @@ class OrderAftersale extends Base
$this->success('取消成功', \addons\shopro\model\OrderAftersale::operCancel($params));
}
// 删除售后单
/**
* @ApiWeigh (91)
* @ApiTitle (删除售后单)
* @ApiSummary (删除售后单)
* @ApiMethod (POST)
*
* @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
* @ApiParams (name=id, type=inter, required=true, description="售后ID")
*
* @ApiReturn()
*/
public function delete()
{
$params = $this->request->post();
... ...
<?php
namespace addons\shopro\controller;
namespace app\api\controller;
/**
* 包裹接口
*/
class OrderExpress extends Base
{
protected $noNeedLogin = [];
protected $noNeedRight = ['*'];
/**
* @ApiWeigh (99)
* @ApiTitle (包裹列表)
* @ApiSummary (包裹列表)
* @ApiMethod (GET)
*
* @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
* @ApiParams (name=order_id, type=inter, required=true, description="订单ID")
*
* @ApiReturn()
*/
public function index()
{
$params = $this->request->get();
... ... @@ -17,7 +29,18 @@ class OrderExpress extends Base
$this->success('包裹列表', \addons\shopro\model\OrderExpress::getList($params));
}
/**
* @ApiWeigh (97)
* @ApiTitle (包裹详情)
* @ApiSummary (包裹详情)
* @ApiMethod (GET)
*
* @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
* @ApiParams (name=id, type=inter, required=true, description="包裹ID")
* @ApiParams (name=order_id, type=inter, required=true, description="订单ID")
*
* @ApiReturn()
*/
public function detail()
{
$params = $this->request->get();
... ...
<?php
namespace addons\shopro\controller;
namespace app\api\controller;
use addons\epay\library\Service;
use fast\Random;
... ... @@ -11,14 +11,17 @@ use addons\shopro\model\User;
use think\Db;
use think\Log;
/**
* 支付接口
*/
class Pay extends Base
{
protected $noNeedLogin = ['prepay', 'notifyx', 'notifyr', 'alipay'];
protected $noNeedRight = ['*'];
/**
* @ApiInternal
* 支付宝网页支付
*/
public function alipay()
... ... @@ -60,16 +63,23 @@ class Pay extends Base
// return $this->view->fetch();
}
/**
* 拉起支付
* @ApiWeigh (97)
* @ApiTitle (拉起支付)
* @ApiSummary (拉起支付)
* @ApiMethod (POST)
*
* @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
* @ApiParams (name=order_sn, type=string, required=true, description="订单号")
*
* @ApiReturn()
*/
public function prepay()
{
$order_sn = $this->request->post('order_sn');
$payment = $this->request->post('payment');
$payment = $this->request->post('payment','wechat');
$openid = $this->request->post('openid', '');
$platform = request()->header('platform');
$platform = request()->header('platform','wxMiniProgram');
$order = Order::nopay()->where('order_sn', $order_sn)->find();
... ... @@ -136,9 +146,10 @@ class Pay extends Base
]);
}
// 余额支付
/**
* @ApiInternal
* 余额支付
*/
public function walletPay ($order, $type, $method) {
$order = Db::transaction(function () use ($order, $type, $method) {
$total_fee = $order->total_fee;
... ... @@ -176,6 +187,7 @@ class Pay extends Base
/**
* @ApiInternal
* 支付成功回调
*/
public function notifyx()
... ... @@ -325,8 +337,8 @@ class Pay extends Base
return $result;
}
/**
* @ApiInternal
* 退款成功回调
*/
public function notifyr()
... ...
<?php
namespace addons\shopro\controller;
namespace app\api\controller;
class ScoreGoodsSkuPrice extends Base
... ...
<?php
namespace addons\shopro\controller;
namespace app\api\controller;
use addons\shopro\model\Share as ShareModel;
... ...
<?php
namespace addons\shopro\controller;
class UserBank extends Base
{
protected $noNeedLogin = [];
protected $noNeedRight = ['*'];
public function info()
{
$this->success('银行卡', \addons\shopro\model\UserBank::info());
}
public function edit () {
$params = $this->request->post();
// 表单验证
$this->shoproValidate($params, get_class(), 'edit');
$this->success('编辑成功', \addons\shopro\model\UserBank::edit($params));
}
}
<?php
namespace addons\shopro\controller;
class UserSign extends Base
{
protected $noNeedLogin = [];
protected $noNeedRight = ['*'];
// 按月份获取签到记录
public function index()
{
$params = $this->request->get();
$this->success('获取成功', \addons\shopro\model\UserSign::getList($params));
}
public function sign () {
$params = $this->request->post();
$this->success('签到成功', \addons\shopro\model\UserSign::sign($params));
}
}
<?php
namespace addons\shopro\controller;
namespace app\api\controller;
/**
* 提现接口
*/
class UserWalletApply extends Base
{
protected $noNeedLogin = ['rule'];
protected $noNeedRight = ['*'];
/**
* @ApiWeigh (99)
* @ApiTitle (提现记录)
* @ApiSummary (提现记录)
* @ApiMethod (GET)
*
* @ApiHeaders (name=token, type=string, required=true, description="请求的token")
* @ApiParams (name=goods_id, type=inter, required=true, description="商品ID")
*
* @ApiReturn({
"code": 1,
"msg": "领取成功",
"time": "1607911049",
"data": {
"user_id": 1, //用户ID
"coupons_id": "2", //优惠券ID
"createtime": 1607911050, //领取时间戳
"id": "1" //领取ID
}
})
*/
public function index()
{
$this->success('提现记录', \addons\shopro\model\UserWalletApply::getList());
}
/**
* @ApiWeigh (97)
* @ApiTitle (申请提现)
* @ApiSummary (申请提现)
* @ApiMethod (POST)
*
* @ApiHeaders (name=token, type=string, required=true, description="请求的token")
* @ApiParams (name=money, type=string, required=true, description="提现金额")
*
* @ApiReturn({
"code": 1,
"msg": "领取成功",
"time": "1607911049",
"data": {
"user_id": 1, //用户ID
"coupons_id": "2", //优惠券ID
"createtime": 1607911050, //领取时间戳
"id": "1" //领取ID
}
})
*/
public function apply () {
$params = $this->request->post();
$this->success('申请成功', \addons\shopro\model\UserWalletApply::apply($params));
}
/**
* @ApiWeigh (95)
* @ApiTitle (提现规则)
* @ApiSummary (提现规则)
* @ApiMethod (GET)
*
* @ApiReturn()
*/
public function rule () {
// 提现规则
$config = \addons\shopro\model\Config::where('name', 'withdraw')->find();
... ...
<?php
namespace addons\shopro\controller;
namespace app\api\controller;
use addons\shopro\exception\Exception;
/**
* 钱包记录接口
*/
class UserWalletLog extends Base
{
protected $noNeedLogin = ['*'];
protected $noNeedRight = ['*'];
/**
* @ApiWeigh (99)
* @ApiTitle (会员中心)
* @ApiSummary (会员中心)
* @ApiMethod (GET)
*
* @ApiHeaders (name=token, type=string, required=true, description="请求的token")
* @ApiParams (name=wallet_type, type=string, required=true, description="钱包类型:money=钱包记录")
* @ApiParams (name=status, type=string, required=true, description="状态:all=全部,add=增加,reduce=减少")
*
* @ApiReturn()
*/
public function index()
{
$params = $this->request->get();
... ...
<?php
namespace addons\shopro\controller;
use addons\shopro\library\Wechat as WechatLibrary;
use addons\shopro\model\Wechat as WechatModel;
use addons\shopro\model\Config;
/**
* 微信接口
*/
class Wechat extends Base
{
protected $noNeedLogin = ['*'];
protected $noNeedRight = ['*'];
protected $app = null;
protected $userOpenId = '';
/**
* 微信公众号服务端API对接、处理消息回复
*/
public function index()
{
$wechat = new WechatLibrary('wxOfficialAccount');
$this->app = $wechat->getApp();
$this->app->server->push(function ($message) {
//初始化信息
$this->userOpenId = $message['FromUserName'];
// return json_encode($message, JSON_UNESCAPED_UNICODE); //调试使用
switch ($message['MsgType']) {
case 'event': //收到事件消息
switch ($message['Event']) {
case 'subscribe': //订阅(关注)事件
//获取粉丝信息并保存
$subscribe = WechatModel::get(['type' => 'subscribe']);
if ($subscribe) {
return $this->response($subscribe);
}
break;
case 'unsubscribe': //取消订阅(关注)事件
//获取粉丝信息并保存
break;
case 'CLICK': //自定义菜单事件
return $this->response($message, 'CLICK');
break;
case 'SCAN': //扫码事件
return '';
break;
}
break;
case 'text': //收到文本消息
//检测关键字回复
$content = $message['Content'];
$auto_reply = WechatModel::where('type', 'auto_reply')->where('find_in_set(:keywords,rules)', ['keywords' => $content])->find();
if ($auto_reply) {
return $this->response($auto_reply);
}
case 'image': //收到图片消息
case 'voice': //收到语音消息
case 'video': //收到视频消息
case 'location': //收到坐标消息
case 'link': //收到链接消息
case 'file': //收到文件消息
default: // ... 默认回复消息
$default_reply = WechatModel::where('type', 'default_reply')->find();
if ($default_reply) {
return $this->response($default_reply);
}
}
});
$response = $this->app->server->serve();
// 将响应输出
$response->send();
}
public function jssdk()
{
$params = $this->request->post();
$apis = [
'checkJsApi',
'onMenuShareTimeline',
'onMenuShareAppMessage',
'getLocation', //获取位置
'openLocation', //打开位置
'scanQRCode', //扫一扫接口
'chooseWXPay', //微信支付
'chooseImage', //拍照或从手机相册中选图接口
'previewImage', //预览图片接口
'uploadImage', //上传图片
'openAddress', // 获取微信地址
];
$uri = urldecode($params['uri']);
$wechat = new WechatLibrary('wxOfficialAccount');
$res = $wechat->getApp()->jssdk->setUrl($uri)->buildConfig($apis, $debug = false, $beta = false, $json = false);
$this->success('sdk', $res);
}
/**
* 微信公众号服务端API对接
*/
public function wxacode()
{
$scene = $this->request->get('scene', '');
$path = $this->request->get('path', '');
if (empty($path)) {
$path = 'pages/index/index';
}
$wechat = new WechatLibrary('wxMiniProgram');
$content = $wechat->getApp()->app_code->getUnlimit($scene, [
'page' => $path,
'is_hyaline' => true,
]);
if ($content instanceof \EasyWeChat\Kernel\Http\StreamResponse) {
return response($content->getBody(), 200, ['Content-Length' => strlen($content)])->contentType('image/png');
} else {
// 小程序码获取失败
$msg = isset($content['errcode']) ? $content['errcode'] : '-';
$msg .= isset($content['errmsg']) ? $content['errmsg'] : '';
\think\Log::write('wxacode-error' . $msg);
$this->error('获取失败', $msg);
}
}
/**
* 回复消息
*/
private function response($replyInfo, $event = 'text')
{
switch ($event) {
case 'SCAN': //解析扫码事件EventKey
break;
case 'CLICK': //解析菜单点击事件EventKey
$key = explode('|', $replyInfo['EventKey']);
if ($key) {
$message['type'] = $key[0];
if ($key[0] === 'text') {
$message['content'] = json_decode(WechatModel::get($key[1])->content, true);
} elseif($key[0] === 'link') {
$link = WechatModel::get($key[1]);
$message = array_merge($message, json_decode($link->content, true));
$message['title'] = $link->name;
// return json_encode($message);
}else {
$message['media_id'] = $key[1];
}
}
break;
default:
$message = json_decode($replyInfo['content'], true);
break;
}
switch ($message['type']) {
case 'text': //回复文本
$content = new \EasyWeChat\Kernel\Messages\Text($message['content']);
break;
case 'image': //回复图片
$content = new \EasyWeChat\Kernel\Messages\Image($message['media_id']);
break;
case 'news': //回复图文
$message = new \EasyWeChat\Kernel\Messages\Media($message['media_id'], 'mpnews');
$this->app->customer_service->message($message)->to($this->userOpenId)->send(); //素材消息使用客服接口回复
break;
case 'voice': //回复语音
$content = new \EasyWeChat\Kernel\Messages\Voice($message['media_id']);
break;
case 'video': //回复视频
$content = new \EasyWeChat\Kernel\Messages\Video($message['media_id']);
break;
case 'link': //回复链接
$items = new \EasyWeChat\Kernel\Messages\NewsItem([
'title' => $message['title'],
'description' => $message['description'],
'url' => $message['url'],
'image' => cdnurl($message['image'], true),
// ...
]);
$content = new \EasyWeChat\Kernel\Messages\News([$items]);
break;
}
return $content;
}
}
<?php
namespace addons\shopro\validate;
namespace app\api\validate;
use think\Validate;
... ...
<?php
namespace addons\shopro\validate;
namespace app\api\validate;
use think\Validate;
... ...
此 diff 太大无法显示。