328 行
11 KiB
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);
|
|
}
|
|
} |