159 lines
4.5 KiB
PHP
Executable File
159 lines
4.5 KiB
PHP
Executable File
<?php
|
|
// +----------------------------------------------------------------------
|
|
// | 宏驰云科技开发团队 版权所有 拥有最终解释权
|
|
// +----------------------------------------------------------------------
|
|
|
|
// | Author: HcyShop-kiki
|
|
// +----------------------------------------------------------------------
|
|
|
|
namespace app\common\logic;
|
|
|
|
use app\common\server\AliPayServer;
|
|
use app\common\server\WeChatPayServer;
|
|
use app\common\model\{Client_, Order, Pay, User};
|
|
use think\facade\Env;
|
|
|
|
class PaymentLogic extends LogicBase
|
|
{
|
|
|
|
protected static $error = '';
|
|
protected static $return_code = 0;
|
|
|
|
/**
|
|
* Notes: 错误信息
|
|
* @return string
|
|
* @author 松鼠
|
|
*/
|
|
public static function getError()
|
|
{
|
|
return self::$error;
|
|
}
|
|
|
|
/**
|
|
* Notes: 返回状态码
|
|
* @return int
|
|
* @author 松鼠
|
|
*/
|
|
public static function getReturnCode()
|
|
{
|
|
return self::$return_code;
|
|
}
|
|
|
|
|
|
/**
|
|
* Notes: 支付
|
|
* @param $from
|
|
* @param $order
|
|
* @param $order_source
|
|
* @return array|bool|string
|
|
* @author 松鼠
|
|
*/
|
|
public static function pay($from, $order, $order_source)
|
|
{
|
|
switch ($order['pay_way']) {
|
|
case Pay::WECHAT_PAY:
|
|
|
|
$res = WeChatPayServer::unifiedOrder($from, $order, $order_source);
|
|
if (false === $res) {
|
|
self::$error = WeChatPayServer::getError();
|
|
}
|
|
break;
|
|
|
|
case Pay::ALI_PAY:
|
|
|
|
$aliPay = new AliPayServer();
|
|
$res = $aliPay->pay($from, $order, $order_source);
|
|
if(false === $res) {
|
|
self::$error = $aliPay->getError();
|
|
} else {
|
|
self::$return_code = 20001;//特殊状态码,用于前端判断
|
|
}
|
|
break;
|
|
|
|
default:
|
|
self::$error = '订单异常';
|
|
$res = false;
|
|
}
|
|
return $res;
|
|
}
|
|
|
|
|
|
/**
|
|
* Notes: pc预支付
|
|
* @param $order
|
|
* @param $pay_way
|
|
* @author 松鼠
|
|
* @return array|bool|string
|
|
* @throws \EasyWeChat\Kernel\Exceptions\InvalidArgumentException
|
|
* @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException
|
|
* @throws \GuzzleHttp\Exception\GuzzleException
|
|
*/
|
|
public static function pcPay($order, $pay_way, $order_source = Client_::pc)
|
|
{
|
|
$res = [];
|
|
switch ($pay_way) {
|
|
case Pay::WECHAT_PAY:
|
|
$res = WeChatPayServer::unifiedOrder('order', $order, $order_source);
|
|
if (false === $res) {
|
|
self::$error = WeChatPayServer::getError();
|
|
return false;
|
|
}
|
|
break;
|
|
case Pay::BALANCE_PAY:
|
|
$user = User::get($order['user_id']);
|
|
if ($user['user_money'] < $order['order_amount']) {
|
|
self::$error = '余额不足';
|
|
return false;
|
|
}
|
|
self::$return_code = 10001;//特殊状态码,用于前端判断
|
|
break;
|
|
case Pay::ALI_PAY:
|
|
if ($order_source != Client_::pc) {
|
|
self::$error = '支付类型错误';
|
|
return false;
|
|
}
|
|
$aliPay = new AliPayServer();
|
|
$res = $aliPay->pay('order', $order, $order_source);
|
|
if (false === $res) {
|
|
self::$error = $aliPay->getError();
|
|
return false;
|
|
}
|
|
self::$return_code = 20001;//特殊状态码,用于前端判断
|
|
break;
|
|
default:
|
|
self::$error = '无效的支付方式';
|
|
return false;
|
|
}
|
|
|
|
// 更新订单支付方式
|
|
$order = Order::get($order['id']);
|
|
$order->pay_way = $pay_way;
|
|
$order->save();
|
|
|
|
//余额支付 直接回调
|
|
if ($pay_way == Pay::BALANCE_PAY || $order['order_amount'] == 0) {
|
|
PayNotifyLogic::handle('order', $order['order_sn'], []);
|
|
}
|
|
|
|
return $res;
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
* Notes: 是否在白名单内支付
|
|
* @param $user_id
|
|
* @author 松鼠
|
|
* @return bool
|
|
*/
|
|
public static function isPayWhiteList($user_id)
|
|
{
|
|
$white_list = Env::get('wechat.white_list', '');
|
|
$white_list = explode(',', $white_list);
|
|
if (in_array($user_id, $white_list)) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
} |