988 行
34 KiB
PHP
可执行文件
988 行
34 KiB
PHP
可执行文件
<?php
|
|
|
|
namespace CashierApi\Business;
|
|
|
|
use Common\Business\BillOrder;
|
|
use Common\Business\PayCoupon;
|
|
use Common\Business\PaySet;
|
|
use Pay\Controller\CloudPayController;
|
|
use Pay\Library\Cloud\Cloud as CloudObj;
|
|
|
|
//[1.9.5]
|
|
|
|
/**
|
|
* 查询支付订单类
|
|
* Class QueryPayOrder
|
|
* [
|
|
* 购买次卡查询支付订单 cardQueryOrder
|
|
* 会员充值支付订单状态并执行回调 rechargeQueryOrder
|
|
* 会员充值支付订单状态并之心回调的参数验证 rechargeVerify
|
|
* 购买商品支付订单状态并执行回调 queryOrder
|
|
* 查询支付订单状态并执行回调的验证 queryOrderVerify
|
|
* 查询微信支付订单 wxQueryOrder
|
|
* 查询支付宝订单 zfbQueryOrder
|
|
* 查询新大陆支付订单 xDLQueryOrder
|
|
* 查询云闪付订单 yunQueryOrder
|
|
* 支付成功回调处理分润 payPaymentBack
|
|
* 微信支付成功回调处理分润 wxPaymentBack
|
|
* 支付宝支付成功回调处理分润 zfbPaymentBack
|
|
* 新大陆支付成功回调处理分润 xDLPayPaymentBack
|
|
* 云闪付支付成功回调处理分润 yunPaymentBack
|
|
* 查询订单信息流水信息支付设置 searchInfo
|
|
* 获取商户支付模式及权限 getPayConfig
|
|
*
|
|
* ]
|
|
* @package CashierApi\Business
|
|
*/
|
|
class QueryPayOrder
|
|
{
|
|
/**
|
|
* 购买次卡查询支付订单
|
|
* @param $param
|
|
* [
|
|
* merchant_id
|
|
* pay_order_id 流水id
|
|
* ]
|
|
* @return mixed
|
|
* [
|
|
* pay_channel 支付渠道 1微信 2支付宝 3新大陆 4云闪付
|
|
* status 0发出请求失败 1 发出请求成功
|
|
* return_code 0未收到第三方返回信息 1返回成功 2返回未知状态 3查询失败
|
|
* result_code 0支付失败|撤销支付失败 1 支付成功 2支付中 3撤销中 4撤销支付成功 6转入退款
|
|
* payment_status 0回调失败 1回调完成 2请继续支付
|
|
* data 返回的前端所需的信息
|
|
* ]
|
|
*/
|
|
public function cardQueryOrder($param)
|
|
{
|
|
if (empty($param['pay_order_id'])) {
|
|
return callBack(statusCode()['error'], "缺少流水唯一标识");
|
|
}
|
|
$payOrderResult = $this->searchPayOrder($param['pay_order_id']);
|
|
if ($payOrderResult['status'] != 1) {
|
|
return $payOrderResult;
|
|
}
|
|
$pay_order = $payOrderResult['data']; //流水信息
|
|
if ($pay_order['order_state'] == 'SUCCESS') {
|
|
$res = [
|
|
'status' => 1,
|
|
'result_code' => 1,
|
|
'return_code' => 1,
|
|
'payment_status' => 1,
|
|
];
|
|
return callBack(statusCode()['error'], '支付成功', $res);
|
|
}
|
|
if (!in_array($pay_order['pay_type'], ['1', '2'])) {
|
|
return callBack(statusCode()['error'], "未知的支付类型");
|
|
}
|
|
$paySetResult = $this->getPayConfig($param['merchant_id'], $pay_order['pay_type']);
|
|
if ($paySetResult['status'] != 1) {
|
|
return $paySetResult;
|
|
}
|
|
$config = $paySetResult['data']['config']; //支付设置
|
|
$result = $this->getThirdPayState([
|
|
'pay_order' => $pay_order,
|
|
'config' => $config
|
|
]); //返回的支付状态信息
|
|
return $result;
|
|
}
|
|
|
|
|
|
/**
|
|
* 会员充值支付订单状态并之心回调
|
|
* @param $param
|
|
* [
|
|
* merchant_id
|
|
* store_id
|
|
* cashier_id
|
|
* pay_order_id 流水id
|
|
* recharge_id 活动id
|
|
* ]
|
|
* @return mixed
|
|
* [
|
|
* pay_channel 支付渠道 1微信 2支付宝 3新大陆 4云闪付
|
|
* status 0发出请求失败 1 发出请求成功
|
|
* return_code 0未收到第三方返回信息 1返回成功 2返回未知状态 3查询失败
|
|
* result_code 0支付失败|撤销支付失败 1 支付成功 2支付中 3撤销中 4撤销支付成功 6转入退款
|
|
* payment_status 0回调失败 1回调完成 2请继续支付
|
|
* data 返回的前端所需的信息
|
|
* ]
|
|
*/
|
|
public function rechargeQueryOrder($param)
|
|
{
|
|
$verify = $this->rechargeVerify($param); //参数验证
|
|
if ($verify['status'] != 1) {
|
|
return $verify;
|
|
}
|
|
$payOrderResult = $this->searchPayOrder($param['pay_order_id']);
|
|
if ($payOrderResult['status'] != 1) {
|
|
return $payOrderResult;
|
|
}
|
|
$pay_order = $payOrderResult['data']; //流水信息
|
|
if ($pay_order['order_state'] == 'SUCCESS') {
|
|
$res = [
|
|
'status' => 1,
|
|
'result_code' => 1,
|
|
'return_code' => 1,
|
|
'payment_status' => 1,
|
|
];
|
|
return callBack(statusCode()['success'], '支付成功', $res);
|
|
}
|
|
$paySetResult = $this->getPayConfig($param['merchant_id'], $pay_order['pay_type']);
|
|
if ($paySetResult['status'] != 1) {
|
|
return $paySetResult;
|
|
}
|
|
$config = $paySetResult['data']['config']; //支付设置
|
|
$result = $this->getThirdPayState([
|
|
'merchant_id' => $param['merchant_id'],
|
|
'store_id' => $param['store_id'],
|
|
'recharge_id' => $param['recharge_id'],
|
|
'pay_order' => $pay_order,
|
|
'config' => $config
|
|
]); //返回的支付状态信息
|
|
return $result;
|
|
}
|
|
|
|
|
|
/**
|
|
* 会员充值支付订单状态并之心回调的参数验证
|
|
* @param $param
|
|
* [
|
|
* merchant_id
|
|
* store_id
|
|
* cashier_id
|
|
* pay_order_id 流水id
|
|
* ]
|
|
* @return mixed
|
|
*/
|
|
public function rechargeVerify($param)
|
|
{
|
|
if (empty($param['merchant_id']) || empty($param['store_id']) || empty($param['cashier_id'])) {
|
|
return callBack(statusCode()['error'], "未知的收银员");
|
|
}
|
|
if (empty($param['pay_order_id'])) {
|
|
return callBack(statusCode()['error'], "缺少订单必要参数");
|
|
}
|
|
return callBack(statusCode()['success'], "验证成功");
|
|
}
|
|
|
|
|
|
/**
|
|
* 购买商品支付订单状态并执行回调
|
|
* @param $param
|
|
* [
|
|
* merchant_id
|
|
* store_id
|
|
* cashier_id
|
|
* bill_id 订单id
|
|
* pay_order_id 流水id
|
|
* pay_money 支付金额
|
|
* amount_received 实收金额
|
|
* ]
|
|
* @return mixed
|
|
* [
|
|
* pay_channel 支付渠道 1微信 2支付宝 3新大陆 4云闪付
|
|
* status 0发出请求失败 1 发出请求成功
|
|
* return_code 0未收到第三方返回信息 1返回成功 2返回未知状态 3查询失败
|
|
* result_code 0支付失败|撤销支付失败 1 支付成功 2支付中 3撤销中 4撤销支付成功 6转入退款
|
|
* payment_status 0回调失败 1回调完成 2请继续支付
|
|
* data 返回的前端所需的信息
|
|
* ]
|
|
*/
|
|
public function queryOrder($param)
|
|
{
|
|
$verifyResult = $this->queryOrderVerify($param); //验证参数
|
|
if ($verifyResult['status'] != 1) {
|
|
return $verifyResult;
|
|
}
|
|
$infoResult = $this->searchInfo($param); //查询流水信息订单信息支付配置
|
|
if ($infoResult['status'] != 1) {
|
|
return $infoResult;
|
|
}
|
|
if (!in_array($infoResult['data']['pay_order']['pay_type'], ['1', '2'])) {
|
|
return callBack(statusCode()['error'], "未知的支付类型");
|
|
}
|
|
$pay_order = $infoResult['data']['pay_order']; //流水信息
|
|
$billOrder = $infoResult['data']['bill_order']; //订单信息
|
|
$config = $infoResult['data']['config']; //支付配置
|
|
$pay_money = $param['pay_money'];
|
|
$amount_received = $param['amount_received'];
|
|
if ($pay_order['order_state'] == 'SUCCESS' && $billOrder['pay_state'] == 1) {
|
|
$res = [
|
|
'status' => 1,
|
|
'result_code' => 1,
|
|
'return_code' => 1,
|
|
'payment_status' => 1,
|
|
];
|
|
return callBack(statusCode()['error'], "支付成功", $res);
|
|
}
|
|
$result = $this->getThirdPayState([
|
|
'pay_order' => $pay_order,
|
|
'config' => $config,
|
|
'pay_money' => $pay_money,
|
|
'amount_received' => $amount_received,
|
|
'billOrder' => $billOrder
|
|
]); //返回信息
|
|
return $result;
|
|
}
|
|
|
|
|
|
/**
|
|
* 查询微信支付订单
|
|
* @param $pay_order 流水信息
|
|
* @param $config 支付配置
|
|
* @return mixed
|
|
* [
|
|
* status 0发出请求失败 1 发出请求成功
|
|
* return_code 0未收到微信返回信息 1返回成功 2返回未知状态 3查询失败
|
|
* result_code 0支付失败|撤销支付失败 1 支付成功 2支付中 3撤销中 4撤销支付成功 6转入退款
|
|
* payInfo 微信返回的信息
|
|
* ]
|
|
*/
|
|
public function wxQueryOrder($pay_order, $config)
|
|
{
|
|
$status = 1;
|
|
$return_code = 0;
|
|
$wxResult = A('Pay/NewWxPay')->searchWxOrder_v3($pay_order, $config);
|
|
if (!empty($wxResult)) {
|
|
if ($wxResult['return_code'] == 'SUCCESS' && $wxResult['result_code'] == "SUCCESS") {
|
|
$return_code = 1;
|
|
if (!empty($pay_order['face_token'])) {
|
|
//刷脸
|
|
switch ($wxResult['trade_state']) {
|
|
case "SUCCESS":
|
|
$result_code = 1;
|
|
break;
|
|
case "REVOKED":
|
|
$result_code = 4;
|
|
break;
|
|
case "REFUND":
|
|
$result_code = 6;
|
|
break;
|
|
case "PAYERROR":
|
|
$result_code = 0;
|
|
break;
|
|
case "TRADE_PAYING":
|
|
$result_code = 2;
|
|
break;
|
|
default:
|
|
$return_code = 2;
|
|
break;
|
|
}
|
|
} else {
|
|
//码支付
|
|
switch ($wxResult['trade_state']) {
|
|
case "USERPAYING":
|
|
$result_code = 2;
|
|
break;
|
|
case "SUCCESS":
|
|
$result_code = 1;
|
|
break;
|
|
case "PAYERROR":
|
|
$result_code = 0;
|
|
break;
|
|
case "REVOKED":
|
|
$result_code = 4;
|
|
break;
|
|
case "REFUND":
|
|
$result_code = 6;
|
|
break;
|
|
default:
|
|
$return_code = 2;
|
|
break;
|
|
}
|
|
}
|
|
} else {
|
|
$return_code = 3;
|
|
}
|
|
}
|
|
$result['status'] = $status;
|
|
$result['return_code'] = $return_code;
|
|
$result['result_code'] = $result_code ? $result_code : 0;
|
|
$result['payInfo'] = $wxResult;
|
|
return $result;
|
|
}
|
|
|
|
|
|
/**
|
|
* 查询支付宝订单
|
|
* @param $pay_order
|
|
* @param $config
|
|
* @return mixed
|
|
* [
|
|
* status 0发出请求失败 1 发出请求成功
|
|
* return_code 0未收到支付平台返回信息 1返回成功 2返回未知状态 3查询失败
|
|
* result_code 0支付失败|撤销支付失败 1 支付成功 2支付中 3撤销中 4撤销支付成功 6转入退款
|
|
* payInfo 微信返回的信息
|
|
* ]
|
|
*/
|
|
public function zfbQueryOrder($pay_order, $config)
|
|
{
|
|
$status = 1;
|
|
$return_code = 0;
|
|
$zfbResult = A('Pay/NewAliPay')->inquireOrder_v3($pay_order, $config);
|
|
if (!empty($zfbResult)) {
|
|
if ($zfbResult['status'] == 1) {
|
|
$return_code = 1;
|
|
switch ($zfbResult['trade_status']) {
|
|
case 'WAIT_BUYER_PAY':
|
|
$result_code = 2;
|
|
break;
|
|
case 'TRADE_SUCCESS':
|
|
$result_code = 1;
|
|
break;
|
|
case 'TRADE_CLOSED':
|
|
case 'TRADE_FINISHED':
|
|
if ($pay_order['order_state'] == 'REVOKED') {
|
|
$result_code = 4;
|
|
} else {
|
|
$result_code = 0;
|
|
}
|
|
break;
|
|
default:
|
|
$return_code = 2;
|
|
break;
|
|
}
|
|
} else {
|
|
$return_code = 3;
|
|
}
|
|
} else {
|
|
$return_code = 0;
|
|
}
|
|
$result['status'] = $status;
|
|
$result['return_code'] = $return_code;
|
|
$result['result_code'] = $result_code ? $result_code : 0;
|
|
$result['payInfo'] = $zfbResult;
|
|
return $result;
|
|
}
|
|
|
|
|
|
/**
|
|
* 查询新大陆支付订单
|
|
* @param $out_trade_no 订单内部流水号
|
|
* @param $merchant_id
|
|
* @param $add_time
|
|
* @return mixed
|
|
* [
|
|
* status 0发出请求失败 1 发出请求成功
|
|
* return_code 0未收到返回信息 1返回成功 2返回未知状态 3查询失败
|
|
* result_code 0支付失败|撤销支付失败 1 支付成功 2支付中 3撤销中 4撤销支付成功 6转入退款
|
|
* dlInfo 返回的支付信息
|
|
* ]
|
|
*/
|
|
public function xDLQueryOrder($out_trade_no, $merchant_id, $add_time)
|
|
{
|
|
$status = 1;
|
|
$return_code = 0;
|
|
$daLuResult = A('Pay/PayContinent')->QryBarcode($out_trade_no, $merchant_id, $add_time);
|
|
file_put_contents('./xdlLinePay.txt', date('Y-m-d H:i:s') . json_encode($daLuResult), FILE_APPEND);
|
|
if ($daLuResult['returnCode'] == '000000') {
|
|
$return_code = 1;
|
|
switch ($daLuResult['result']) {
|
|
case 'A':
|
|
$result_code = 2;
|
|
break;
|
|
case 'S':
|
|
$result_code = 1;
|
|
break;
|
|
default:
|
|
$result_code = 0;
|
|
break;
|
|
}
|
|
} else if ($daLuResult['returnCode'] == '000035') {
|
|
$return_code = 1;
|
|
} else {
|
|
$return_code = 3;
|
|
}
|
|
$result['status'] = $status;
|
|
$result['return_code'] = $return_code;
|
|
$result['result_code'] = $result_code ? $result_code : 0;
|
|
$result['payInfo'] = $daLuResult;
|
|
return $result;
|
|
}
|
|
|
|
|
|
/**
|
|
* 查询云闪付订单
|
|
* @param $out_trade_no
|
|
* @param $pay_type
|
|
* @param $config
|
|
* @return mixed
|
|
* [
|
|
* status 0发出请求失败 1 发出请求成功
|
|
* return_code 0未收到返回信息 1返回成功 2返回未知状态 3查询失败
|
|
* result_code 0支付失败|撤销支付失败 1 支付成功 2支付中 3撤销中 4撤销支付成功 6转入退款
|
|
* dlInfo 返回的支付信息
|
|
* ]
|
|
*/
|
|
public function yunQueryOrder($out_trade_no, $pay_type, $config)
|
|
{
|
|
$status = 1;
|
|
$return_code = 0;
|
|
switch ($pay_type) {
|
|
case 1:
|
|
$wechat = 'wechat';
|
|
break;
|
|
case 2:
|
|
$wechat = 'alipay';
|
|
break;
|
|
}
|
|
$CloudPayController = new CloudPayController();
|
|
$data = $CloudPayController->retailPayConfigToCloudPayConfig($config);
|
|
$yun = new CloudObj($data);
|
|
$yunResult = $yun->queryOrder_v1($out_trade_no, $wechat);
|
|
if (!empty($yunResult)) {
|
|
if ($yunResult['respCode'] == '00') {
|
|
$return_code = 1;
|
|
switch ($yunResult['origRespCode']) {
|
|
case '00':
|
|
$result_code = 1;
|
|
break;
|
|
case '01':
|
|
$result_code = 6;
|
|
break;
|
|
case '02':
|
|
case '05':
|
|
$result_code = 2;
|
|
break;
|
|
case '03':
|
|
case '06':
|
|
$result_code = 0;
|
|
break;
|
|
case '04':
|
|
$result_code = 4;
|
|
break;
|
|
default:
|
|
$return_code = 2;
|
|
break;
|
|
}
|
|
} else {
|
|
$return_code = 3;
|
|
}
|
|
} else {
|
|
$return_code = 0;
|
|
}
|
|
$result['status'] = $status;
|
|
$result['return_code'] = $return_code;
|
|
$result['result_code'] = $result_code ? $result_code : 0;
|
|
$result['payInfo'] = $yunResult;
|
|
return $result;
|
|
}
|
|
|
|
|
|
/**
|
|
* 支付成功回调处理分润
|
|
* @param $pay_channel 支付渠道 1微信 2支付宝 3新大陆 4云闪付
|
|
* @param $payInfo 支付成功返回的信息
|
|
* @param $pay_order 流水信息
|
|
* @param $config 支付配置
|
|
* @return array
|
|
*/
|
|
public function payPaymentBack($pay_channel, $payInfo, $pay_order, $config = [])
|
|
{
|
|
switch ($pay_channel) {
|
|
case 1:
|
|
$upData = $this->wxPaymentBack($pay_order, $config, $payInfo);
|
|
break;
|
|
case 2:
|
|
$upData = $this->zfbPaymentBack($pay_order, $config, $payInfo);
|
|
break;
|
|
case 3:
|
|
$upData = $this->xDLPayPaymentBack($pay_order, $payInfo);
|
|
break;
|
|
case 4:
|
|
$upData = $this->yunPaymentBack($config, $payInfo, $pay_order);
|
|
break;
|
|
case 5:
|
|
//乐返
|
|
$upData = $this->happyPaymentBack($config, $payInfo, $pay_order);
|
|
break;
|
|
case 6:
|
|
//拉卡拉
|
|
$upData = $this->laKaLaPaymentBack($config, $payInfo, $pay_order);
|
|
break;
|
|
case 7:
|
|
//钱客云
|
|
$upData = $this->moneyGuestPaymentBack($config, $payInfo, $pay_order);
|
|
break;
|
|
}
|
|
return $upData;
|
|
}
|
|
|
|
|
|
/**
|
|
* 微信支付成功回调处理分润
|
|
* @param $pay_order
|
|
* @param $config
|
|
* @param $payInfo
|
|
* @return array
|
|
*/
|
|
public function wxPaymentBack($pay_order, $config, $payInfo)
|
|
{
|
|
if ($pay_order['m_pay_type'] == 1) {
|
|
$mch_id = $config['wx_mch_id'];
|
|
} else {
|
|
//子商户号
|
|
$mch_id = $config['wx_sub_mchid'];
|
|
}
|
|
$upData = [
|
|
'trade_no' => $payInfo['transaction_id'],
|
|
'order_state' => 'SUCCESS',
|
|
'trade_date' => time(),
|
|
'extend_content' => json_encode($payInfo),
|
|
'mer_id' => $mch_id,
|
|
];
|
|
if ($payInfo['coupon_count'] > 0) {
|
|
//使用了代金券
|
|
$PayCouponClass = new PayCoupon();
|
|
$result = $PayCouponClass->couponVerification_v1(json_encode([
|
|
'pay_info' => $payInfo,
|
|
'use_type' => $pay_order['order_type'],
|
|
'order_id' => $pay_order['bill_id'] ? $pay_order['bill_id'] : $pay_order['id'],
|
|
'store_id' => $pay_order['store_id'],
|
|
'use_scene' => 2,
|
|
'merchant_id' => $pay_order['merchant_id'],
|
|
'coupon_way'=>1 //核销
|
|
]));//修改代金券使用状态
|
|
if ($result['status'] == 1) {
|
|
$upData['pay_coupon_id_str'] = $result['data']['pay_coupon_id_str']; //代金券id拼接
|
|
$upData['pay_coupon_fee'] = $result['data']['pay_coupon_fee'];//代金券优惠总金额
|
|
}
|
|
}
|
|
if ($pay_order['m_pay_type'] == 2) {
|
|
A('Pay/Base')->doAddRate($payInfo['transaction_id'], $pay_order, 2);//分润
|
|
}
|
|
return $upData;
|
|
}
|
|
|
|
|
|
/**
|
|
* 支付宝支付成功回调处理分润
|
|
* @param $pay_order
|
|
* @param $config
|
|
* @param $payInfo
|
|
* @return array
|
|
*/
|
|
public function zfbPaymentBack($pay_order, $config, $payInfo)
|
|
{
|
|
if ($pay_order['m_pay_type'] == 1) {
|
|
$mch_id = $config['alipay_appid'];
|
|
} else {
|
|
if (!empty($config['alipay_sellerid'])) {
|
|
$mch_id = $config['alipay_sellerid'];
|
|
} else {
|
|
$mch_id = $config['alipay_token'];
|
|
}
|
|
}
|
|
$upData = array(
|
|
'trade_no' => $payInfo['trade_no'],
|
|
'order_state' => 'SUCCESS',
|
|
'trade_date' => time(),
|
|
'extend_content' => json_encode($payInfo),
|
|
'mer_id' => $mch_id
|
|
);
|
|
if ($pay_order['m_pay_type'] == 2) {
|
|
A('Pay/Base')->doAddRate($payInfo['trade_no'], $pay_order, 1);//分润
|
|
}
|
|
return $upData;
|
|
}
|
|
|
|
|
|
/**
|
|
* 新大陆支付成功回调处理分润
|
|
* @param $pay_order
|
|
* @param $payInfo
|
|
* @return mixed
|
|
*/
|
|
public function xDLPayPaymentBack($pay_order, $payInfo)
|
|
{
|
|
$upData['trade_no'] = $payInfo['orderNo'];
|
|
$upData['order_state'] = 'SUCCESS';
|
|
$upData['trade_date'] = time();
|
|
$upData['extend_content'] = json_encode($payInfo);
|
|
A('Pay/PayContinent')->doAddRate($payInfo['orderNo'], $pay_order, 3);
|
|
return $upData;
|
|
}
|
|
|
|
|
|
/**
|
|
* 云闪付支付成功回调处理分润
|
|
* @param $config
|
|
* @param $payInfo
|
|
* @param $pay_order
|
|
* @return array
|
|
*/
|
|
public function yunPaymentBack($config, $payInfo, $pay_order)
|
|
{
|
|
A('Pay/PayContinent')->doAddRate($payInfo['transIndex'], $pay_order, 4);
|
|
$upData = [
|
|
'trade_no' => $payInfo['transIndex'],
|
|
'order_state' => 'SUCCESS',
|
|
'trade_date' => time(),
|
|
'extend_content' => json_encode($payInfo),
|
|
'mer_id' => $config['cloud_mer_id']
|
|
];
|
|
return $upData;
|
|
}
|
|
|
|
/**
|
|
* 乐返支付成功回调处理分润
|
|
* @param $config
|
|
* @param $payInfo
|
|
* @param $pay_order
|
|
* @return array
|
|
*/
|
|
public function happyPaymentBack($config, $payInfo, $pay_order)
|
|
{
|
|
A('Pay/PayContinent')->doAddRate($payInfo['data']['batch'], $pay_order, 5);
|
|
$upData = [
|
|
'trade_no' => $payInfo['data']['batch'],
|
|
'order_state' => 'SUCCESS',
|
|
'trade_date' => time(),
|
|
'extend_content' => json_encode($payInfo),
|
|
'mer_id' => $config['happy_pay_num'],//乐返商户编号
|
|
];
|
|
return $upData;
|
|
}
|
|
|
|
/**
|
|
* 拉卡拉支付成功回调处理分润
|
|
* @param $config
|
|
* @param $payInfo
|
|
* @param $pay_order
|
|
* @return array
|
|
*/
|
|
public function laKaLaPaymentBack($config, $payInfo, $pay_order)
|
|
{
|
|
A('Pay/PayContinent')->doAddRate($payInfo['respData']['tradeNo'], $pay_order, 6);
|
|
$upData = [
|
|
'trade_no' => $payInfo['respData']['tradeNo'],
|
|
'order_state' => 'SUCCESS',
|
|
'trade_date' => time(),
|
|
'extend_content' => json_encode($payInfo),
|
|
'mer_id' => $config['lakala_pay_num'],//拉卡拉商户编号
|
|
];
|
|
return $upData;
|
|
}
|
|
|
|
/**
|
|
* 钱客云支付成功回调处理分润
|
|
* @param $config
|
|
* @param $payInfo
|
|
* @param $pay_order
|
|
* @return array
|
|
*/
|
|
public function moneyGuestPaymentBack($config, $payInfo, $pay_order)
|
|
{
|
|
A('Pay/PayContinent')->doAddRate($payInfo['obj']['orderNumber'], $pay_order, 7);
|
|
$upData = [
|
|
'trade_no' => $payInfo['obj']['orderNumber'],
|
|
'order_state' => 'SUCCESS',
|
|
'trade_date' => time(),
|
|
'extend_content' => json_encode($payInfo),
|
|
'mer_id' => $config['qian_ke_mid'],//钱客云商户编号
|
|
];
|
|
return $upData;
|
|
}
|
|
|
|
|
|
/**
|
|
* 查询订单信息流水信息支付设置
|
|
* @param $param
|
|
* [
|
|
* merchant_id
|
|
* store_id
|
|
* bill_id 订单id
|
|
* pay_order_id 流水id
|
|
* pay_money 支付金额
|
|
* amount_received 实收金额
|
|
* ]
|
|
* @return mixed
|
|
*/
|
|
public function searchInfo($param)
|
|
{
|
|
$payOrderResult = $this->searchPayOrder($param['pay_order_id']);
|
|
if ($payOrderResult['status'] != 1) {
|
|
return $payOrderResult;
|
|
}
|
|
$pay_order = $payOrderResult['data']; //流水信息
|
|
$billOrderResult = $this->searchBillOrder($param['bill_id']);
|
|
if ($billOrderResult['status'] != 1) {
|
|
return $billOrderResult;
|
|
}
|
|
$bill_order = $billOrderResult['data']; //订单信息
|
|
$paySetResult = $this->getPayConfig($param['merchant_id'], $pay_order['pay_type']);
|
|
if ($paySetResult['status'] != 1) {
|
|
return $paySetResult;
|
|
}
|
|
$config = $paySetResult['data']['config']; //支付设置
|
|
$result = [
|
|
'pay_order' => $pay_order,
|
|
'bill_order' => $bill_order,
|
|
'config' => $config
|
|
];
|
|
return callBack(statusCode()['success'], "查询成功", $result);
|
|
}
|
|
|
|
|
|
/**
|
|
* 第三方查询支付订单结果
|
|
* @param $param
|
|
* [
|
|
* [
|
|
* 公共参数
|
|
* pay_order 流水信息
|
|
* config 支付配置
|
|
* ]
|
|
* [
|
|
* 次卡
|
|
* ]
|
|
* [
|
|
* 会员充值
|
|
* merchant_id
|
|
* store_id
|
|
* recharge_id 活动id
|
|
* ]
|
|
* [
|
|
* pay_money 支付金额
|
|
* amount_received 实收金额
|
|
* billOrder 订单信息
|
|
* ]
|
|
* @return string
|
|
*/
|
|
public function getThirdPayState($param)
|
|
{
|
|
if (!in_array($param['pay_order']['pay_type'], ['1', '2'])) {
|
|
return callBack(statusCode()['error'], "未知的支付类型");
|
|
}
|
|
if ($param['pay_order']['m_pay_type'] == 3 || $param['pay_order']['m_pay_type'] == 4 || $param['pay_order']['m_pay_type'] == 5 || $param['pay_order']['m_pay_type'] == 6 || $param['pay_order']['m_pay_type'] == 7) {
|
|
$pay_channel = $param['pay_order']['m_pay_type'];
|
|
} else {
|
|
$pay_channel = $param['pay_order']['pay_type'];
|
|
}
|
|
switch ($pay_channel) {
|
|
case 1:
|
|
//微信
|
|
$payResult = $this->wxQueryOrder($param['pay_order'], $param['config']);
|
|
break;
|
|
case 2:
|
|
//支付宝
|
|
$payResult = $this->zfbQueryOrder($param['pay_order'], $param['config']);
|
|
break;
|
|
case 3:
|
|
//新大陆
|
|
$payResult = $this->xDLQueryOrder($param['pay_order']['out_trade_no'], $param['pay_order']['merchant_id'], $param['pay_order']['add_time']);
|
|
break;
|
|
case 4:
|
|
//云闪付
|
|
$payResult = $this->yunQueryOrder($param['pay_order']['out_trade_no'], $param['pay_order']['pay_type'], $param['config']);
|
|
break;
|
|
case 5:
|
|
//乐返
|
|
$happyPay = new \HappyPay\Business\HappyPay();
|
|
$payResult = $happyPay->happyPayQueryOrder($param);
|
|
break;
|
|
case 6:
|
|
//拉卡拉
|
|
$laKaLaPay = new \LaKaLaPay\Business\LaKaLaMis();
|
|
$payResult = $laKaLaPay->laKaLaPayQueryOrder($param);
|
|
break;
|
|
case 7:
|
|
//钱客云
|
|
$moneyGuest = new \MoneyGuestPay\Business\MoneyGuest();
|
|
$payResult = $moneyGuest->moneyGuestQueryOrder($param);
|
|
break;
|
|
}
|
|
$status = $payResult['status'];
|
|
$return_code = $payResult['return_code'];
|
|
$result_code = $payResult['result_code'];
|
|
//支付成功各渠道处理分润并返回流水表修改的信息
|
|
if ($status == 1 && $return_code == 1 && $result_code == 1) {
|
|
$payInfo = $payResult['payInfo'];
|
|
$upData = $this->payPaymentBack($pay_channel, $payInfo, $param['pay_order'], $param['config']);
|
|
$param['upData'] = $upData;
|
|
}
|
|
//返回信息
|
|
if ($status == 1) {
|
|
switch ($return_code) {
|
|
case 0:
|
|
$message = '未收到第三方支付返回信息';
|
|
break;
|
|
case 1:
|
|
switch ($result_code) {
|
|
case 0:
|
|
$message = '支付失败';
|
|
break;
|
|
case 1:
|
|
//支付成功回调
|
|
$callResult = $this->paymentCallBack($param);
|
|
$message = $callResult['data']['message'];
|
|
$result['payment_status'] = $callResult['data']['payment_status'];
|
|
$result['data'] = $callResult['data']['data'];
|
|
$result['data']['pay_coupon_fee'] = $upData['pay_coupon_fee']?$upData['pay_coupon_fee']:0;
|
|
break;
|
|
case 2:
|
|
$message = '支付中';
|
|
break;
|
|
case 3:
|
|
$message = '撤销中';
|
|
break;
|
|
case 4:
|
|
$message = '撤销支付成功';
|
|
break;
|
|
case 5:
|
|
$message = '撤销支付失败';
|
|
break;
|
|
case 6:
|
|
$message = '转入退款';
|
|
break;
|
|
}
|
|
break;
|
|
case 2:
|
|
$message = '返回未知状态';
|
|
break;
|
|
case 3:
|
|
$message = '查询失败';
|
|
break;
|
|
}
|
|
} else {
|
|
$message = '发出请求失败';
|
|
}
|
|
$result['status'] = $status;
|
|
$result['return_code'] = $return_code;
|
|
$result['result_code'] = $result_code;
|
|
$result['pay_channel'] = $pay_channel;
|
|
$result['message'] = $message;
|
|
return $result;
|
|
}
|
|
|
|
|
|
/**
|
|
* 支付成功回调
|
|
* @param $param
|
|
* [
|
|
* 修改的信息 upData
|
|
* 流水信息 pay_order
|
|
* ]
|
|
* @return mixed
|
|
*/
|
|
public function paymentCallBack($param)
|
|
{
|
|
$upData = $param['upData'];
|
|
switch ($param['pay_order']['order_type']) {
|
|
case 1:
|
|
//购买商品
|
|
$PaymentCallBackClass = new PaymentCallBack();
|
|
$callResult = $PaymentCallBackClass->callBackHandle([
|
|
'pay_order' => $param['pay_order'],
|
|
'pay_type' => $param['pay_order']['pay_type'],
|
|
'upData' => $upData,
|
|
'pay_money' => $param['pay_money'],
|
|
'amount_received' => $param['amount_received'],
|
|
'billOrder' => $param['billOrder'],
|
|
]);
|
|
$payment_status = $callResult['status'];
|
|
$message = $callResult['message'];
|
|
break;
|
|
case 2:
|
|
//会员充值
|
|
$PaymentCallBackClass = new PaymentCallBack();
|
|
$callResult = $PaymentCallBackClass->rechargeCallBackHandle([
|
|
'merchant_id' => $param['merchant_id'],
|
|
'store_id' => $param['store_id'],
|
|
'pay_order' => $param['pay_order'],
|
|
'recharge_id' => $param['recharge_id'] ? $param['recharge_id'] : 0,
|
|
'upData' => $upData
|
|
]);
|
|
$payment_status = $callResult['status'];
|
|
$data = $callResult['data'];
|
|
$message = $callResult['message'];
|
|
break;
|
|
case 7:
|
|
//购买次卡
|
|
$PaymentCallBackClass = new PaymentCallBack();
|
|
$callResult = $PaymentCallBackClass->cardCallBackHandle([
|
|
'pay_order' => $param['pay_order'],
|
|
'upData' => $upData
|
|
]);
|
|
$payment_status = $callResult['status'];
|
|
$message = $callResult['message'];
|
|
break;
|
|
}
|
|
return callBack(statusCode()['success'], "回调执行", [
|
|
'message' => $message ? $message : '',
|
|
'data' => $data ? $data : [],
|
|
'payment_status' => $payment_status
|
|
]);
|
|
}
|
|
|
|
|
|
/**
|
|
* 查询流水信息
|
|
* @param $pay_order_id 流水id
|
|
* @return mixed
|
|
*/
|
|
public function searchPayOrder($pay_order_id)
|
|
{
|
|
$payOrderClass = new \Common\Business\PayOrder();
|
|
$result = $payOrderClass->basisIdGetInfo($pay_order_id);
|
|
return $result;
|
|
}
|
|
|
|
|
|
/**
|
|
* 查询订单信息
|
|
* @param $bill_id 订单id
|
|
* @return mixed
|
|
*/
|
|
public function searchBillOrder($bill_id)
|
|
{
|
|
$billOrderClass = new BillOrder();
|
|
$result = $billOrderClass->basisIdGetInfo($bill_id);
|
|
return $result;
|
|
}
|
|
|
|
|
|
/**
|
|
* 获取商户支付模式及权限
|
|
* @param $merchant_id
|
|
* @param $pay_type 支付类型 1微信 2支付宝 3现金 5其他 6余额 7赊账
|
|
* @return mixed
|
|
* [
|
|
* data => config 支付配置
|
|
* ]
|
|
*/
|
|
public function getPayConfig($merchant_id, $pay_type)
|
|
{
|
|
$paySetClass = new PaySet();
|
|
$result = $paySetClass->basisMerchantIdGetInfo($merchant_id, $pay_type);
|
|
return $result;
|
|
}
|
|
|
|
|
|
/**
|
|
* 查询支付订单状态的参数验证
|
|
* @param $param
|
|
* [
|
|
* cashier_id
|
|
* bill_id 订单id
|
|
* pay_order_id 流水id
|
|
* pay_money 支付金额
|
|
* amount_received 实收金额
|
|
* ]
|
|
* @return mixed
|
|
*/
|
|
public function queryOrderVerify($param)
|
|
{
|
|
if (empty($param['merchant_id']) || empty($param['store_id']) || empty($param['cashier_id'])) {
|
|
return callBack(statusCode()['error'], "未知的收银员");
|
|
}
|
|
if (empty($param['bill_id']) || empty($param['pay_order_id'])) {
|
|
return callBack(statusCode()['error'], "缺少订单必要参数");
|
|
}
|
|
if (!verifyPrice($param['pay_money']) || !verifyPrice($param['amount_received']) || floatval($param['amount_received']) < floatval($param['pay_money'])) {
|
|
return callBack(statusCode()['error'], "支付金额有误");
|
|
}
|
|
return callBack(statusCode()['success'], "验证成功");
|
|
}
|
|
} |