96 lines
2.8 KiB
PHP
96 lines
2.8 KiB
PHP
<?php
|
||
/**
|
||
* Created by PhpStorm.
|
||
* User: sunny
|
||
* Date: 2019/2/23
|
||
* Time: 2:10 PM
|
||
*/
|
||
|
||
namespace App\Api\Controllers;
|
||
|
||
use App\Models\VipPament;
|
||
use App\User;
|
||
use Illuminate\Http\Request;
|
||
use RuLong\Order\Models\Order;
|
||
|
||
class VipController extends Controller
|
||
{
|
||
public function __construct()
|
||
{
|
||
// $this->middleware('auth.api');
|
||
// $this->user = \Auth::guard('api')->user();
|
||
// $this->uid = \Auth::guard('api')->id();
|
||
$this->user = User::find(824);
|
||
$this->uid = 824;
|
||
}
|
||
|
||
/**
|
||
* 用户vip开通状态及信息接口,小程序访问开通vip页面时请求该接口。
|
||
* @param
|
||
* @return array
|
||
*/
|
||
public function index()
|
||
{
|
||
|
||
$vipPay = VipPament::where(['user_id' => $this->uid, 'state' => 'SUCCESS'])->first();
|
||
|
||
$isVipUser = $vipPay ? true : false;
|
||
$vipOrder = Order::where(['user_id' => $this->uid, 'item_type' => 'VIP_GIFT'])->whereRaw('substring(cast(status as char),1,1) = 1')->first();
|
||
$canCreateOrder = !$vipOrder && $isVipUser ? true : false;
|
||
|
||
return [
|
||
'data' => [
|
||
'isVipUser' => $isVipUser,//是否是vip
|
||
'vipOrder' => [
|
||
'canCreateOrder' => $canCreateOrder,//是否可以创建订单
|
||
'order_id' => $vipOrder->id ?? '',
|
||
],
|
||
],
|
||
'status' => 'SUCCESS',
|
||
'status_code' => 200,
|
||
];
|
||
}
|
||
|
||
/**
|
||
* 开通vip微信支付,小程序开通vip,去付款时请求该接口。
|
||
* @param \Illuminate\Http\Request $request
|
||
* @return array
|
||
*/
|
||
public function wechat(Request $request)
|
||
{
|
||
|
||
$vipOrder = $this->getpayOrder('WECHAT');
|
||
$openid = $request->openid;
|
||
$app = app('wechat.payment.mini');
|
||
$result = $app->order->unify([
|
||
'body' => '开通会员',
|
||
'out_trade_no' => $vipOrder->trade_no,
|
||
'total_fee' => 99 * 100,
|
||
'notify_url' => route('callback.vip'),
|
||
'trade_type' => 'JSAPI',
|
||
'openid' => $openid,
|
||
]);
|
||
|
||
if ($result['return_code'] == 'SUCCESS' && isset($result['prepay_id'])) {
|
||
$json = $app->jssdk->bridgeConfig($result['prepay_id']);
|
||
return $this->success($json);
|
||
} else {
|
||
return $this->failed($result['return_msg']);
|
||
}
|
||
}
|
||
|
||
private function getpayOrder($type)
|
||
{
|
||
$vipOrder = VipPament::where(['user_id' => $this->uid, 'state' => 'INIT'])->first();
|
||
if (!$vipOrder) {
|
||
$vipOrder = VipPament::create([
|
||
'user_id' => $this->uid,
|
||
'seller_id' => 1,
|
||
'goods_id' => 1,
|
||
'type' => $type,
|
||
'amount' => 99.00,
|
||
]);
|
||
}
|
||
return $vipOrder;
|
||
}
|
||
} |