This commit is contained in:
mkm 2024-05-06 14:02:15 +08:00
parent 0e4c8ea860
commit 61c88e968c
4 changed files with 106 additions and 5 deletions

View File

@ -7,11 +7,14 @@ use app\admin\logic\retail\CashierclassLogic;
use app\api\logic\order\OrderLogic;
use app\api\controller\BaseApiController;
use app\api\lists\order\RetailOrderList;
use app\api\service\WechatUserService;
use app\common\logic\order\RetailOrderLogic;
use app\common\enum\PayEnum;
use app\common\logic\PaymentLogic;
use app\common\model\order\Cart;
use app\common\model\retail\Cashierclass;
use app\common\model\user\User;
use app\common\service\wechat\WeChatConfigService;
class RetailOrderController extends BaseApiController
{
@ -59,7 +62,6 @@ class RetailOrderController extends BaseApiController
* @notes 创建零售订单
*/
public function createOrder(){
$user=User::where('id',$this->request->userId)->find();
$cartId = (Array)$this->request->post('cart_id', []);
$mer_id = (Array)$this->request->post('mer_id', 0);
@ -87,6 +89,13 @@ class RetailOrderController extends BaseApiController
}else{
return $this->fail(RetailOrderLogic::getError());
}
}elseif($pay_type==PayEnum::WECHAT_PAY){
$redirectUrl = $params['redirect'] ?? '/pages/payment/payment';
$result = PaymentLogic::pay($pay_type,'', $order, $this->userInfo['terminal'], $redirectUrl);
if (false === $result) {
return $this->fail(PaymentLogic::getError(), $params);
}
return $this->success('', $result);
}
return $this->data(['order_id'=>$order->id]);
}else{

View File

@ -0,0 +1,92 @@
<?php
// +----------------------------------------------------------------------
// | likeadmin快速开发前后端分离管理后台PHP版
// +----------------------------------------------------------------------
// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
// | 开源版本可自由商用可去除界面版权logo
// | gitee下载https://gitee.com/likeshop_gitee/likeadmin
// | github下载https://github.com/likeshop-github/likeadmin
// | 访问官网https://www.likeadmin.cn
// | likeadmin团队 版权所有 拥有最终解释权
// +----------------------------------------------------------------------
// | author: likeadminTeam
// +----------------------------------------------------------------------
namespace app\common\logic;
use app\common\enum\PayEnum;
use app\common\service\pay\WeChatPayService;
/**
* 支付逻辑
* Class PaymentLogic
* @package app\common\logic
*/
class PaymentLogic extends BaseLogic
{
/**
* @notes 支付
* @param $payWay
* @param $from
* @param $order
* @param $terminal
* @param $redirectUrl
* @return array|false|mixed|string
* @author 段誉
* @date 2023/2/28 12:15
*/
public static function pay($payWay, $from, $order, $terminal, $redirectUrl)
{
// 支付编号-仅为微信支付预置(同一商户号下不同客户端支付需使用唯一订单号)
$paySn = $order['number'];
// if ($payWay == PayEnum::WECHAT_PAY) {
// $paySn = self::formatOrderSn($order['sn'], $terminal);
// }
if ($order['actual'] == 0) {
PayNotifyLogic::handle($from, $order['number']);
return ['pay_way' => PayEnum::BALANCE_PAY];
}
switch ($payWay) {
case PayEnum::WECHAT_PAY:
$payService = (new WeChatPayService($terminal, $order['uid'] ?? null));
$order['pay_sn'] = $paySn;
$order['redirect_url'] = $redirectUrl;
$result = $payService->pay($from, $order);
break;
default:
self::$error = '订单异常';
$result = false;
}
if (false === $result && !self::hasError()) {
d($payService->getError());
self::setError($payService->getError());
}
return $result;
}
/**
* @notes 设置订单号 支付回调时截取前面的单号 18
* @param $orderSn
* @param $terminal
* @return string
* @author 段誉
* @date 2023/3/1 16:31
* @remark 回调时使用了不同的回调地址,导致跨客户端支付时(例如小程序,公众号)可能出现201,商户订单号重复错误
*/
public static function formatOrderSn($orderSn, $terminal)
{
$suffix = mb_substr(time(), -4);
return $orderSn . $terminal . $suffix;
}
}

View File

@ -91,6 +91,7 @@ class WeChatPayService extends BasePayService
'pay_way' => PayEnum::WECHAT_PAY
];
} catch (\Exception $e) {
d($e);
$this->setError($e->getMessage());
return false;
}
@ -117,7 +118,7 @@ class WeChatPayService extends BasePayService
"out_trade_no" => $order['pay_sn'],
"notify_url" => $this->config['notify_url'],
"amount" => [
"total" => intval($order['order_amount'] * 100),
"total" => intval($order['actual'] * 100),
],
"payer" => [
"openid" => $this->auth['openid']
@ -186,7 +187,7 @@ class WeChatPayService extends BasePayService
'order' => '商品',
'recharge' => '充值',
];
return $desc[$from] ?? '商品';
return '商品';//$desc[$from] ?? '商品';
}

View File

@ -85,8 +85,7 @@ class WeChatConfigService
*/
public static function getPayConfigByTerminal($terminal)
{
$notifyUrl ='//'.request()->host().'/pay/notifyMnp';
$notifyUrl ='https://'.request()->host().'/pay/notifyMnp';
$pay = PayConfig::where(['pay_way' => PayEnum::WECHAT_PAY])->findOrEmpty()->toArray();
//判断是否已经存在证书文件夹,不存在则新建