| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- <?php
- namespace Modules\Api\Controllers;
- use App\Models\MerchantModel;
- use App\Models\MerchantPaymentTypeModel;
- use App\Models\PaymentTypeModel;
- use Illuminate\Support\Facades\Validator;
- use Modules\Api\Services\PaymentService;
- class MerchantPayController extends BaseController
- {
- public function getPayUrl()
- {
- $inputData = $this->getJsonData();
- $rules = [
- 'merchant_code' => 'required|string',
- 'payment_id' => 'required|integer',
- 'amount' => 'required',
- 'order_id' => 'required|string',
- 'notify_url' => 'required|string',
- 'redirect_url' => 'required|string',
- 'product_name' => 'nullable|string',
- 'signature' => 'required',
- 'ip' => 'required'
- ];
- $validator = Validator::make($inputData, $rules);
- if ($validator->fails()) {
- // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
- logger($validator->errors()->first());
- return json_fail($validator->errors()->first());
- }
- $merchantInfo = MerchantModel::query()->where(['merchant_code' => $inputData['merchant_code'], 'status' => 1])->first();
- if (empty($merchantInfo)) {
- logger('该商户没有开通!');
- return json_fail('该商户没有开通!');
- }
- $paymentTypeInfo = PaymentTypeModel::query()->where(['id' => $inputData['payment_id'], 'status' => 1])->first(['uid', 'pay_type', 'payment_uid', 'payment_attr_uid']);
- if (empty($paymentTypeInfo)) {
- logger('该支付通道不存在!');
- return json_fail('该支付通道不存在!');
- }
- $mpt = MerchantPaymentTypeModel::query()->where(['merchant_uid' => $merchantInfo->uid, 'payment_type_uid' => $paymentTypeInfo->uid])->count('id');
- if ($mpt == 0) {
- logger('商户没有分配该通道!');
- return json_fail('商户没有分配该通道!');
- }
- // 验签
- $signData = [
- 'merchant_code' => $inputData['merchant_code'],
- 'order_id' => $inputData['order_id'],
- 'product_name' => $inputData['product_name'],
- 'amount' => $inputData['amount'],
- 'notify_url' => $inputData['notify_url'],
- 'redirect_url' => $inputData['redirect_url'],
- 'payment_id' => $inputData['payment_id']
- ];
- $sign = build_sign($signData, $merchantInfo->key);
- if ($inputData['signature'] != $sign) {
- logger('签名失败!');
- return json_fail('签名失败!');
- }
- $order = make(PaymentService::class)->createdOrder($merchantInfo->uid, $paymentTypeInfo, $inputData, $merchantInfo->merchant_mark);
- if (!$order) {
- logger('订单创建失败!');
- return json_fail('订单创建失败!');
- }
- // 获取支付链接
- $payLink = make(PaymentService::class)->createPayLink($order);
- if (empty($payLink)) {
- logger('获取支付链接失败!', $order);
- return json_fail('获取支付链接失败');
- }
- return json_success(['pay_url' => $payLink]);
- }
- }
|