init: import production code mss.nahaichuan.com (exclude Runtime/Uploads/backups/logs)
这个提交包含在:
@@ -0,0 +1,988 @@
|
||||
<?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'], "验证成功");
|
||||
}
|
||||
}
|
||||
在新工单中引用
屏蔽一个用户