文件
mashangyoujiu/Application/CashierApi/Business/BuySubCard.class.php

328 行
11 KiB
PHP
可执行文件

<?php
namespace CashierApi\Business;
use Common\Business\PaySet;
use Common\Business\VipInfo;
use Common\Model\RetailCardOrderModel;
use Common\Model\RetailPayOrderModel;
//[1.7.14]
/**
* 购买次卡类
* Class BuySubCard
* [
* 购买次卡与卡包下单发起支付 placeSubCardOrder
* 发起支付 payment
* 卡记录 cardRecord
* 创建流水订单 createPayOrder
* 支付验证 paymentVerify
* 购买次卡与卡包下单发起支付的验证 subCardVerify
* ]
* @package CashierApi\Business
*/
class BuySubCard
{
/**
* 购买次卡与卡包下单发起支付
* @param $param
* [
* merchant_id
* store_id
* cashier_id
* merchantInfo
* storeInfo
* vip_id 会员id
* type 类型 1.次卡 2.卡包
* card_id 次卡或卡包id
* pay_type 支付类型 1.现金 2.在线 5.其他支付
* pay_code 付款码
* other_pay_id 其他支付id
* ]
* [
* 参数验证成功后
* card_info 卡信息
* ]
* [
* 支付验证与支付配置
* pay_order_arr 流水信息
* config 支付设置
* ]
* [
* 添加后的流水信息
* pay_order_info
* ]
* @return mixed
* @throws \think\Exception
*/
public function placeSubCardOrder($param)
{
$verifyResult = $this->subCardVerify($param); //参数验证
if ($verifyResult['status'] != 1) {
return $verifyResult;
}
$param['card_info'] = $verifyResult['data']; //卡信息
$payResult = $this->paymentVerify($param); //支付验证与支付配置
if ($payResult['status'] != 1) {
return $payResult;
}
$param['pay_order_arr'] = $payResult['data']['pay_order_arr']; //流水信息
$param['config'] = $payResult['data']['config']; //支付设置
$payOrderResult = $this->createPayOrder($param); //创建流水信息
if ($payOrderResult['status'] != 1) {
return $payOrderResult;
}
$param['pay_order_info'] = $payOrderResult['data']; //添加后的流水信息
$cardResult = $this->cardRecord($param); //添加卡记录
if ($cardResult['status'] != 1) {
return $cardResult;
}
$result = $this->payment([
'pay_type' => $param['pay_type'],
'pay_order' => $param['pay_order_info'],
'config' => $param['config']
]);
return $result;
}
/**
* 发起支付
* @param $param
* [
* pay_type 支付类型 1.现金 2.在线 5.其他支付
* pay_order 流水信息
* config 支付设置
* ]
* @return mixed
* @throws \think\Exception
*/
public function payment($param)
{
switch ($param['pay_type']) {
case 1:
case 5:
//现金其他支付
$PaymentClass = new PaymentCallBack();
$result = $PaymentClass->cardCallBackHandle([
'upData' => [
'order_state' => 'SUCCESS',
'trade_date' => time(),
],
'pay_order' => $param['pay_order']
]);
break;
case 2:
//微信支付宝
$ThirdPayClass = new ThirdPay();
$result = $ThirdPayClass->launchPay([
'm_pay_type' => $param['pay_order']['m_pay_type'],
'pay_type' => $param['pay_order']['pay_type'],
'pay_order_info' => $param['pay_order'],
'config' => $param['config']
]);
if ($result['status'] == 1) {
$result['data'] = [
'pay_order_id' => $param['pay_order']['id']
];
}
break;
}
return $result;
}
/**
* 卡记录
* @param $param
* [
* merchant_id
* store_id
* vip_id 会员id
* type 类型 1.次卡 2.卡包
* card_id 次卡或卡包id
* pay_order_info 流水信息
* ]
* @return mixed
*/
public function cardRecord($param)
{
$card_arr = [
'merchant_id' => $param['merchant_id'],
'store_id' => $param['store_id'],
'vip_id' => $param['vip_id'],
'type' => $param['type'],
'card_id' => $param['card_id'],
'state' => 0,
'pay_order_id' => $param['pay_order_info']['id'],
];
$CardOrderModel = new RetailCardOrderModel();
$card_record_id = $CardOrderModel->addOrder($card_arr);
if (empty($card_record_id)) {
return callBack(statusCode()['error'], "卡记录添加失败");
}
return callBack(statusCode()['success'], "卡记录添加成功");
}
/**
* 创建流水订单
* @param $param
* [
* merchant_id
* store_id
* cashier_id
* pay_order_arr 流水信息
* card_info 卡信息
* ]
* @return mixed
* [
* data 流水信息
* ]
*/
public function createPayOrder($param)
{
$data = $param['pay_order_arr'];
$data['order_type'] = 7;
$data['store_id'] = $param['store_id'];
$data['trade_amount'] = $param['card_info']['money'];
$data['add_time'] = time();
$data['order_state'] = 'WAIT_BUYER_PAY';
$data['vid'] = $param['vip_id'];
$data['cashier_id'] = $param['cashier_id'];
$data['merchant_id'] = $param['merchant_id'];
$PayOrderModel = new RetailPayOrderModel();
$pay_order_info = $PayOrderModel->addPayOrder($data);
if (!$pay_order_info) {
return callBack(statusCode()['error'], "流水单创建失败");
}
return callBack(statusCode()['success'], "流水订创建成功", $pay_order_info);
}
/**
* 支付验证
* @param $param
* [
* merchant_id
* merchantInfo
* storeInfo
* pay_type 支付类型 1.现金 2.在线 5.其他支付
* pay_code 付款码
* other_pay_id 其他支付id
* ]
* @return mixed
* [
* pay_order_arr 流水信息
* config 支付配置
* ]
*/
public function paymentVerify($param)
{
switch ($param['pay_type']) {
case 1:
$pay_order_arr['pay_type'] = 3;
break;
case 2:
// 接收支付码
if (empty($param['pay_code']) || strlen($param['pay_code']) != 18) {
return callBack(statusCode()['error'], "请输入正确的付款码");
}
// 处理支付码
$num = substr($param['pay_code'], 0, 2);
if ($num >= 25 && $num <= 30) {
// 支付宝
$pay_order_arr['pay_type'] = 2;
} else if ($num >= 10 && $num <= 15) {
// 微信
$pay_order_arr['pay_type'] = 1;
} else {
return callBack(statusCode()['error'], "请输入正确的付款码");
}
$pay_order_arr['code'] = $param['pay_code'];
break;
case 5:
$pay_order_arr['pay_type'] = 7;
if (!empty($param['other_pay_id'])) {
$pay_order_arr['other_pay_id'] = $param['other_pay_id'];
}
break;
default:
return callBack(statusCode()['error'], "未知的支付方式");
break;
}
//支付配置
if ($pay_order_arr['pay_type'] == 1 || $pay_order_arr['pay_type'] == 2) {
$PaySetClass = new PaySet();
$paySetResult = $PaySetClass->basisMerchantIdGetInfo($param['merchant_id'], $pay_order_arr['pay_type']);
if ($paySetResult['status'] != 1) {
return $paySetResult;
}
$pay_order_arr['m_pay_type'] = $paySetResult['data']['m_pay_type'];
$config = $paySetResult['data']['config']; //支付设置
$config['body'] = $param['merchantInfo']['name'] . '-' . $param['storeInfo']['storetag'];
}
return callBack(statusCode()['success'], "验证成功", [
'pay_order_arr' => $pay_order_arr,
'config' => $config ? $config : []
]);
}
/**
* 购买次卡与卡包下单发起支付的验证
* @param $param
* [
* merchant_id
* store_id
* cashier_id
* vip_id 会员id
* type 类型 1.次卡 2.卡包
* card_id 次卡或卡包id
* pay_type 支付类型 1.现金 2.在线 5.其他支付
* pay_code 付款码
* other_pay_id 其他支付id
* ]
* @return mixed
*/
public function subCardVerify($param)
{
if (empty($param['merchant_id']) || empty($param['store_id']) || empty($param['cashier_id'])) {
return callBack(statusCode()['error'], "未知的操作员");
}
if (empty($param['vip_id'])) {
return callBack(statusCode()['error'], "请登录会员");
}
if (!in_array($param['type'], ['1', '2']) || empty($param['card_id']) || !in_array($param['pay_type'], ['1', '2', '5'])) {
return callBack(statusCode()['error'], "缺少必要参数,请刷新重试");
}
//会员验证
$VipInfoClass = new VipInfo();
$vipResult = $VipInfoClass->basisIdGetVipInfo([
'merchant_id' => $param['merchant_id'],
'vip_id' => $param['vip_id'],
'status' => 1
]);
if ($vipResult['status'] != 1) {
return callBack(statusCode()['error'], "未找到该会员");
}
//其他支付验证
if ($param['pay_type'] == 5) {
$OtherClass = new OtherPay();
$otherResult = $OtherClass->otherVerify([
'merchant_id' => $param['merchant_id'],
'id' => $param['other_pay_id']
]);
if ($otherResult['status'] != 1) {
return $otherResult;
}
}
//验证是否可以购买
$cardVerifyResult = A('Api/SubCard')->checkCard($param['merchant_id'], $param['store_id'], $param['vip_id'], $param['card_id'], $param['type'], 4, 1);
if ($cardVerifyResult['status'] != 1) {
$cardVerifyResult['message'] = $cardVerifyResult['msg'];
return $cardVerifyResult;
}
$card_info = $cardVerifyResult['data']; //卡信息
return callBack(statusCode()['success'], "验证成功", $card_info);
}
}