NotifyController.php 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. if(empty($scene)){
  33. return message('参数错误回调失败', false);
  34. }
  35. $postStr = file_get_contents('php://input');
  36. RedisService::set('caches:payments:'.$scene.':result', ['result'=> request()->all(),'input'=> $postStr], 7200);
  37. $postData =$postStr? json_decode($postStr, true) : [];
  38. $outTradeNo = isset($postData['out_trade_no']) ? $postData['out_trade_no'] : '';
  39. if(empty($postData) || empty($outTradeNo)){
  40. //禁止引用外部xml实体
  41. libxml_disable_entity_loader(true);
  42. $postData = (array)(simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA));
  43. }
  44. $outTradeNo = isset($postData['out_trade_no']) ? $postData['out_trade_no'] : '';
  45. $taskNo = $outTradeNo ? $outTradeNo : date('YmdHis');
  46. RedisService::set('caches:payments:'.$scene.':result_'.$taskNo, ['result'=> $postData], 7200);
  47. if (WechatService::checkJsapiNotify($postData) === true) {
  48. switch($scene){
  49. case 'index': // 供灯订单
  50. return NotifyService::make()->notifyGongdeng($postData, $outTradeNo);
  51. case 'recharge': // 充值
  52. break;
  53. default:
  54. break;
  55. }
  56. }
  57. return message('回调失败', false);
  58. }
  59. }