上线金柚产品

This commit is contained in:
“wanyongkang”
2024-02-01 17:13:32 +08:00
parent 058b999606
commit 323ae40042
15 changed files with 1407 additions and 3 deletions

View File

@@ -6,6 +6,9 @@ use extend\alipay\Alipay as AlipaySdk;
use app\ros\model\Order as OrderModel;
use app\http\model\User as UserModel;
use app\http\model\Recharge as RechargeModel;
use app\jinyou\model\ProductOrder as ProductOrderModel;
use app\jinyou\model\Account as AccountModel;
use app\jinyou\model\Package as PackageModel;
class Alipay {
@@ -105,5 +108,59 @@ class Alipay {
echo 'success';
}
public function jinyoualipayverify() {
$ali = new AlipaySdk();
$flag = $ali->payVerify2($_POST);
if($flag){
$status = $_POST['trade_status'];
$flag = false;
if ($status == 'TRADE_SUCCESS') {
$flag = true;
}
if ($flag) {
$order_model = new ProductOrderModel();
$order_no=$_POST['out_trade_no'];
$alipay_no = $_POST['trade_no'];
//获取充值信息
$order_info = $order_model->getOne(['OrderNo'=>$order_no]);
if (!empty($order_info['TradeNo'])) {
die;
}
$update_data = [];
//更新充值订单
$update_data['TradeNo'] = $alipay_no;
$update_data['OrderState'] = 90;
if($order_model->updateOne(['OrderNo'=>$order_no],$update_data)) {
$account_info = json_decode($order_info['remark2']);
$user_model = new UserModel();
$user_info = $user_model->getOne(['Id' => $order_info['UserId']]);
$package_model = new PackageModel;//套餐详情
$package_info = $package_model->getOne(['Id' => $account_info['package_id']]);
$account_model = new AccountModel;
$account_model->open_account($account_info,$user_info,$package_info);
}
}
}
echo 'success';
}
}

View File

