| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- <?php
- declare(strict_types=1);
- namespace Modules\Api\Services;
- use App\Constants\RedisKeyConstant;
- use App\Events\PayTotalEvent;
- use App\Models\MerchantPaymentTypeModel;
- use App\Models\OrderModel;
- use App\Models\PaymentTypeModel;
- use App\Repositories\Service\Payment\PaymentInterface;
- use Illuminate\Support\Facades\Cache;
- class PaymentService
- {
- /**
- * 获取对应的商户通道
- *
- * @param $merchantUid
- * @return mixed
- */
- public function getAllPayments($merchantUid)
- {
- $payment = Cache::remember(RedisKeyConstant::PAYMENT_TYPE . $merchantUid, 60 * 60 * 12, function () use ($merchantUid){
- // 获取已经分配的支付通道
- $relation = MerchantPaymentTypeModel::query()->where(['merchant_uid' => $merchantUid])->get(['payment_type_uid']);
- if (empty($relation)) {
- return [];
- }
- $paymentTypeUids = [];
- foreach ($relation as $v){
- $paymentTypeUids[] = $v->payment_type_uid;
- }
- $paymentLists = PaymentTypeModel::query()->whereIn('uid', $paymentTypeUids)->where('status', 1)->orderBy('weights', 'desc')->get(['id', 'name', 'pay_type', 'belong_device', 'limit', 'limit_type']);
- if ($paymentLists->isEmpty()) {
- return [];
- } else {
- return $paymentLists->toArray();
- }
- });
- return $payment;
- }
- /**
- * 创建系统订单
- *
- * @param $merchantUid 商户uid
- * @param $paymentTypeInfo 支付类型
- * @param $inputData 请求数据
- * @return array|false
- */
- public function createdOrder(string $merchantUid, $paymentTypeInfo, $inputData, $merchantMark)
- {
- $data = [
- 'order_sn' => createOrderSn('PAY', $merchantMark),
- 'merchant_order_sn' => $inputData['order_id'],
- 'merchant_uid' => $merchantUid,
- 'order_amount' => $inputData['amount'],
- 'real_amount' => $inputData['amount'],
- 'status' => 1,
- 'notice_status' => 1,
- 'payment_uid' => $paymentTypeInfo->payment->uid ?? '',
- 'payment_attr_uid' => $paymentTypeInfo->paymentAttr->uid ?? '',
- 'pay_type' => $paymentTypeInfo->pay_type,
- 'notify_url' => $inputData['notify_url'],
- 'redirect_url' => $inputData['redirect_url'],
- 'product_name' => $inputData['product_name'],
- 'merchant_info' => json_encode($inputData),
- ];
- $res = OrderModel::query()->create($data);
- if ($res) {
- $data['pay_code'] = $paymentTypeInfo->payment->pay_code;
- $data['pay_attr_code'] = $paymentTypeInfo->paymentAttr->code;
- $data['order_id'] = $res->id;
- $data['ip'] = $inputData['ip'];
- $data['partner_id'] = $paymentTypeInfo->payment->partner_id;
- event(new PayTotalEvent($merchantUid, $paymentTypeInfo->payment->uid, $paymentTypeInfo->paymentAttr->uid, (float)$inputData['amount'], 1));
- return $data;
- } else {
- return false;
- }
- }
- /**
- * 获取支付订单
- *
- * @param $order
- * @return string
- */
- public function createPayLink($order)
- {
- $config = make(ConfigService::class)->getConfig();
- $payUrl = $config['pay_notify_url']['value'];
- $notifyUrl = trim($payUrl, '/');
- $notifyUrl .= '/api/notify/' . $order['order_id'] . '/' . $order['pay_code'];
- $payData = [
- 'order_id' => $order['order_id'],
- 'order_sn' => $order['order_sn'],
- 'money' => $order['real_amount'],
- 'pay_attr_code' => $order['pay_attr_code'],
- 'notify_url' => $notifyUrl,
- 'partner_id' => $order['partner_id'],
- 'pay_url' => $payUrl,
- 'ip' => $order['ip']
- ];
- $result = PaymentInterface::factory($order['pay_code'])->createPayLink($payData);
- if ($result) {
- return $result;
- }
- return '';
- }
- }
|