seven 6 днів тому
батько
коміт
17e48c4168

+ 2 - 1
app/Http/Controllers/api/Pay.php

@@ -37,7 +37,8 @@ class Pay extends Controller
         // 记录到专用支付日志
         Log::channel('payment')->info('三斤支付回调', $data);
 
-
+        $res = PaymentOrderService::receivePay($data);
+        var_dump($res);
         echo 'success';
     }
 

+ 40 - 1
app/Services/PaymentOrderService.php

@@ -230,6 +230,45 @@ class PaymentOrderService extends BaseService
         return $result;
     }
 
+    /**
+     * @description: 接收支付的通知
+     * @param {*} $params
+     * @return {*}
+     */    
+    public static function receivePay($params)
+    {
+        // 判断商户号
+        if($params['mchId'] == SanJinService::getMerchantId()){
+            $must = ['mchId','produceId','tradeNo','outTradeNo','amount','payAmount','state','createTime','payTime'];
+            if($params['sign'] != SanJinService::signature($params,$must)){
+                return false;
+            }
+
+            $info = self::findOne(['order_no' => $params['outTradeNo']]);
+            if($info){
+                // 平台以分计算转成元
+                $payAmount = $params['payAmount'] / 100;
+                // 判断金额是不是正确认
+                if($info->amount != $payAmount){
+                    $text = '❌ 支付失败提醒 \n';
+                    $text .= "订单金额:{$info->amount} \n";
+                    $text .= "实际支付:{$payAmount} \n";
+                    $text .= "订单号:{$params['outTradeNo']} \n";
+                    $text .= "失败原因:支付金额与订单金额不一致 \n";
+                    $text .= "请联系客服处理!";
+                    self::sendMessage($info->member_id,$text);
+                    return false;
+                }
+            
+          
+                // 付款
+                if($info->type == self::TYPE_PAY){
+                    return true;
+                }
+            }
+        }
+    }
+
     /**
      * @description: 创建代付订单
      * @param {*} $memberId 会员
@@ -411,7 +450,7 @@ class PaymentOrderService extends BaseService
             if($info){
                 // 判断金额是不是正确认
                 if($info->amount != $params['amount']){
-                    return 'amount';
+                    return false;
                 }
             
                 // 验证签名