TestController.php 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Helpers\Jwt;
  4. use App\Http\Controllers\Api\v1\NotifyController;
  5. use App\Models\MemberModel;
  6. use App\Models\UserModel;
  7. use App\Services\ConfigService;
  8. use App\Services\DevicesService;
  9. use App\Services\NotifyService;
  10. use App\Services\RedisService;
  11. use App\Services\SnapshotService;
  12. use App\Services\WechatService;
  13. use Illuminate\Support\Facades\Session;
  14. /**
  15. * 测试控制器类
  16. * @author wesmiler
  17. * @since 2020/11/10
  18. * Class TestController
  19. * @package App\Http\Controllers
  20. */
  21. class TestController extends BaseController
  22. {
  23. /**
  24. * 构造函数
  25. * @author wesmiler
  26. * @since 2020/11/11
  27. * TestController constructor.
  28. */
  29. public function __construct()
  30. {
  31. parent::__construct();
  32. }
  33. public function index(){
  34. $json = '{
  35. "result": {
  36. "id": "f2a8cd57-9450-5f94-bec0-310825e29f87",
  37. "create_time": "2021-07-19T13:32:01+08:00",
  38. "resource_type": "encrypt-resource",
  39. "event_type": "TRANSACTION.SUCCESS",
  40. "summary": "支付成功",
  41. "resource": {
  42. "original_type": "transaction",
  43. "algorithm": "AEAD_AES_256_GCM",
  44. "ciphertext": "FORph2bcy9H9mob0pQBoxmCDj0c7Uxj+robp1INckVLkVzEhwGCJzjtevbfs2PYzblPkbv0J2HEWj3uX9XVRvHa3KzZTw8\/aMHSMLNdL9ABWfW1LlhWFrhjeh5Zeb38eQ2nKkXBBqMErSkq+sp6rHW0JX\/R9r4yJwVylnMm50BEFUiaYIeooc2ka86zKOlqBozhpoK8SdUcyOPeDwRPEFsiR6pBqFLbfDcZ03KpoehRlB4SC+h+PyGUevkinC1KyvWeqYSJ3s21oTkL4WZBm+d\/6C+L5uUeT+hkFVVAetezE\/OV8hpSymYmNPG2XG59J5DgNmpMOs\/DMm5ueTlySnegWAKMo7quYHBepbZ\/BGDNKed3MjJ69e\/OlWyJZNvExMFnkyuMeOTOPT12figD7XNFpAn4zJWIWdDR1rawzOt5oG9Lz4l2n+njM6solr4frqpUeIAlWATloJNmvfz63QKpiUJHNbHig6frnP0yTxuHYm5Doh+YfqJNslT0CtYXPPy2UVlLHCRatxUdmafBnMbDzwPzf7rEzgzm\/q35LM7qfjAJgIXjXirbun1tKDqjKKpSg8OO6KcqdlqtpbbLWjST1jcSeSXAYetJM6d7xn3tywFm0rKNf19aLbW\/WiTywSy\/BtF+eRyD5pCJLjrVDxSEpQiMs9qYj+artq30CfrvcYWqgeevkAnVnuxRELXbDO49YFoBmzZyKIoru+nuAUwYu52f6FQ==",
  45. "associated_data": "transaction",
  46. "nonce": "I9XWeVfjyb7N"
  47. },
  48. "s": "\/api\/notify\/pay\/index"
  49. },
  50. "sign": "K0ZBu0hE14W8hf2z095KnyRO7o48TZP8JvP\/bpkzGH7bvYwpuiNPBzLCes8DT+tiZ85AdE1gKYzN4jMIDtHYUDSMV+LeX6OxptPA6+pQXpReOA2S8\/RzQJhCA0MAJCF7hiYZYC6X3cSuwaXF+rTTQPhtwbrc093FEUMwtGPLiMlkBwH2okSGxv+CPH\/VRMGQKeitWLsj1PpjIiOkeu8CK8IL0EjQ\/idlu+iZ\/DK2iVquet1HqPGGJpaiKqIQvk0vszumOleh1PJse\/uqshmiyiquZhRn+mvo2Nplwt94je7GQTbw6uN2Mzmgc5MMAk5I+0sQzEvHIEQyj2Qf1sBxFg==",
  51. "date": "2021-07-19 13:32:01"
  52. }';
  53. $json = json_decode($json, true);
  54. $data = $json['result'];
  55. /* $data = [
  56. "original_type"=> "transaction",
  57. "algorithm"=> "AEAD_AES_256_GCM",
  58. "ciphertext"=> "//hUHdektloiqMVIQ0nOEZj91e2oIEUNZ7EtnLdLnjriyKQwKes9VcEvfmFYMnTFXr1Lg/mFHJaNE2C4hZrVykVpiT0aahWSV4pn1m9867LOwXWbE2uhMMPXtDLT9bfYT3gzXbxkdo\/LkOB7Bke20MnEq3mgSkPbRytyQ96RhZGPsqa9S7QiycshC82Hw\/QhGwqvLsUOdCP8y6yt28\/MPJc+VB1sSi\/hIDKIlYFxb7TIWRtzpIu057ICyNHtPXRzCEUEtK7t9gywxYJd6kXYEKQqOTqUlXoHAHQt4lIHN27TCuAE0KujE1+ub5CDYEQl4gG8lX\/kDgEqvKVSzCjVhXWL2VBG41Q0Hs+O5SpTYHkhhKDLEnEopEOAs\/h7NUVAhUHpM1TTYxWp9hL2q\/es6sGIW15hXOv5GarqNL3SI\/aTuIsYP\/wrinBLbe8yjwqpn0TFtMeCa7deuTlWF\/xBXmDfnH\/je+vS6cofeZeKJbCspWZ0upBTi4JARtiQL7bEvjnpVhgApn2iZ0\/Ta0KUmg6dy52W1lsdJn81ACQxUxD8gCdtfqwFtBcvBRbxR1uPCqQEBJo2NWrKqtq1409H7F4WtEbqsJUBHaR4LQAoiz49rw1fW06U5UBmbRUMBT0c+4GD3iRUdhRo6WsoSvld5LbY6bIzSdwcuAZ8jfWTBtY7qqw4i9fd6UlrX4WYTZJOKW80RmgIyPOCiMbA6dZTnGbfcs3LMw==",
  59. "associated_data"=> "transaction",
  60. "nonce"=> "jyvk10O4xN5a"
  61. ];*/
  62. // $cc = new NotifyController();
  63. //$result = $cc->pay('index',$data );
  64. unset($data['s']);
  65. //ksort($data);
  66. $signStr = "1626672721\nOpMHKndhcOTAf0OsuQRGpr80o4WzUHXo\n".json_encode($data)."\n";
  67. var_dump($signStr);
  68. $result = WechatService::checkJsapiNotifyV3($signStr,$json['sign']);
  69. var_dump($result);
  70. return message(1005,'true',['ddd'=> []]);
  71. }
  72. public function lamp(){
  73. $orderSn = request()->get('order_sn');
  74. return DevicesService::make()->catchLamp($orderSn);
  75. }
  76. public function lamp1(){
  77. $colors = ['黄色','红色','绿色','白色'];
  78. shuffle($colors);
  79. $data = [
  80. 'CommandType'=> 'OpenLed', // 执行命令方式:OpenLed-开灯,CloseLed-关灯,QuitStatus-查询状态
  81. 'MD'=> 1, // 机器号设备号
  82. 'MDPORT'=> 1, // 设备端口:暂与设备号一致
  83. 'LEDID'=> 4, // 亮灯灯号1-498对应1号设备,498后为设备2
  84. 'Color'=> urlencode($colors[0]), // 颜色
  85. 'OrderNo'=> 'G202107152132315', // 订单号
  86. ];
  87. $dataStr = [];
  88. foreach($data as $k => $v){
  89. $dataStr[] = $k.'='.$v;
  90. }
  91. // 调用亮灯接口处理
  92. $dataStr = implode('&', $dataStr);
  93. var_dump($dataStr);
  94. $headers = ["Content-Type: application/x-www-form-urlencoded; charset=UTF-8"];
  95. $apiUrl = ConfigService::make()->getConfigByCode('gd_api_url').'/LEDControl.ashx';
  96. $result = httpHeaderRequest($apiUrl, $dataStr,'post',$headers,'text');
  97. var_dump($result);
  98. return $result;
  99. }
  100. /**
  101. * 支付回调
  102. */
  103. public function pay($scene){
  104. $postData = request()->all();
  105. $sign = request()->headers->get('Wechatpay-Signature');
  106. $nonce = request()->headers->get('Wechatpay-Nonce');
  107. $timestamp = request()->headers->get('Wechatpay-Timestamp');
  108. $body = file_get_contents('php://input');
  109. $signStr = "{$timestamp}\n{$nonce}\n{$body}\n";
  110. $id = isset($postData['id'])? '_'.$postData['id'] : '';
  111. RedisService::set('caches:payments:'.$scene.':result'.$id.'_'.date('YmdHis'), ['result'=> $postData,'sign'=> $sign,'date'=> date('Y-m-d H:i:s')], 7200);
  112. $postData = isset($postData['resource'])? $postData['resource'] : [];
  113. if(empty($scene) || empty($postData)){
  114. return NotifyService::make()->rebackMsg('回调参数错误');
  115. }
  116. // 解密
  117. $ciphertext = isset($postData['ciphertext'])? $postData['ciphertext'] : '';
  118. RedisService::set('caches:payments:'.$scene.':result'.$id.'_ciphertext', ['result'=> $postData,'date'=> date('Y-m-d H:i:s')], 7200);
  119. if(empty($ciphertext)){
  120. return NotifyService::make()->rebackMsg('解密数据不存在');
  121. }
  122. $postData = WechatService::decryptNotifyData($postData);
  123. $postData = $postData? json_decode($postData, true) : [];
  124. // var_dump($postData);
  125. $outTradeNo = isset($postData['out_trade_no']) ? $postData['out_trade_no'] : '';
  126. if(empty($postData) || empty($outTradeNo)){
  127. return NotifyService::make()->rebackMsg('获取解密数据失败');
  128. }
  129. RedisService::set('caches:payments:'.$scene.':result'.$id.'_'.$outTradeNo, ['result'=> $postData], 7200);
  130. RedisService::set('caches:payments:'.$scene.':check'.$id.'_'.$outTradeNo, ['data'=> $postData,'signStr'=> $signStr,'sign'=> $sign], 3600);
  131. if (WechatService::checkJsapiNotifyV3($signStr, $sign, $postData)) {
  132. switch($scene){
  133. case 'index': // 供灯订单
  134. return NotifyService::make()->notifyGongdeng($postData, $outTradeNo);
  135. case 'recharge': // 充值
  136. break;
  137. default:
  138. break;
  139. }
  140. }
  141. return 'fail';
  142. }
  143. }