You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
314 lines
13 KiB
314 lines
13 KiB
<?php
|
|
namespace App\Http\Controllers\Api;
|
|
|
|
use App\Http\Controllers\Api\CommonController;
|
|
use Illuminate\Http\Request;
|
|
use App\Common\ReturnData;
|
|
use App\Common\Token;
|
|
use App\Http\Model\Order;
|
|
use DB;
|
|
|
|
class OrderController extends CommonController
|
|
{
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
}
|
|
|
|
//订单列表
|
|
public function orderList(Request $request)
|
|
{
|
|
//参数
|
|
$data['limit'] = $request->input('limit', 10);
|
|
$data['offset'] = $request->input('offset', 0);
|
|
|
|
$data['user_id'] = Token::$uid;
|
|
$data['status'] = $request->input('status',-1);
|
|
|
|
return Order::getList($data);
|
|
}
|
|
|
|
//订单详情
|
|
public function orderDetail(Request $request)
|
|
{
|
|
//参数
|
|
$data['user_id'] = Token::$uid;
|
|
$data['order_id'] = $request->input('order_id','');
|
|
if($request->input('order_status','') != ''){$data['order_status'] = $request->input('order_status');}
|
|
if($request->input('pay_status','') != ''){$data['pay_status'] = $request->input('pay_status');}
|
|
if($request->input('refund_status','') != ''){$data['refund_status'] = $request->input('refund_status');}
|
|
|
|
if($data['order_id']=='')
|
|
{
|
|
return ReturnData::create(ReturnData::PARAMS_ERROR);
|
|
}
|
|
|
|
return Order::getOne($data);
|
|
}
|
|
|
|
//生成订单
|
|
public function orderAdd(Request $request)
|
|
{
|
|
//参数
|
|
$data['default_address_id'] = $request->input('default_address_id','');
|
|
//$data['payid'] = $request->input('payid','');
|
|
$data['user_bonus_id'] = $request->input('user_bonus_id','');
|
|
$data['shipping_costs'] = $request->input('shipping_costs','');
|
|
$data['message'] = $request->input('message','');
|
|
$data['place_type'] = $request->input('place_type',2); //订单来源,1pc,2微信,3app
|
|
$data['user_id'] = Token::$uid;
|
|
|
|
//获取商品列表
|
|
$data['cartids'] = $request->input('cartids','');
|
|
|
|
if($data['cartids']=='')
|
|
{
|
|
return ReturnData::create(ReturnData::PARAMS_ERROR);
|
|
}
|
|
|
|
return Order::add($data);
|
|
}
|
|
|
|
//订单修改
|
|
public function orderUpdate(Request $request)
|
|
{
|
|
if($request->input('id', '')!=''){$where['id'] = $request->input('id');}
|
|
if($request->input('order_sn', '')!=''){$where['order_sn'] = $request->input('order_sn');}
|
|
|
|
if($request->input('order_amount', '')!=''){$data['order_amount'] = $request->input('order_amount');}
|
|
if($request->input('out_trade_no', '')!=''){$data['out_trade_no'] = $request->input('out_trade_no');}
|
|
if($request->input('shipping_name', '')!=''){$data['shipping_name'] = $request->input('shipping_name');}
|
|
if($request->input('shipping_id', '')!=''){$data['shipping_id'] = $request->input('shipping_id');}
|
|
if($request->input('shipping_sn', '')!=''){$data['shipping_sn'] = $request->input('shipping_sn');}
|
|
if($request->input('shipping_fee', '')!=''){$data['shipping_fee'] = $request->input('shipping_fee');}
|
|
if($request->input('shipping_time', '')!=''){$data['shipping_time'] = $request->input('shipping_time');}
|
|
if($request->input('name', '')!=''){$data['name'] = $request->input('name');}
|
|
if($request->input('province', '')!=''){$data['province'] = $request->input('province');}
|
|
if($request->input('city', '')!=''){$data['city'] = $request->input('city');}
|
|
if($request->input('district', '')!=''){$data['district'] = $request->input('district');}
|
|
if($request->input('address', '')!=''){$data['address'] = $request->input('address');}
|
|
if($request->input('zipcode', '')!=''){$data['zipcode'] = $request->input('zipcode');}
|
|
if($request->input('mobile', '')!=''){$data['mobile'] = $request->input('mobile');}
|
|
if($request->input('message', '')!=''){$data['message'] = $request->input('message');}
|
|
if($request->input('is_comment', '')!=''){$data['is_comment'] = $request->input('is_comment');}
|
|
if($request->input('is_delete', '')!=''){$data['is_delete'] = $request->input('is_delete');}
|
|
if($request->input('to_buyer', '')!=''){$data['to_buyer'] = $request->input('to_buyer');}
|
|
if($request->input('invoice', '')!=''){$data['invoice'] = $request->input('invoice');}
|
|
if($request->input('invoice_title', '')!=''){$data['invoice_title'] = $request->input('invoice_title');}
|
|
if($request->input('invoice_taxpayer_number', '')!=''){$data['invoice_taxpayer_number'] = $request->input('invoice_taxpayer_number');}
|
|
|
|
if(!isset($where)){return ReturnData::create(ReturnData::PARAMS_ERROR);}
|
|
|
|
if (isset($data))
|
|
{
|
|
$where['user_id'] = Token::$uid;
|
|
Order::modify($where,$data);
|
|
}
|
|
|
|
return ReturnData::create(ReturnData::SUCCESS);
|
|
}
|
|
|
|
//订单状态修改
|
|
public function orderStatusUpdate(Request $request)
|
|
{
|
|
$type = $request->input('type','');
|
|
if($request->input('id', '')!=''){$where['id'] = $request->input('id');}
|
|
$where['user_id'] = Token::$uid;
|
|
|
|
if($type=='' || $where['id'] =='')
|
|
{
|
|
return ReturnData::create(ReturnData::PARAMS_ERROR);
|
|
}
|
|
|
|
//修改订单状态,1设为支付,2设为取消,3设为确认收货,4设为退款退货,5设为删除,6设为已评价
|
|
if($type == 1)
|
|
{
|
|
//判断订单是否存在或本人
|
|
$where['order_status'] = 0;
|
|
$where['pay_status'] = 0;
|
|
$order = Order::where($where)->first();
|
|
if(!$order){return ReturnData::create(ReturnData::PARAMS_ERROR,null,'订单不存在');}
|
|
|
|
//判断用户余额是否足够
|
|
$user_money = DB::table('user')->where(array('id'=>Token::$uid))->value('money');
|
|
if($order['order_amount']>$user_money){return ReturnData::create(ReturnData::PARAMS_ERROR,null,'余额不足');}
|
|
|
|
$data['pay_status'] = 1;
|
|
$data['pay_money'] = $order['order_amount']; //支付金额
|
|
$data['pay_id'] = $request->input('pay_id','');
|
|
$data['pay_time'] = $request->input('pay_time',time());
|
|
if($request->input('pay_name', '')!=''){$data['pay_name'] = $request->input('pay_name');}
|
|
|
|
//扣除用户余额
|
|
if($data['pay_money']<=0 || !DB::table('user')->where(array('id'=>Token::$uid))->decrement('money', $data['pay_money']))
|
|
{
|
|
return ReturnData::create(ReturnData::PARAMS_ERROR);
|
|
}
|
|
|
|
//增加用户余额记录
|
|
DB::table('user_money')->insert(array('user_id'=>Token::$uid,'type'=>1,'money'=>$data['pay_money'],'des'=>'订单余额支付','user_money'=>DB::table('user')->where(array('id'=>Token::$uid))->value('money'),'add_time'=>time()));
|
|
}
|
|
elseif($type == 2)
|
|
{
|
|
//判断订单是否存在或本人
|
|
$where['order_status'] = 0;
|
|
$where['pay_status'] = 0;
|
|
$order = Order::where($where)->first();
|
|
if(!$order){return ReturnData::create(ReturnData::PARAMS_ERROR,null,'订单不存在');}
|
|
|
|
$data['order_status'] = 1;
|
|
}
|
|
elseif($type == 3)
|
|
{
|
|
//判断订单是否存在或本人
|
|
$where['order_status'] = 0;
|
|
$where['refund_status'] = 0;
|
|
$where['pay_status'] = 1;
|
|
$order = Order::where($where)->first();
|
|
if(!$order){return ReturnData::create(ReturnData::PARAMS_ERROR,null,'订单不存在');}
|
|
|
|
$data['order_status'] = 3;
|
|
$data['shipping_status'] = 2;
|
|
$data['refund_status'] = 0;
|
|
$data['is_comment'] = 0;
|
|
}
|
|
elseif($type == 4)
|
|
{
|
|
//判断订单是否存在或本人
|
|
$where['order_status'] = 3;
|
|
$where['refund_status'] = 0;
|
|
$order = Order::where($where)->first();
|
|
if(!$order){return ReturnData::create(ReturnData::PARAMS_ERROR,null,'订单不存在');}
|
|
|
|
$data['refund_status'] = 1;
|
|
}
|
|
elseif($type == 5)
|
|
{
|
|
//判断订单是否存在或本人
|
|
$order = Order::where(array('order_status'=>3,'refund_status'=>0))->orWhere(array('order_status'=>1))->orWhere(array('order_status'=>2))->first();
|
|
if(!$order){return ReturnData::create(ReturnData::PARAMS_ERROR,null,'订单不存在');}
|
|
|
|
$data['is_delete'] = 1;
|
|
}
|
|
elseif($type == 6)
|
|
{
|
|
//判断订单是否存在或本人
|
|
$where['order_status'] = 3;
|
|
$where['refund_status'] = 0;
|
|
$order = Order::where($where)->first();
|
|
if(!$order){return ReturnData::create(ReturnData::PARAMS_ERROR,null,'订单不存在');}
|
|
|
|
$data['is_comment'] = 1;
|
|
}
|
|
|
|
//修改订单状态
|
|
if (isset($data))
|
|
{
|
|
Order::modify($where,$data);
|
|
}
|
|
|
|
return ReturnData::create(ReturnData::SUCCESS);
|
|
}
|
|
|
|
//删除订单
|
|
public function orderDelete(Request $request)
|
|
{
|
|
$id = $request->input('id','');
|
|
|
|
if($id=='')
|
|
{
|
|
return ReturnData::create(ReturnData::PARAMS_ERROR);
|
|
}
|
|
|
|
return Order::remove($id,Token::$uid);
|
|
}
|
|
|
|
//商城支付宝app支付
|
|
public function orderAlipayApp(Request $request)
|
|
{
|
|
$id = $request->input('id',null);
|
|
if($id===null){return ReturnCode::create(ReturnCode::PARAMS_ERROR);}
|
|
|
|
$order = DB::table('order')->where(['id'=>$id,'status'=>0,'user_id'=>Token::$uid])->first();
|
|
if(!$order){return ReturnCode::create(ReturnCode::PARAMS_ERROR);}
|
|
|
|
$order_pay = DB::table('order_pay')->where(['id'=>$order->pay_id])->first();
|
|
if(!$order_pay){return ReturnCode::create(ReturnCode::PARAMS_ERROR);}
|
|
|
|
require_once base_path('resources/org/alipay_app').'/AopClient.php';
|
|
require_once base_path('resources/org/alipay_app').'/AlipayTradeAppPayRequest.php';
|
|
|
|
$aop = new \AopClient;
|
|
$aop->gatewayUrl = "https://openapi.alipay.com/gateway.do";
|
|
$aop->appId = config('alipay.app_alipay.appId');
|
|
$aop->rsaPrivateKey = config('alipay.app_alipay.rsaPrivateKey');
|
|
$aop->format = "json";
|
|
$aop->charset = "UTF-8";
|
|
$aop->signType = "RSA2";
|
|
$aop->alipayrsaPublicKey = config('alipay.app_alipay.alipayrsaPublicKey');
|
|
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
|
|
$request = new \AlipayTradeAppPayRequest();
|
|
//SDK已经封装掉了公共参数,这里只需要传入业务参数
|
|
$bizcontent = "{\"body\":\"订单支付\","
|
|
. "\"subject\": \"订单支付\","
|
|
. "\"out_trade_no\": \"".$order_pay->sn."\","
|
|
. "\"total_amount\": \"".$order_pay->pay_amount."\","
|
|
. "\"timeout_express\": \"30m\","
|
|
. "\"product_code\":\"QUICK_MSECURITY_PAY\""
|
|
. "}";
|
|
$request->setNotifyUrl(config('app.url.apiDomain') . '/payment/notify/order_alipay/');
|
|
$request->setBizContent($bizcontent);
|
|
//这里和普通的接口调用不同,使用的是sdkExecute
|
|
$response = $aop->sdkExecute($request);
|
|
//htmlspecialchars是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题
|
|
return ReturnCode::create(ReturnCode::SUCCESS,$response);//就是orderString 可以直接给客户端请求,无需再做处理。
|
|
}
|
|
|
|
//商城微信app支付
|
|
public function orderWxpayApp(Request $request)
|
|
{
|
|
//参数
|
|
$id = $request->input('id',null);
|
|
if($id===null){return ReturnCode::create(ReturnCode::PARAMS_ERROR);}
|
|
|
|
$order_info = DB::table('order')->where(['id'=>$id,'status'=>0,'user_id'=>Token::$uid])->first();
|
|
if(!$order_info){return ReturnCode::create(ReturnCode::PARAMS_ERROR);}
|
|
|
|
$order_pay = DB::table('order_pay')->where(['id'=>$order_info->pay_id])->first();
|
|
if(!$order_pay){return ReturnCode::create(ReturnCode::PARAMS_ERROR);}
|
|
|
|
//1.配置
|
|
$options = config('weixin.app');
|
|
|
|
$app = new \EasyWeChat\Foundation\Application($options);
|
|
$payment = $app->payment;
|
|
$out_trade_no = $order_pay->sn;
|
|
|
|
//2.创建订单
|
|
$attributes = [
|
|
'trade_type' => 'APP', // JSAPI,NATIVE,APP...
|
|
'body' => '订单支付',
|
|
'detail' => '订单支付',
|
|
'out_trade_no' => $out_trade_no,
|
|
'total_fee' => $order_pay->pay_amount*100, // 单位:分
|
|
'notify_url' => config('app.url.apiDomain').'payment/notify/app_order_weixin_pay/', // 支付结果通知网址,如果不设置则会使用配置里的默认地址
|
|
//'openid' => '当前用户的 openid', // trade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识,
|
|
// ...
|
|
];
|
|
|
|
$order = new \EasyWeChat\Payment\Order($attributes);
|
|
|
|
//3.统一下单
|
|
$result = $payment->prepare($order);
|
|
|
|
if ($result->return_code == 'SUCCESS' && $result->result_code == 'SUCCESS')
|
|
{
|
|
$prepayId = $result->prepay_id;
|
|
$res = $payment->configForAppPayment($prepayId);
|
|
}
|
|
|
|
$res['out_trade_no'] = $out_trade_no;
|
|
|
|
return ReturnCode::create(ReturnCode::SUCCESS,$res);
|
|
}
|
|
}
|