|
|
@@ -6,6 +6,7 @@ use App\Helpers\Jwt;
|
|
|
use App\Http\Controllers\Api\v1\NotifyController;
|
|
|
use App\Models\MemberModel;
|
|
|
use App\Models\UserModel;
|
|
|
+use App\Services\NotifyService;
|
|
|
use App\Services\RedisService;
|
|
|
use App\Services\SnapshotService;
|
|
|
use App\Services\WechatService;
|
|
|
@@ -72,4 +73,54 @@ $json = '{
|
|
|
return message(1005,'true',['ddd'=> []]);
|
|
|
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 支付回调
|
|
|
+ */
|
|
|
+ public function pay($scene){
|
|
|
+ $postData = request()->all();
|
|
|
+ $sign = request()->headers->get('Wechatpay-Signature');
|
|
|
+ $nonce = request()->headers->get('Wechatpay-Nonce');
|
|
|
+ $timestamp = request()->headers->get('Wechatpay-Timestamp');
|
|
|
+ $body = file_get_contents('php://input');
|
|
|
+ $signStr = "{$timestamp}\n{$nonce}\n{$body}\n";
|
|
|
+ $id = isset($postData['id'])? '_'.$postData['id'] : '';
|
|
|
+ RedisService::set('caches:payments:'.$scene.':result'.$id.'_'.date('YmdHis'), ['result'=> $postData,'sign'=> $sign,'date'=> date('Y-m-d H:i:s')], 7200);
|
|
|
+ $postData = isset($postData['resource'])? $postData['resource'] : [];
|
|
|
+ if(empty($scene) || empty($postData)){
|
|
|
+ return NotifyService::make()->rebackMsg('回调参数错误');
|
|
|
+ }
|
|
|
+
|
|
|
+ // 解密
|
|
|
+ $ciphertext = isset($postData['ciphertext'])? $postData['ciphertext'] : '';
|
|
|
+ RedisService::set('caches:payments:'.$scene.':result'.$id.'_ciphertext', ['result'=> $postData,'date'=> date('Y-m-d H:i:s')], 7200);
|
|
|
+ if(empty($ciphertext)){
|
|
|
+ return NotifyService::make()->rebackMsg('解密数据不存在');
|
|
|
+ }
|
|
|
+
|
|
|
+ $postData = WechatService::decryptNotifyData($postData);
|
|
|
+ $postData = $postData? json_decode($postData, true) : [];
|
|
|
+ // var_dump($postData);
|
|
|
+ $outTradeNo = isset($postData['out_trade_no']) ? $postData['out_trade_no'] : '';
|
|
|
+ if(empty($postData) || empty($outTradeNo)){
|
|
|
+ return NotifyService::make()->rebackMsg('获取解密数据失败');
|
|
|
+ }
|
|
|
+
|
|
|
+ RedisService::set('caches:payments:'.$scene.':result'.$id.'_'.$outTradeNo, ['result'=> $postData], 7200);
|
|
|
+ RedisService::set('caches:payments:'.$scene.':check'.$id.'_'.$outTradeNo, ['data'=> $postData,'signStr'=> $signStr,'sign'=> $sign], 3600);
|
|
|
+ if (WechatService::checkJsapiNotifyV3($signStr, $sign, $postData)) {
|
|
|
+ switch($scene){
|
|
|
+ case 'index': // 供灯订单
|
|
|
+ return NotifyService::make()->notifyGongdeng($postData, $outTradeNo);
|
|
|
+ case 'recharge': // 充值
|
|
|
+
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
}
|