MerchantPayController.php 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <?php
  2. namespace Modules\Api\Controllers;
  3. use App\Models\MerchantModel;
  4. use App\Models\MerchantPaymentTypeModel;
  5. use App\Models\PaymentTypeModel;
  6. use Illuminate\Support\Facades\Validator;
  7. use Modules\Api\Services\PaymentService;
  8. class MerchantPayController extends BaseController
  9. {
  10. public function getPayUrl()
  11. {
  12. $inputData = $this->getJsonData();
  13. $rules = [
  14. 'merchant_code' => 'required|string',
  15. 'payment_id' => 'required|integer',
  16. 'amount' => 'required',
  17. 'order_id' => 'required|string',
  18. 'notify_url' => 'required|string',
  19. 'redirect_url' => 'required|string',
  20. 'product_name' => 'nullable|string',
  21. 'signature' => 'required',
  22. 'ip' => 'required'
  23. ];
  24. $validator = Validator::make($inputData, $rules);
  25. if ($validator->fails()) {
  26. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  27. logger($validator->errors()->first());
  28. return json_fail($validator->errors()->first());
  29. }
  30. $merchantInfo = MerchantModel::query()->where(['merchant_code' => $inputData['merchant_code'], 'status' => 1])->first();
  31. if (empty($merchantInfo)) {
  32. logger('该商户没有开通!');
  33. return json_fail('该商户没有开通!');
  34. }
  35. $paymentTypeInfo = PaymentTypeModel::query()->where(['id' => $inputData['payment_id'], 'status' => 1])->first(['uid', 'pay_type', 'payment_uid', 'payment_attr_uid']);
  36. if (empty($paymentTypeInfo)) {
  37. logger('该支付通道不存在!');
  38. return json_fail('该支付通道不存在!');
  39. }
  40. $mpt = MerchantPaymentTypeModel::query()->where(['merchant_uid' => $merchantInfo->uid, 'payment_type_uid' => $paymentTypeInfo->uid])->count('id');
  41. if ($mpt == 0) {
  42. logger('商户没有分配该通道!');
  43. return json_fail('商户没有分配该通道!');
  44. }
  45. // 验签
  46. $signData = [
  47. 'merchant_code' => $inputData['merchant_code'],
  48. 'order_id' => $inputData['order_id'],
  49. 'product_name' => $inputData['product_name'],
  50. 'amount' => $inputData['amount'],
  51. 'notify_url' => $inputData['notify_url'],
  52. 'redirect_url' => $inputData['redirect_url'],
  53. 'payment_id' => $inputData['payment_id']
  54. ];
  55. $sign = build_sign($signData, $merchantInfo->key);
  56. if ($inputData['signature'] != $sign) {
  57. logger('签名失败!');
  58. return json_fail('签名失败!');
  59. }
  60. $order = make(PaymentService::class)->createdOrder($merchantInfo->uid, $paymentTypeInfo, $inputData, $merchantInfo->merchant_mark);
  61. if (!$order) {
  62. logger('订单创建失败!');
  63. return json_fail('订单创建失败!');
  64. }
  65. // 获取支付链接
  66. $payLink = make(PaymentService::class)->createPayLink($order);
  67. if (empty($payLink)) {
  68. logger('获取支付链接失败!', $order);
  69. return json_fail('获取支付链接失败');
  70. }
  71. return json_success(['pay_url' => $payLink]);
  72. }
  73. }