Browse Source

修改提现功能

jun 4 months ago
parent
commit
5fbeeb4c35

+ 1 - 1
app/Http/Controllers/Api/Custom.php

@@ -64,7 +64,7 @@ class Custom extends Api{
 		// 城市ID换城市名
 		$cityName						= (string) $City->getOne($custom['city_id'],'name');
         //获取用户余额
-        $amountInfo                     = $CustomAmount::query()->where([['custom_id','=',$custom['uid']]])->first(['amount','transfer_amount']);
+        $amountInfo                     = $CustomAmount::query()->where([['custom_uid','=',$uid]])->first(['amount','transfer_amount']);
         if (!$amountInfo){
             $amountInfo                 = [
                 'amount'=>0,

+ 17 - 5
app/Http/Controllers/Api/CustomAmount.php

@@ -22,15 +22,14 @@ class CustomAmount extends Api{
 		// 接口验签
 		// $this->verify_sign();
 		// 检查登录
-		//$uid							= $this->checkLogin();
-        $uid        =   6601;
+		$uid							= $this->checkLogin();
         // 接收参数
         $limit						= request('limit',15);
         // 查询条件
         $map						= [['custom_uid','=',$uid]];
         // 查询数据
         $Paginator					= $CustomAmountRecord->query()->where($map)->orderByDesc('id')
-            ->paginate($limit,['id','buy_type','pay_type','prefix','description','insert_time','pay_time','status','transfer_bill_no']);
+            ->paginate($limit,['id','buy_type','pay_type','prefix','description','insert_time','pay_time','status','transfer_bill_no','balance','amount']);
         // 重置数据
         $list						= [];
         // 获取数据
@@ -42,7 +41,7 @@ class CustomAmount extends Api{
         // 循环数据
         foreach ($list['data'] as $key => $value) {
             // 处理时间
-            $value['pay_time']		= date('Y-m-d H:i:s',$value['pay_time']);
+            $value['pay_time']		= $value['pay_time'] ? date('Y-m-d H:i:s',$value['pay_time']) : '';
             $value['insert_time']	= date('Y-m-d H:i:s',$value['insert_time']);
             // 获取子列表
             $value['type_state']	= (string) $CustomAmountRecord->getPayType($value['buy_type'],$value['pay_type'],'name');
@@ -57,5 +56,18 @@ class CustomAmount extends Api{
 		return							json_send(['code'=>'success','msg'=>'获取成功','data'=>$list]);
 	}
 
-
+    /**
+     * 获取余额详情			/api/custom_amount/get_record_info
+     *
+     * @param	string		record_id		记录ID
+     *
+     * */
+    public function get_record_info(Model $Model,CustomAmountRecord $CustomAmountRecord){
+        // 检查登录
+        $uid			= $this->checkLogin();
+        // 接收参数
+        $recordId		= request('record_id',0);
+        $info           = $CustomAmountRecord::query()->where(['custom_uid'=>$uid,'id'=>$recordId])->first(['id','buy_type','pay_type','prefix','description','insert_time','pay_time','status','transfer_bill_no','balance','amount']);
+        return			json_send(['code'=>'success','msg'=>'获取成功','data'=>$info]);
+    }
 }

+ 44 - 7
app/Http/Controllers/Api/Redpacket.php

@@ -15,6 +15,39 @@ use Illuminate\Support\Facades\DB;
  * */
 class Redpacket extends Api{
 
+    /**
+     * 获取红包详情			/api/redpacket/get_info
+     *
+     *
+     * */
+    public function get_info(CustomRedpacket $CustomRedpacket){
+        // 检查登录
+        $uid						= $this->checkLogin();
+        // 接收参数
+        $customRedpacketId			= request('custom_redpacket_id',0);
+        $time                       = time();
+        $where                      = [
+            ['custom_redpacket.id','=',$customRedpacketId],
+            ['custom_redpacket.custom_uid','=',$uid],
+            ['redpacket.start_time','<=',$time],
+            ['redpacket.end_time','>=',$time],
+            ['redpacket.status','=',0],
+        ];
+        // 查询活动
+        $list					= $CustomRedpacket::query()
+            ->join('redpacket','redpacket.id','=','custom_redpacket.redpacket_id')
+            ->where($where)
+            ->first(['custom_redpacket.*','redpacket.name as redpacket_name','redpacket.active_rule as active_rule']);
+        // 判断活动
+        if( !$list )				return json_send(['code'=>'error','msg'=>'红包已失效']);
+        if ($list['status'] ==  1)  return json_send(['code'=>'error','msg'=>'红包已领取']);
+        $data['money']                    = $list['money'];
+        $data['active_rule']              = $list['active_rule'];
+        $data['custom_redpacket_id']      = $list['id'];
+        $data['status']                   = $list['status'];
+        // 返回成功
+        return							json_send(['code'=>'success','msg'=>'获取成功','data'=>$data]);
+    }
     /**
      * 获取红包活动			/api/redpacket/get_list
      *
@@ -36,19 +69,23 @@ class Redpacket extends Api{
         $Paginator					= $CustomRedpacket::query()
             ->join('redpacket','redpacket.id','=','custom_redpacket.redpacket_id')
             ->where($where)
-            ->paginate($limit,['custom_redpacket.*']);
+            ->paginate($limit,['custom_redpacket.id as custom_redpacket_id',
+                'custom_redpacket.money',
+                'custom_redpacket.status',
+                'redpacket.active_rule',
+                'redpacket.name as active_name',
+                'redpacket.start_time',
+                'redpacket.end_time',
+            ]);
         // 获取数据
         $data['total']				= $Paginator->total();
         $data['current_page']		= $Paginator->currentPage();
         $data['per_page']			= $Paginator->perPage();
         $data['last_page']			= $Paginator->lastPage();
-        $list				        = $Paginator->items();
+        $data['data']				= $Paginator->items();
         // 判断活动
-        if( !$list )				return json_send(['code'=>'error','msg'=>'您没有红包可领取']);
-        foreach ($list as $key=>$v){
-            $data['data'][$key]['money']                    = $v['money'];
-            $data['data'][$key]['custom_redpacket_id']      = $v['id'];
-            $data['data'][$key]['status']                   = $v['status'];
+        if( !$data['data'] )				return json_send(['code'=>'error','msg'=>'您没有红包可领取']);
+        foreach ($data['data'] as $key=>$v){
             switch ($v['status']){
                 case 0:
                     $data['data'][$key]['state']    =   '待领取';

+ 24 - 20
app/Http/Controllers/Api/WechatTransfer.php

@@ -8,7 +8,7 @@ use App\Models\CustomAmountRecord;
 use Illuminate\Http\Request;
 use App\Servers\WechatPay\Transfer;
 use Kra8\Snowflake\Snowflake;
-use App\Servers\WechatMini\Mini;
+use App\Facades\Servers\WechatMini\Mini;
 use Illuminate\Support\Facades\DB;
 use WeChatPay\Formatter;
 use WeChatPay\Crypto\AesGcm;
@@ -22,7 +22,7 @@ use WeChatPay\Crypto\Rsa;
  * */
 class WechatTransfer extends Api{
     /**
-     * 小程序微信支付下单				/api/wechat_pay/pay
+     * 小程序微信支付提现				/api/wechat_pay/transfer
      *
      * */
     public function transfer(Custom $Custom,CustomAmount $CustomAmount,CustomAmountRecord $CustomAmountRecord)
@@ -31,6 +31,8 @@ class WechatTransfer extends Api{
         $uid				= $this->checkLogin();
         $code				= request('code','');
         $amount			    = request('amount','');
+        if ($amount < 0.1)  return json_send(['code'=>'error','msg'=>'提现失败','data'=>['error'=>'提现失败,超出最高提现额度']]);
+        if ($amount > 200)  return json_send(['code'=>'error','msg'=>'提现失败','data'=>['error'=>'提现失败,超出最高提现额度']]);
         // 获取余额信息
         $amountInfo         =   $CustomAmount::query()->where(['custom_uid'=>$uid])->first();
         if(!$amountInfo){
@@ -67,6 +69,7 @@ class WechatTransfer extends Api{
             }
             $Transfer           =   new Transfer();
             $transferResult     =   $Transfer->pay($params);
+            Log::error('wechat/transfer','微信商户转账'.'返回'.json_encode($transferResult));
             if (!$transferResult || $transferResult['state'] !== 'WAIT_USER_CONFIRM') return json_send(['code'=>'error','msg'=>'提现申请失败','data'=>'提现申请失败']);
             $data       =   [
                 'custom_uid'		=>	$uid,
@@ -78,7 +81,7 @@ class WechatTransfer extends Api{
                 'pay_type'	        =>	1,
                 'balance'	        =>	$balance,
                 'description'	    =>	'余额提现',
-                'status'	        =>	1,
+                'status'	        =>	0,
             ];
             //写入余额记录
             $recordResult     =   $CustomAmountRecord->add($data);
@@ -103,8 +106,9 @@ class WechatTransfer extends Api{
 	 * 小程序微信支付回调				/api/wechat_pay/notify
 	 * 
 	 * */
-    public function notify(Custom $Custom,CustomScore $CustomScore)
+    public function notify()
     {
+        Log::error('wechat/transfer_notify', '提现转账回调开始');
         $content = file_get_contents("php://input");
         if (!empty($content)) {
             //直接json字符串
@@ -116,17 +120,17 @@ class WechatTransfer extends Api{
             $params = [];
         }
         $post_data = $params;
-        Log::log('notify_wechat_transfer', 'post_data:' . $post_data);
+        Log::error('wechat/transfer_notify', 'post_data:' . $post_data);
         //获取headers参数
         $headers = request()->header();
-        Log::log('notify_wechat_transfer', '微信支付回调返回headers参数:' . json_encode($headers));
+        Log::error('wechat/transfer_notify', '微信支付回调返回headers参数:' . json_encode($headers));
 
         $inWechatpaySignature   = $headers['wechatpay-signature'][0];
         $inWechatpayTimestamp   = $headers['wechatpay-timestamp'][0];
         $inWechatpaySerial      = $headers['wechatpay-serial'][0];
         $inWechatpayNonce       = $headers['wechatpay-nonce'][0];
         $inBody = $post_data;
-        Log::log('notify_wechat_transfer', 'wechatpay-timestamp:' . $inWechatpayTimestamp);
+        Log::error('wechat/transfer_notify', 'wechatpay-timestamp:' . $inWechatpayTimestamp);
         $apiv3Key = Config('wechatpay.APIV3');// 在商户平台上设置的APIv3密钥
         // 根据通知的平台证书序列号,查询本地平台证书文件,
         $platformCertificateFilePath = Config('wechatpay.platformCertificate');
@@ -134,14 +138,14 @@ class WechatTransfer extends Api{
         try {
             // 检查通知时间偏移量,允许5分钟之内的偏移
             $timeOffsetStatus = 300 >= abs(Formatter::timestamp() - (int)$inWechatpayTimestamp);
-            Log::log('notify_wechat_transfer', '时间偏移量:' . $timeOffsetStatus);
+            Log::error('notify_wechat_transfer', '时间偏移量:' . $timeOffsetStatus);
             $verifiedStatus = Rsa::verify(
             // 构造验签名串
                 Formatter::joinedByLineFeed($inWechatpayTimestamp, $inWechatpayNonce, $inBody),
                 $inWechatpaySignature,
                 $platformPublicKeyInstance
             );
-            Log::log('notify_wechat_transfer', '验签:' . $verifiedStatus.'验签inWechatpayTimestamp:' . $inWechatpayTimestamp.'验签verifiedStatus:' . $inWechatpayNonce);
+            Log::error('wechat/transfer_notify', '验签:' . $verifiedStatus.'验签inWechatpayTimestamp:' . $inWechatpayTimestamp.'验签verifiedStatus:' . $inWechatpayNonce);
             if ($timeOffsetStatus && $verifiedStatus) {
                 // 转换通知的JSON文本消息为PHP Array数组
                 $inBodyArray = (array)json_decode($inBody, true);
@@ -155,8 +159,8 @@ class WechatTransfer extends Api{
                 $inBodyResource = AesGcm::decrypt($ciphertext, $apiv3Key, $nonce, $aad);
                 // 把解密后的文本转换为PHP Array数组
                 $inBodyResourceArray = (array)json_decode($inBodyResource, true);
-                Log::log('notify_wechat_transfer', '打印解密后的结果:' . json_encode($inBodyResourceArray));
-                Log::log('notify_wechat_transfer', '参数:' . $inBodyResourceArray['trade_state'] . '订单号' . $inBodyResourceArray['out_trade_no'] . '微信支付号' . $inBodyResourceArray['transaction_id']);
+                Log::error('wechat/transfer_notify', '打印解密后的结果:' . json_encode($inBodyResourceArray));
+                Log::error('wechat/transfer_notify', '参数:' . $inBodyResourceArray['trade_state'] . '订单号' . $inBodyResourceArray['out_trade_no'] . '微信支付号' . $inBodyResourceArray['transaction_id']);
                 if ($inBodyResourceArray['trade_state'] == "SUCCESS") {
                     $status      =  2;
                     //更新余额订单状态
@@ -165,12 +169,12 @@ class WechatTransfer extends Api{
                         'status'=>$status,
                     ];
                     $res = CustomAmountRecord::query()->where('out_bill_no','=',$inBodyResourceArray['out_bill_no'])->update($data);
-                    Log::log('notify_wechat_transfer', '更新余额记录,snowflake_id:'.$inBodyResourceArray['out_bill_no'].';'. json_encode($res));
+                    Log::error('wechat/transfer_notify', '更新余额记录,snowflake_id:'.$inBodyResourceArray['out_bill_no'].';'. json_encode($res));
                     if (!$res) {
-                        Log::log('notify_wechat_transfer', '更新余额记录失败' . json_encode($res));
+                        Log::error('wechat/transfer_notify', '更新余额记录失败' . json_encode($res));
                         return json_send(['code'=>'FAIL']);
                     }
-                    Log::log('notify_wechat_pay', '支付回调完成 通知返回' . json_encode($data));
+                    Log::error('wechat/transfer_notify', '支付回调完成 通知返回' . json_encode($data));
                 }elseif ($inBodyResourceArray['trade_state'] == "FAIL"){
                     $status      =  3;
                     //更新余额订单状态
@@ -178,30 +182,30 @@ class WechatTransfer extends Api{
                         'status'=>$status
                     ];
                     $res    = CustomAmountRecord::query()->where('out_bill_no','=',$inBodyResourceArray['out_bill_no'])->update($data);
-                    Log::log('notify_wechat_transfer', '更新余额记录,snowflake_id:'.$inBodyResourceArray['out_bill_no'].';'. json_encode($res));
+                    Log::error('wechat/transfer_notify', '更新余额记录,snowflake_id:'.$inBodyResourceArray['out_bill_no'].';'. json_encode($res));
                     if (!$res) {
-                        Log::log('notify_wechat_transfer', '更新余额记录失败' . json_encode($res));
+                        Log::error('wechat/transfer_notify', '更新余额记录失败' . json_encode($res));
                         return json_send(['code'=>'FAIL']);
                     }
                     $amountInfo = CustomAmountRecord::query()->where('out_bill_no','=',$inBodyResourceArray['out_bill_no'])->first();
                     if ($amountInfo){
-                        Log::log('notify_wechat_transfer', '获取余额记录信息失败' . json_encode($res));
+                        Log::error('wechat/transfer_notify', '获取余额记录信息失败' . json_encode($res));
                         return json_send(['code'=>'FAIL']);
                     }
                     //退回余额
                     $res    =   CustomAmount::query()->where('uid','=',$amountInfo['custom_uid'])->increment('amount',$amountInfo['amount']);
                     if (!$res){
-                        Log::log('notify_wechat_pay', '退回余额失败' . json_encode($amountInfo));
+                        Log::error('wechat/transfer_notify', '退回余额失败' . json_encode($amountInfo));
                         return json_send(['code'=>'FAIL']);
                     }
-                    Log::log('notify_wechat_pay', '回调完成 通知返回' . json_encode($amountInfo));
+                    Log::error('wechat/transfer_notify', '回调完成 通知返回' . json_encode($amountInfo));
                 }
                 return json_send(['code'=>'SUCCESS']);
             }else{
                 return json_send(['code'=>'FAIL']);
             }
         }catch (\Exception $e){
-            Log::log('notify_wechat_transfer', '回调失败getMessage:' . $e->getMessage());
+            Log::error('wechat/transfer_notify', '回调失败getMessage:' . $e->getMessage());
         }
         return json_send(['code'=>'SUCCESS']);
     }

+ 2 - 2
app/Servers/WechatPay/Transfer.php

@@ -64,7 +64,7 @@ class Transfer
                     'out_bill_no'   => (string)$params['out_bill_no'],
                     'transfer_scene_id'  => '1000',
                     'openid'        => $params['openid'],
-                    'transfer_amount'   => 10,
+                    'transfer_amount'   => $params['amount'] * 100,
                     'transfer_remark'   => '余额提现',
                     'user_recv_perception'   => '现金奖励',
                     'transfer_scene_report_infos'        => [
@@ -77,7 +77,7 @@ class Transfer
                             'info_content'      => '预约下单得现金红包',
                         ],
                     ],
-                    'notify_url'   => env('APP_URL').'/api/wechat_transfer/notify'
+                    'notify_url'   => Config('wechatpay.notify_url')
                     /*'time_expire'  => $this->timestampToRfc3339(time() + env('ORDER_OUT_TIME')*60),*/
                 ]]);
             $result = json_decode($resp->getBody(),true);

+ 2 - 2
config/wechatpay.php

@@ -1,10 +1,10 @@
 <?php
 return array(
-    'appid'                 => "wxe270937ea4d7f7d5",//appid
+    'appid'                 => "wx24a9669e84ba1f0b",//appid
     'mchid'                 => "1612111355",//微信直连商户号mchid
     'certificate'           => '68E43B250D73977F1DC0E0D0827AF25A8BFB1777', //证书序列号
     'APIV3'                 => 'iD1xB1mH6zO7pP2wD1rU4aD2nH7oL2lN',
-    'notify_url'            => env('APP_URL').'/api/wechat_pay/notify',
+    'notify_url'            => 'https://kailin.dfwy.tech/api/wechat_pay/notify',
     'private_key'           => '-----BEGIN PRIVATE KEY-----
 MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDBcmSf2j2gN8Ie
 +vx0GxqFDzxetgJX+sCju9wyxSiPiFGqNRp1dXyzmb0WMDZ4EHSuwhgMp9xdY6BE

+ 5 - 1
routes/api.php

@@ -226,6 +226,8 @@ Route::any('wechat_transfer/notify',[\App\Http\Controllers\Api\WechatTransfer::c
  * */
 //获取红包列表
 Route::any('redpacket/get_list',[\App\Http\Controllers\Api\Redpacket::class,'get_list']);
+//红包详情
+Route::any('redpacket/get_info',[\App\Http\Controllers\Api\Redpacket::class,'get_info']);
 //用户领取红包
 Route::any('redpacket/get_redpacket',[\App\Http\Controllers\Api\Redpacket::class,'get_redpacket']);
 
@@ -234,4 +236,6 @@ Route::any('redpacket/get_redpacket',[\App\Http\Controllers\Api\Redpacket::class
  *
  * */
 //余额记录
-Route::any('custom_amount/get_record_list',[\App\Http\Controllers\Api\CustomAmount::class,'get_record_list']);
+Route::any('custom_amount/get_record_list',[\App\Http\Controllers\Api\CustomAmount::class,'get_record_list']);
+//余额记录详情
+Route::any('custom_amount/get_record_info',[\App\Http\Controllers\Api\CustomAmount::class,'get_record_info']);