TestController.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  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. $result = WechatService::getCerts();
  35. var_dump($result);
  36. return message(1005,'true',['ddd'=> []]);
  37. }
  38. public function lamp(){
  39. $orderSn = request()->get('order_sn');
  40. return DevicesService::make()->catchLamp($orderSn);
  41. }
  42. public function lamp1(){
  43. $colors = ['黄色','红色','绿色','白色'];
  44. shuffle($colors);
  45. $data = [
  46. 'CommandType'=> 'OpenLed', // 执行命令方式:OpenLed-开灯,CloseLed-关灯,QuitStatus-查询状态
  47. 'MD'=> 1, // 机器号设备号
  48. 'MDPORT'=> 1, // 设备端口:暂与设备号一致
  49. 'LEDID'=> 4, // 亮灯灯号1-498对应1号设备,498后为设备2
  50. 'Color'=> urlencode($colors[0]), // 颜色
  51. 'OrderNo'=> 'G202107152132315', // 订单号
  52. ];
  53. $dataStr = [];
  54. foreach($data as $k => $v){
  55. $dataStr[] = $k.'='.$v;
  56. }
  57. // 调用亮灯接口处理
  58. $dataStr = implode('&', $dataStr);
  59. var_dump($dataStr);
  60. $headers = ["Content-Type: application/x-www-form-urlencoded; charset=UTF-8"];
  61. $apiUrl = ConfigService::make()->getConfigByCode('gd_api_url').'/LEDControl.ashx';
  62. $result = httpHeaderRequest($apiUrl, $dataStr,'post',$headers,'text');
  63. var_dump($result);
  64. return $result;
  65. }
  66. /**
  67. * 支付回调
  68. */
  69. public function pay($scene){
  70. $postData = request()->all();
  71. $sign = request()->headers->get('Wechatpay-Signature');
  72. $nonce = request()->headers->get('Wechatpay-Nonce');
  73. $timestamp = request()->headers->get('Wechatpay-Timestamp');
  74. $body = file_get_contents('php://input');
  75. $id = isset($postData['id'])? '_'.$postData['id'] : '';
  76. RedisService::set('caches:payments:'.$scene.':result'.$id.'_'.date('YmdHis'), ['result'=> $postData,'sign'=> $sign,'date'=> date('Y-m-d H:i:s')], 7200);
  77. $postData = isset($postData['resource'])? $postData['resource'] : [];
  78. if(empty($scene) || empty($postData)){
  79. return NotifyService::make()->rebackMsg('回调参数错误');
  80. }
  81. // 解密
  82. $signStr = "{$timestamp}\n{$nonce}\n{$body}\n";
  83. $ciphertext = isset($postData['ciphertext'])? $postData['ciphertext'] : '';
  84. RedisService::set('caches:payments:'.$scene.':result'.$id.'_ciphertext', ['result'=> $postData,'date'=> date('Y-m-d H:i:s')], 7200);
  85. if(empty($ciphertext)){
  86. return NotifyService::make()->rebackMsg('解密数据不存在');
  87. }
  88. $postData = WechatService::decryptNotifyData($postData);
  89. $postData = $postData? json_decode($postData, true) : [];
  90. // var_dump($postData);
  91. $outTradeNo = isset($postData['out_trade_no']) ? $postData['out_trade_no'] : '';
  92. if(empty($postData) || empty($outTradeNo)){
  93. return NotifyService::make()->rebackMsg('获取解密数据失败');
  94. }
  95. RedisService::set('caches:payments:'.$scene.':result'.$id.'_'.$outTradeNo, ['result'=> $postData], 7200);
  96. RedisService::set('caches:payments:'.$scene.':check'.$id.'_'.$outTradeNo, ['data'=> $postData,'signStr'=> $signStr,'sign'=> $sign], 3600);
  97. if (WechatService::checkJsapiNotifyV3($signStr, $sign, $postData)) {
  98. switch($scene){
  99. case 'index': // 供灯订单
  100. return NotifyService::make()->notifyGongdeng($postData, $outTradeNo);
  101. case 'recharge': // 充值
  102. break;
  103. default:
  104. break;
  105. }
  106. }
  107. return 'fail';
  108. }
  109. }