| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- <?php
- namespace App\Http\Controllers\Api\v1;
- use App\Http\Controllers\Api\webApp;
- use App\Services\PaymentService;
- use App\Services\RedisService;
- /**
- * 回调处理
- * Class NotifyController
- * @package App\Http\Controllers\Api
- */
- class NotifyController extends webApp
- {
- /**
- * 支付回调
- * @param string $scene 场景,deposit-保证金,depositRefund-保证金退款,withdraw-收入提现
- * @param int $payType 支付方式:10-微信,20-支付宝
- * @return array|false|\Psr\Http\Message\ResponseInterface
- */
- public function callback($scene, $payType = 10)
- {
- $date = date('Y-m-d H:i:s');
- $result = request()->post();
- $key = date('YmdHis') . '_' . rand(1000, 9999);
- $channel = $payType == 10? 'wechat':'alipay';
- if (empty($result)) {
- $result = file_get_contents('php://input');
- $result = $result ? json_decode($result, true) : [];
- }
- try {
- RedisService::set("caches:payments:notify_{$scene}:result_".date('YmdHis').rand(10,99), ['all' => request()->all(), 'scene' => $scene, 'payType' => $payType, 'result' => $result], 6*3600);
- $pay = PaymentService::make()->createPay($scene, $payType);
- if (empty($pay) || empty($scene) || empty($payType)) {
- if (env('APP_DEBUG')) {
- logger()->channel($channel)->error("【{$date} 支付回调】参数错误:" . json_encode(['scene' => $scene, 'payType' => $payType, 'data' => $result], 256));
- }
- RedisService::set("caches:payments:notify_{$scene}:error_" . $key, ['all' => request()->all(), 'scene' => $scene, 'payType' => $payType, 'result' => $result], 6*3600);
- return false;
- }
- // 验签和重组参数
- $data = $pay->callback();
- RedisService::set("caches:payments:notify_{$scene}:data_" . $key, ['all' => request()->all(), 'scene' => $scene,'data'=>$data, 'payType' => $payType, 'result' => $result], 6*3600);
- if (env('APP_DEBUG')) {
- logger()->channel($channel)->info("【{$date} 支付回调】验证结果:" . json_encode(['data' => $data,'scene'=>$scene,'payType'=>$payType],256));
- }
- // 回调处理
- if (PaymentService::make()->catchNotify($scene, $payType, $data)) {
- RedisService::set("caches:payments:notify_{$scene}:success_" . $key, ['all' => request()->all(), 'scene' => $scene,'data'=>$data, 'payType' => $payType, 'result' => $result], 6*3600);
- logger()->channel($channel)->info("【{$date} 支付回调】回调成功:" . json_encode(['data' => $data,'scene'=>$scene,'payType'=>$payType],256));
- return response('success');
- } else {
- $msg = PaymentService::make()->getError();
- logger()->channel($channel)->info("【{$date} 支付回调】回调失败:" . json_encode(['data' => $data,'scene'=>$scene,'payType'=>$payType, 'error' => lang($msg)], 256));
- return message($msg ? $msg : 2635, false);
- }
- } catch (\Exception $exception) {
- RedisService::set("caches:payments:notify_{$scene}:error_" . $key, ['all' => request()->all(), 'scene' => $scene,'payType' => $payType,'error' => $exception->getMessage(), 'data' => $result], 6*3600);
- logger()->channel($channel)->error("【{$date} 支付回调】回调错误:" . json_encode(['data' => $result,'scene'=>$scene,'payType'=>$payType, 'error' => $exception->getMessage()], 256));
- return message(2635, false, ['error' => $exception->getMessage()]);
- }
- }
- /**
- * 退款回调
- * @param string $scene 场景,vip-VIP退款
- * @param int $payType 支付方式:10-微信,20-支付宝
- * @return array|false
- * @throws \Yansongda\Pay\Exception\ContainerException
- * @throws \Yansongda\Pay\Exception\InvalidParamsException
- */
- public function refund($scene='refund', $payType = 10)
- {
- $date = date('Y-m-d H:i:s');
- $result = request()->post();
- $pay = PaymentService::make()->createPay($scene, $payType);
- $channel = $payType == 10? 'wechat':'alipay';
- if (empty($pay) || empty($scene) || empty($payType)) {
- if (env('APP_DEBUG')) {
- logger()->channel($channel)->error("【{$date} 退款回调】验证错误:" . json_encode(['scene' => $scene, 'payType' => $payType, 'data' => $result], 256));
- }
- RedisService::set("caches:refunds:notify_error_" . date('YmdH'), ['all' => request()->all(), 'scene' => $scene, 'payType' => $payType, 'data' => $result], 7200);
- return false;
- }
- // 验签和重组参数
- $data = $pay->callback();
- RedisService::set("caches:refunds:notify_data_" . date('YmdH'), ['all' => request()->all(), 'scene' => $scene, 'payType' => $payType, 'data' => $result], 7200);
- if (env('APP_DEBUG')) {
- logger()->channel($channel)->info("【{$date} 退款回调】验证结果:" . json_encode($data, 256));
- }
- // 回调处理
- if (PaymentService::make()->catchNotify($scene, $payType, $data)) {
- logger()->channel($channel)->info("【{$date} 退款回调】回调成功:" . json_encode(['data' => $data,'scene'=>$scene,'payType'=>$payType],256));
- return response('success');
- } else {
- $msg = PaymentService::make()->getError();
- logger()->channel($channel)->info("【{$date} 退款回调】回调失败:" . json_encode(['data' => $data,'scene'=>$scene,'payType'=>$payType, 'error' => lang($msg)], 256));
- return message($msg ? $msg : 2635, false);
- }
- }
- public function kf()
- {
- RedisService::set("caches:kf:", request()->all(), 600);
- return 200;
- }
- }
|