12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- <?php
- namespace app\data\service\payment;
- use app\data\model\DataUserBalance;
- use app\data\model\ShopOrder;
- use app\data\service\PaymentService;
- use app\data\service\UserBalanceService;
- use think\admin\Exception;
- use think\admin\extend\CodeExtend;
- /**
- * 账号余额支付参数处理
- * Class BalancePaymentService
- * @package app\data\service\payment
- */
- class BalancePaymentService extends PaymentService
- {
- /**
- * 订单信息查询
- * @param string $orderNo
- * @return array
- */
- public function query(string $orderNo): array
- {
- return [];
- }
- /**
- * 支付通知处理
- * @return string
- */
- public function notify(): string
- {
- return 'SUCCESS';
- }
- /**
- * 创建订单支付参数
- * @param string $openid 用户OPENID
- * @param string $orderNo 交易订单单号
- * @param string $payAmount 交易订单金额(元)
- * @param string $payTitle 交易订单名称
- * @param string $payRemark 订单订单描述
- * @param string $payReturn 完成回跳地址
- * @param string $payImage 支付凭证图片
- * @return array
- * @throws \think\admin\Exception
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\DbException
- * @throws \think\db\exception\ModelNotFoundException
- */
- public function create(string $openid, string $orderNo, string $payAmount, string $payTitle, string $payRemark, string $payReturn = '', string $payImage = ''): array
- {
- $order = ShopOrder::mk()->where(['order_no' => $orderNo])->find();
- if (empty($order)) throw new Exception("订单不存在");
- if ($order['status'] !== 2) throw new Exception("不可发起支付");
- // 创建支付行为
- $this->createPaymentAction($orderNo, $payTitle, $payAmount);
- // 检查能否支付
- [$total, $count] = UserBalanceService::amount($order['uuid'], [$orderNo]);
- if ($payAmount > $total - $count) throw new Exception("可抵扣余额不足");
- try {
- // 扣减用户余额
- $this->app->db->transaction(function () use ($order, $payAmount) {
- // 更新订单余额
- ShopOrder::mk()->where(['order_no' => $order['order_no']])->update([
- 'payment_balance' => $payAmount,
- ]);
- // 扣除余额金额
- DataUserBalance::mUpdate([
- 'uuid' => $order['uuid'],
- 'code' => "KC{$order['order_no']}",
- 'name' => "账户余额支付",
- 'remark' => "支付订单 {$order['order_no']} 的扣除余额 {$payAmount} 元",
- 'amount' => -$payAmount,
- ], 'code');
- // 更新支付行为
- $this->updatePaymentAction($order['order_no'], CodeExtend::uniqidDate(20), $payAmount, '账户余额支付');
- });
- // 刷新用户余额
- UserBalanceService::amount($order['uuid']);
- return ['code' => 1, 'info' => '余额支付完成'];
- } catch (\Exception $exception) {
- return ['code' => 0, 'info' => $exception->getMessage()];
- }
- }
- }
|