NotifyController.php 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <?php
  2. namespace App\Http\Controllers\Api\v1;
  3. use App\Http\Controllers\Api\BaseController;
  4. use App\Services\NotifyService;
  5. use App\Services\RedisService;
  6. use App\Services\SiyuanService;
  7. use App\Services\WechatService;
  8. /**
  9. * 回调控制器
  10. * @author wesmiler
  11. * @since 2020/11/10
  12. * Class NotifyController
  13. * @package App\Http\Controllers
  14. */
  15. class NotifyController extends BaseController
  16. {
  17. /**
  18. * 构造函数
  19. * @author wesmiler
  20. * @since 2020/11/11
  21. * NotifyController constructor.
  22. */
  23. public function __construct()
  24. {
  25. parent::__construct();
  26. $this->service = new SiyuanService();
  27. }
  28. /**
  29. * 支付回调
  30. */
  31. public function pay($scene){
  32. $postData = request()->all();
  33. $sign = request()->headers->get('Wechatpay-Signature');
  34. $headers = request()->headers->all();
  35. // $sign = '';
  36. $id = isset($postData['id'])? '_'.$postData['id'] : '';
  37. RedisService::set('caches:payments:'.$scene.':result'.$id.'_'.date('YmdHis'), ['result'=> $postData,'sign'=> $sign,'headers'=> $headers,'date'=> date('Y-m-d H:i:s')], 7200);
  38. $postData = isset($postData['resource'])? $postData['resource'] : [];
  39. if(empty($scene) || empty($postData)){
  40. return NotifyService::make()->rebackMsg('回调参数错误');
  41. }
  42. // 解密
  43. $ciphertext = isset($postData['ciphertext'])? $postData['ciphertext'] : '';
  44. RedisService::set('caches:payments:'.$scene.':result'.$id.'_ciphertext', ['result'=> $postData,'date'=> date('Y-m-d H:i:s')], 7200);
  45. if(empty($ciphertext)){
  46. return NotifyService::make()->rebackMsg('解密数据不存在');
  47. }
  48. $postData = WechatService::decryptNotifyData($postData);
  49. $postData = $postData? json_decode($postData, true) : [];
  50. //var_dump($postData);
  51. $outTradeNo = isset($postData['out_trade_no']) ? $postData['out_trade_no'] : '';
  52. if(empty($postData) || empty($outTradeNo)){
  53. return NotifyService::make()->rebackMsg('获取解密数据失败');
  54. }
  55. $postData['sign'] = $sign;
  56. RedisService::set('caches:payments:'.$scene.':result_'.$outTradeNo, ['result'=> $postData], 7200);
  57. if (WechatService::checkJsapiNotifyV3($postData) === true) {
  58. switch($scene){
  59. case 'index': // 供灯订单
  60. return NotifyService::make()->notifyGongdeng($postData, $outTradeNo);
  61. case 'recharge': // 充值
  62. break;
  63. default:
  64. break;
  65. }
  66. }
  67. return NotifyService::make()->rebackMsg('回调失败');
  68. }
  69. }