Parcourir la source

wesmiler 报恩寺项目

wesmiler il y a 4 ans
Parent
commit
f1aef6a8d0
3 fichiers modifiés avec 57 ajouts et 4 suppressions
  1. 51 0
      app/Http/Controllers/Api/TestController.php
  2. 5 4
      app/Services/DevicesService.php
  3. 1 0
      routes/api.php

+ 51 - 0
app/Http/Controllers/Api/TestController.php

@@ -6,6 +6,7 @@ use App\Helpers\Jwt;
 use App\Http\Controllers\Api\v1\NotifyController;
 use App\Http\Controllers\Api\v1\NotifyController;
 use App\Models\MemberModel;
 use App\Models\MemberModel;
 use App\Models\UserModel;
 use App\Models\UserModel;
+use App\Services\NotifyService;
 use App\Services\RedisService;
 use App\Services\RedisService;
 use App\Services\SnapshotService;
 use App\Services\SnapshotService;
 use App\Services\WechatService;
 use App\Services\WechatService;
@@ -72,4 +73,54 @@ $json = '{
         return message(1005,'true',['ddd'=> []]);
         return message(1005,'true',['ddd'=> []]);
 
 
     }
     }
+
+    /**
+     * 支付回调
+     */
+    public function pay($scene){
+        $postData = request()->all();
+        $sign = request()->headers->get('Wechatpay-Signature');
+        $nonce = request()->headers->get('Wechatpay-Nonce');
+        $timestamp = request()->headers->get('Wechatpay-Timestamp');
+        $body = file_get_contents('php://input');
+        $signStr = "{$timestamp}\n{$nonce}\n{$body}\n";
+        $id = isset($postData['id'])? '_'.$postData['id'] : '';
+        RedisService::set('caches:payments:'.$scene.':result'.$id.'_'.date('YmdHis'), ['result'=> $postData,'sign'=> $sign,'date'=> date('Y-m-d H:i:s')], 7200);
+        $postData = isset($postData['resource'])? $postData['resource'] : [];
+        if(empty($scene) || empty($postData)){
+            return NotifyService::make()->rebackMsg('回调参数错误');
+        }
+
+        // 解密
+        $ciphertext = isset($postData['ciphertext'])? $postData['ciphertext'] : '';
+        RedisService::set('caches:payments:'.$scene.':result'.$id.'_ciphertext', ['result'=> $postData,'date'=> date('Y-m-d H:i:s')], 7200);
+        if(empty($ciphertext)){
+            return NotifyService::make()->rebackMsg('解密数据不存在');
+        }
+
+        $postData = WechatService::decryptNotifyData($postData);
+        $postData = $postData? json_decode($postData, true) : [];
+        // var_dump($postData);
+        $outTradeNo = isset($postData['out_trade_no']) ? $postData['out_trade_no'] : '';
+        if(empty($postData) || empty($outTradeNo)){
+            return NotifyService::make()->rebackMsg('获取解密数据失败');
+        }
+
+        RedisService::set('caches:payments:'.$scene.':result'.$id.'_'.$outTradeNo, ['result'=> $postData], 7200);
+        RedisService::set('caches:payments:'.$scene.':check'.$id.'_'.$outTradeNo, ['data'=> $postData,'signStr'=> $signStr,'sign'=> $sign], 3600);
+        if (WechatService::checkJsapiNotifyV3($signStr, $sign, $postData)) {
+            switch($scene){
+                case 'index': // 供灯订单
+                    return NotifyService::make()->notifyGongdeng($postData, $outTradeNo);
+                case 'recharge': // 充值
+
+                    break;
+                default:
+                    break;
+            }
+        }
+
+        return false;
+    }
+
 }
 }

+ 5 - 4
app/Services/DevicesService.php

@@ -173,11 +173,12 @@ class DevicesService extends BaseService
         $colors = ['黄','红','绿','白'];
         $colors = ['黄','红','绿','白'];
         shuffle($colors);
         shuffle($colors);
         $data = [
         $data = [
-            'CommandType'=> '', // 执行命令方式:
+            'CommandType'=> 'OpenLed', // 执行命令方式:OpenLed-开灯,CloseLed-关灯,QuitStatus-查询状态
             'MD'=> $deviceCode, // 机器号设备号
             'MD'=> $deviceCode, // 机器号设备号
-            'MDPORT'=> $port,
-            'LEDID'=> $deviceLampNo,
-            'Color'=> $colors[0],
+            'MDPORT'=> $port, // 设备端口:暂与设备号一致
+            'LEDID'=> $deviceLampNo, // 亮灯灯号1-498对应1号设备,498后为设备2
+            'Color'=> $colors[0], // 颜色
+            'OrderNo'=> $orderSn, // 订单号
         ];
         ];
 
 
         // 调用亮灯接口处理
         // 调用亮灯接口处理

+ 1 - 0
routes/api.php

@@ -32,6 +32,7 @@ Route::post('/index/jssdk', [\App\Http\Controllers\Api\v1\IndexController::class
 
 
 
 
 // 支付回调
 // 支付回调
+Route::any('/test/pay/{scene}', [\App\Http\Controllers\Api\TestController::class, 'pay']);
 Route::any('/notify/pay/{scene}', [\App\Http\Controllers\Api\v1\NotifyController::class, 'pay']);
 Route::any('/notify/pay/{scene}', [\App\Http\Controllers\Api\v1\NotifyController::class, 'pay']);
 Route::any('/notify/refund/{scene}', [\App\Http\Controllers\Api\v1\NotifyController::class, 'check']);
 Route::any('/notify/refund/{scene}', [\App\Http\Controllers\Api\v1\NotifyController::class, 'check']);