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); } }