@@ -5,6 +5,9 @@ namespace app\common\controller;
use app\ros\model\Order as OrderModel;
use app\http\model\User as UserModel;
use app\http\model\Recharge as RechargeModel;
use app\jinyou\model\ProductOrder as ProductOrderModel;
use app\jinyou\model\Account as AccountModel;
use app\jinyou\model\Package as PackageModel;
class Wxpay {
@@ -87,6 +90,57 @@ class Wxpay {
$user_model->updateOne(['Id'=>$order_info['user_id']],$user_update);
//处理完成之后,告诉微信成功结果
echo '<xml>
<return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[OK]]></return_msg>
</xml>';
exit();
}
}
public function jinyouwxpayverify() {
//接收数据
$xmlData = file_get_contents('php://input');
libxml_disable_entity_loader(true);
$data = json_decode(json_encode(simplexml_load_string($xmlData, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
$order_model = new ProductOrderModel();
$order_no = $data['out_trade_no'];
$wx_no = $data['transaction_id'];
//获取充值信息
$order_info = $order_model->getOne(['OrderNo'=>$order_no]);
if (!empty($order_info['TradeNo'])) {
die;
}
//判断算出的签名和通知信息的签名是否一致
if($data['result_code'] == 'SUCCESS' && $data['appid'] == 'wx18e5b4f42773c3ec' && $data['mch_id'] == '1571608411'){
$update_data = [];
//更新充值订单
$update_data['TradeNo'] = $wx_no;
$update_data['OrderState'] = 90;
$order_model->updateOne(['OrderNo'=>$order_no],$update_data);
$account_info = json_decode($order_info['remark2']);
$user_model = new UserModel();
$user_info = $user_model->getOne(['Id' => $order_info['UserId']]);
$package_model = new PackageModel;//套餐详情
$package_info = $package_model->getOne(['Id' => $account_info['package_id']]);
$account_model = new AccountModel;
$account_model->open_account($account_info,$user_info,$package_info);
//处理完成之后,告诉微信成功结果
echo '<xml>
<return_code><![CDATA[SUCCESS]]></return_code>

View File

@@ -0,0 +1,60 @@
<?php
namespace app\jinyou\controller;
use extend\jinyouapi\Jinyoujingtai;
use app\jinyou\model\Package as PackageModel;
class Api
{
public function test() {
$qilinjt = new Jinyoujingtai;
$data = $qilinjt::productList(0);
dd($data);
}
//获取游戏列表
public function gameList() {
$qilinjt = new Jinyoujingtai;
$data = $qilinjt::gameList();
echo json_encode($data);
}
//获取地区列表
public function regionSurplusOuts() {
$info = $_GET;
$qilinjt = new Jinyoujingtai;
$data = $qilinjt::regionSurplusOuts($info['product_id'],$info['is_unshar'],$info['game_id']);
echo json_encode($data);
}
//获取所有套餐
public function getPackage() {
$info = $_GET;
$package_type = '';
if ($info['type'] == 1) {
$package_type = '静态';
} else if ($info['type'] == 2) {
$package_type = '固态';
}
$package_model = new PackageModel;
$list = $package_model->get_package($package_type);
$data = [
'code' => 1,
'msg' => '',
'data' => $list,
];
echo json_encode($data);
}
}

View File

@@ -0,0 +1,370 @@
<?php
namespace app\jinyou\controller;
use fastphp\base\Controller;
use extend\jinyouapi\Jinyoujingtai;
use app\jinyou\model\User as UserModel;
use app\jinyou\model\Product as ProductModel;
use app\jinyou\model\Package as PackageModel;
use app\jinyou\model\PriceScheme as SchemeModel;
use app\jinyou\model\UserPrice as UserPriceModel;
use app\jinyou\model\ProductOrder as ProductOrderModel;
use enum\order\ProductOrder as OrderEnum;
use app\user\model\UserScore as UserScore;
use app\jinyou\model\Account as AccountModel;
use extend\wechatpay\Wxpay;
use extend\alipay\Alipay;
class Jinyoujt extends Controller
{
//获取所有套餐
public function getPackage() {
$info = $_GET;
$isset_price= false;
$discount = 0;
$user_price = [];
$user_model = new UserModel;
$user_info = $user_model->getOne(['Id' => $this->userinfo['UserId']],'Id,discount_id,RestAmount,TestCountLimit,UseTestCount,is_verify');
if ($user_info['discount_id'] != 0) {
$isset_price = true;
if ($user_info['discount_id'] == -1) {
$user_price_model = new UserPriceModel;
$user_price_list = $user_price_model->getList(['UserId' => $this->userinfo['UserId'],'ProductId' => 28]);
foreach ($user_price_list as $info) {
$user_price[$info['PackageId']] = $info['UserPrice'];
}
} else {
$scheme_model = new SchemeModel;
$discount = $scheme_model->getone(['Id' => $user_info['discount_id']])['discount'];
}
}
$package_type = '';
if ($info['type'] == 1) {
$package_type = '静态';
} else if ($info['type'] == 2) {
$package_type = '固态';
}
$package_model = new PackageModel;
$list = $package_model->get_package($package_type,$isset_price,$discount,$user_price);
$data = [
'code' => 1,
'msg' => '',
'data' => $list,
];
echo json_encode($data);
}
//创建静态订单
public function create_order() {
$request_data = json_decode(file_get_contents("php://input"),true)['order_info'];
$return_data['code'] = 0;
$request_data['price'] = abs($request_data['price']);
$user_model = new UserModel;
$jinyoujingtai = new Jinyoujingtai;
$package_model = new PackageModel;
$user_update_info = [];
$user_info = $user_model->getOne(['Id' => $this->userinfo['UserId']]);
//套餐详情
$package_info = $package_model->getOne(['Id' => $request_data['package_id']]);
$user_price_model = new UserPriceModel;
$package_info['Price'] = $user_price_model->get_user_price($user_info['Id'],$user_info['discount_id'],$package_info);
//判读测试卡是否需要付钱
if ($package_info['IsTest'] == 1 && (($user_info['TestCountLimit']!=0 && $user_info['TestCountLimit']<=$user_info['UseTestCount']) || ($user_info['TestCountLimit'] ==0 && $user_info['UseTestCount']>2))) {
$package_info['Price'] = 1.00;
} else if($package_info['IsTest'] == 1) {
$request_data['buy_num'] = 1;
$account_info['product_info'] = [];
$user_update_info['UseTestCount'] = $user_info['UseTestCount'] + 1;
$user_model->updateOne(['Id'=>$this->userinfo['UserId']],$user_update_info);
}
//计算实际需要支付的金额
$OrderAmount = abs($package_info['Price'] * $request_data['buy_num']);
//判断价格是否正确
if ($OrderAmount != $request_data['price']) {
$return_data['code'] = -1;
$return_data['msg'] = "价格有误,请联系客服!";
}
//判断是否实名
if ($user_info['is_verify'] != 1) {
$return_data['code'] = -1;
$return_data['msg'] = "请前往实名!";
}
//判断余额是否足够支付
if ($request_data['pay_type'] == 1 && $user_info['RestAmount'] < $request_data['price']) {
$return_data['code'] = -1;
$return_data['msg'] = "余额不足!";
}
//判断账号是否存在
$exist = $jinyoujingtai::checkVpnAccountExists($request_data['account'],$request_data['type']);
if($exist->code != 200){
$return_data['code'] = -1;
$return_data['msg'] = "账号已经存在!";
}
//判断连接数
if ($request_data['buy_num'] < 1) {
$return_data['code'] = -1;
$return_data['msg'] = "账号数量至少为1";
}
if ($return_data['code'] == -1) {
echo json_encode($return_data);
die;
}
//获取产品信息
$product_model = new ProductModel;
$product_info = $product_model->getOne(['Id' => $package_info['ProductId']]);
$package_info['ProductName'] = $product_info['Name'];
$order_no = 'xk'.time().rand(100,999);
$order_enum = new OrderEnum;
//判断新开类型
$OrderType = $order_enum::$New;
if ($request_data['buy_num'] > 1) {
$OrderType = $order_enum::$News;
}
$OtherPayAmount = 0;
$AccountPayAmount = 0;
if ($request_data['pay_type'] == $order_enum::$Balance) {
$AccountPayAmount = $OrderAmount;
} else {
$OtherPayAmount = $OrderAmount;
}
$time = date('Y-m-d H:i:s',time());
$endtime = date("Y-m-d H:i:s",strtotime("+30 day"));
$order_info = [
'TenantId' => 0,
'UserId' => $user_info['Id'],
'UserName' => $user_info['LoginCode'],
'ProductId' => $package_info['ProductId'],
'ProductName' => $product_info['Name'],
'PackageId' => $package_info['Id'],
'PackageName' => $package_info['Name'],
'CouponId' => 0,
'OrderName' => $package_info['Name'],
'OrderNo' => $order_no,
'OrderState' => $order_enum::$NoPay,
'OrderType' => $OrderType,
'PayType' => $request_data['pay_type'],
'PayState' => 0,
'ConnectCount' => 1,
'OrderAmount' => $OrderAmount,
'PaymentAmount' => $OrderAmount,
'OtherPayAmount' => $OtherPayAmount,
'AccountPayAmount' => $AccountPayAmount,
'CouponAmount' => 0,
'DayPrice' => $package_info['DayPrice'],
'DayCount' => $package_info['DayCount'],
'RefundCount' => 0,
'RefundAmount' => 0,
'ClientType' => 0,
'ChannelType' => 0,
'CreateTime' => $time,
'UpdateTime' => $time,
'Accounts' => $request_data['account'],
'AccountCount' => $request_data['buy_num'],
'AccountPwd' => $request_data['password'],
'DeleteTag' => 0,
'StartTime' => $time,
'EndTime' => $endtime,
'IsAutoRefund' => $product_info['AutoRefund'],
'BackAmount' => 0,
'remark2' => json_encode($request_data)
];
$order_model = new ProductOrderModel;
//用户余额
$old_balance = $rest_money = $user_info['RestAmount'];
if ($request_data['pay_type'] == $order_enum::$Balance) {
//判断余额是否足够
if ($old_balance < $OrderAmount) {
$return_data['code'] = -1;
$return_data['msg'] = "余额不足!";
echo json_encode($return_data);
die;
} else {
$rest_money -= $OrderAmount;
$rest_data = [
'RestAmount' => $rest_money
];
if ($user_model->updateOne(['Id'=>$this->userinfo['UserId'],'RestAmount'=>$old_balance],$rest_data) || $OrderAmount == 0) {
$score_model = new UserScore;
$score_data = [
'TenantId'=>0,
'UserId' => $this->userinfo['UserId'],
'ScoreType' => '6',
'ScoreTypeName' => '购买水滴',
'ScoreValue' => $OrderAmount,
'UserName' => $user_info['Phone'],
'OperateUserName' => $user_info['LoginCode'],
'RestAmount1' => $old_balance,
'RestAmount2' => $rest_money,
'DeleteTag'=>0,
'CreateTime' => date('Y-m-d H:i:s'),
'UpdateTime' => date('Y-m-d H:i:s'),
];
$score_model->add($score_data);
$order_info['OrderState'] = $order_enum::$Complete;
//添加订单
$order_model->add($order_info);
$account_model = new AccountModel;
$return_data = $account_model->open_account($request_data,$user_info,$package_info);
echo json_encode($return_data);
} else {
$return_data['code'] = -1;
$return_data['msg'] = "余额不足!";
echo json_encode($return_data);
die;
}
}
} else if($request_data['pay_type'] == $order_enum::$Wechat) {
$param = [
'out_trade_no' => $order_model['order_no'],
'total_amount' => $OrderAmount,
'subject' => '购买水滴',
'product_code' => 'FAST_INSTANT_TRADE_PAY',
'timeout_express' => '30m',
];
$pay_html = Alipay::pay_jinyou($param);
$info = [
'code'=>2,
'data' => $pay_html
];
echo json_encode($info);
} else if($request_data['pay_type'] == $order_enum::$Ali) {
//微信支付
$wxpay = new Wxpay();
$param = [
'username' => $this->userinfo['LoginName'],
'money' => $OrderAmount*100,
'order_no' => $order_model['order_no'],
];
$url = $wxpay->http_pay($param);
$info = [
'code'=>3,
'data' => $url
];
echo json_encode($info);
}
}
//获取剩余的节点
public function address_margin(){
$account_id = json_decode(file_get_contents("php://input"),true)['data'];
$account_model = new AccountModel;
$product_shuidi_id = 0;
$game_id = 0;
$is_unshar = 0;
$where = [
'Id' => $account_id,
];
$account_info = $account_model->getOne($where);
$game_id = $account_info['game_id'];
$package_info = explode('-',$account_info['PackageName']);
if ($package_info[0] == "静态") {
$product_shuidi_id = 1;
} else {
$product_shuidi_id = 2;
}
if ($package_info[1] == "线路") {
$is_unshar = 1;
} else {
$is_unshar = 0;
}
$jinyoujingtai = new Jinyoujingtai;
$data = $jinyoujingtai::regionSurplusOuts($product_shuidi_id,$is_unshar,$game_id);
echo json_encode($data);
}
//获取可切换的ip
public function change_ip_list() {
$info = json_decode(file_get_contents("php://input"),true)['data'];
$jinyoujingtai = new Jinyoujingtai;
$data = $jinyoujingtai::switchIpList(121,$info['account'],$info['type']);
echo json_encode($data);
}
//切换的ip
public function change_ip() {
$info = json_decode(file_get_contents("php://input"),true)['data'];
$jinyoujingtai = new Jinyoujingtai;
$account_model = new AccountModel;
$where = [
'ProductId' => 28,
'Account' => $info['chinge_addr']['account'],
'Status' => 1,
'DeleteTag' => 0,
];
if ($info['chinge_addr']['rid'] != 0 ) {
$data = $jinyoujingtai::changeRegion(121,$info['chinge_addr']['province_id'],$info['chinge_addr']['rid'],$info['chinge_addr']['account'],$info['chinge_addr']['type']);
}
if ($info['chinge_ip']['ip_id'] != 0 ) {
$data = $jinyoujingtai::saveSwitchIp(121,$info['chinge_ip']['account'],$info['chinge_ip']['type'],$info['chinge_ip']['ip_id']);
}
$shuidi_account_data = $jinyoujingtai::accountInfo(121,$info['chinge_ip']['account'],$info['chinge_ip']['type']);
$update_data = [
'Remark' => $shuidi_account_data->data->region.$shuidi_account_data->data->address,
'Raw' => $shuidi_account_data->data->inlet_website,
];
$account_model->updateOne($where,$update_data);
echo json_encode(['code' => 1]);
}
}

View File

@@ -0,0 +1,74 @@
<?php
namespace app\jinyou\model;
use fastphp\base\Model;
use extend\jinyouapi\Jinyoujingtai;
use enum\account\ProductAccount as AccountEnum;
class Account extends Model
{
protected $table = 'product_account';
//开通账号
public function open_account($account_info,$user_info,$package_info) {
$jinyou = new Jinyoujingtai;
$return_data = [];
foreach ($account_info['product_info'] as $key=>$add_city) {
if ($add_city == 0) {
unset($account_info['product_info'][$key]);
}
}
$package_origin = explode('-',$package_info['OriginKey']);
$api_data = $jinyou::createStatic($package_origin['3'],$account_info['game_id'],$account_info['account'],$account_info['password'],$account_info['buy_num'],121,$package_origin['0'],$package_origin['1'],$package_origin['2'],'',$account_info['product_info']);
$account_list = [];
if ($api_data->code == 200) {
$account_enum = new AccountEnum;
$account_type = $account_enum::$New;
if ($package_info['IsTest'] == 1) {
$account_type = $account_enum::$Test;
} else if ($account_info['buy_num'] > 1) {
$account_type = $account_enum::$News;
}
foreach ($api_data->data as $account) {
$account = [
'TenantId' => 0,
'UserId' => $user_info['Id'],
'UserCode' => $user_info['LoginCode'],
'ProductId' => $package_info['ProductId'],
'ProductName' => $package_info['ProductName'],
'PackageId' => $package_info['Id'],
'PackageName' => $package_info['Name'],
'AccountType' => $account_type,
'Account' => $account->user,
'Pwd' => $account->passwd,
'ConnectCount' => $account->conn_max,
'StartTime' => date('Y-m-d H:i:s',$account->add_time),
'EndTime' => date('Y-m-d H:i:s',$account->end_time),
'Status' => $account_enum::$Normal,
'ChargeStatus' => $account_enum::$Success,
'CreateTime' => date('Y-m-d H:i:s',time()),
'UpdateTime' => date('Y-m-d H:i:s',time()),
'DeleteTag' => 0,
'Remark' => $account->region.$account->address,
'Raw' => $account->inlet_website,
'game_id' => $account->game_id,
];
$account_list[] = $account;
}
$this->addAll($account_list);
$return_data['code'] = 1;
$return_data['msg'] = "账号开通成功!";
} else {
$return_data['code'] = -1;
$return_data['msg'] = "账号开通失败!请联系客服";
}
return $return_data;
}
}

View File

@@ -0,0 +1,68 @@
<?php
namespace app\jinyou\model;
use fastphp\base\Model;
class Package extends Model
{
protected $table = 'product_package';
/**
* 获取套餐
* @param bool $isset_price 是否使用设置的价格
* @param int $discount 折扣
* @param array $user_price 用户的价格;
*/
public function get_package($origin,$isset_price= false,$discount = 0,$user_price = []) {
$where['OriginName'] = ['like', $origin . '%'];
$where['Status'] = 1;
$where['DeleteTag'] = 0;
$package_list = $this->getList($where,'*', 'id asc');
$list = [];
foreach ($package_list as $package) {
$package_info = explode('-',$package['OriginName']);
//判断价格
if ($isset_price) {
$price = 1000000;
$package_price = $package['Price'];
if ($discount != 0) {
$price = $package['LinePrice'] * $discount / 100;
} else {
if (!empty($user_price)) {
if ($package['Id'] == $user_price['PackageId']) {
$price = $user_price['UserPrice'];
}
}
}
//判读最低价
if ($price < $package['MinPrice']) {
$price = $package['MinPrice'];
}
if ($price < $package_price) {
$package['Price'] = $price;
}
}
if (isset($package_info[3])) {
$package['package_name'] = $package_info[3];
} else {
$package['package_name'] = '1小时';
}
if($package_info[1] == "游戏") {
$package_info[1] = 'game';
}
if($package_info[1] == "线路") {
$package_info[1] = 'line';
}
if ($package_info[2] == '测试') {
$package_info[2] = 'test';
}
$list[$package_info[1]][$package_info[2]][] = $package;
}
return $list;
}
}

View File

@@ -0,0 +1,11 @@
<?php
namespace app\jinyou\model;
use fastphp\base\Model;
class PriceScheme extends Model
{
protected $table = 'product_price_scheme';
}

View File

@@ -0,0 +1,11 @@
<?php
namespace app\jinyou\model;
use fastphp\base\Model;
class Product extends Model
{
protected $table = 'product';
}

View File

@@ -0,0 +1,11 @@
<?php
namespace app\jinyou\model;
use fastphp\base\Model;
class ProductOrder extends Model
{
protected $table = 'product_order';
}

19
app/jinyou/model/User.php Normal file
View File

@@ -0,0 +1,19 @@
<?php
/*
* @Descripttion:
* @version:
* @Author: kangkang
* @Date: 2020-10-16 14:44:02
* @LastEditors: “wanyongkang” “937888580@qq.com”
* @LastEditTime: 2024-01-25 17:33:17
*/
namespace app\jinyou\model;
use fastphp\base\Model;
class User extends Model
{
protected $table = 'user';
}

View File

@@ -0,0 +1,36 @@
<?php
namespace app\jinyou\model;
use fastphp\base\Model;
class UserPrice extends Model
{
protected $table = 'product_user_price';
public function get_user_price($user_id,$discount,$package_info){
$price = 100000;
//根据用户价格
if ($discount != 0) {
if ($discount == -1) {
$price = $$this->getOne(['UserId' => $user_id,'PackageId' => $package_info['Id']])['UserPrice'];
} else {
$scheme_model = new PriceScheme;
$discount = $scheme_model->getone(['Id' => $discount])['discount'];
$price = $package_info['LinePrice'] * $discount / 100;
}
//判读最低价
if ($price < $package_info['MinPrice']) {
$price = $package_info['MinPrice'];
}
if ($price < $package_info['Price']) {
$package_info['Price'] = $price;
}
}
return $package_info['Price'];
}
}