verify($_REQUEST); if ($verify == false) { Log::write('签名失败','yun_notify'); echo 'fail'; die; } // Log::info($_REQUEST); // Log::info($_REQUEST['data']); // Log::write($_REQUEST,'yun_notify'); // Log::write($_REQUEST['data'],'yun_notify'); $data_info = Des3Service::decode($_REQUEST['data'], $config->des3_key); #对业务数据进行解密 if (!isset($data_info['data'])) { echo 'fail'; die; } $data = $data_info['data']; Log::write($data,'yun_notify'); // Log::write($_REQUEST['data'],'yun_notify'); if (!isset($data['status'])) { echo 'fail'; die; } // Log::info('xxxxxxx'); // Log::info($data); //var_dump($data); //根据回调数据中的status做一下订单状态的判断和业务逻辑处理 //若有用户钱包体系,则在下单同步返回成功时,将用户钱包进行相应金额的扣减冻结 $status = $data['status']; switch ($status) { case "1": // 支付成功(对于支付宝和微信支付是最终状态,对于银行卡大部分情况是终态,小概率会出现"退汇现象",状态由"成功"变为"退汇") // TODO 更新业务订单状态,提示用户提现成功 $redis = connectionRedis(); $key_name = "api:user:widthdraw:order_sn".$data['order_id']; $redis_order_sn = redis_lock_exits($key_name,1,5); if($redis_order_sn) { $update_arr = [ 'status' => 6, 'update_time' => time(), 'pay_time' => time(), 'pay_message' => $data['status_message'], // 'pay_platform' => 1, ]; Db::name('user_withdrawal')->where(['order_sn' => $data['order_id'], 'status' => 4])->update($update_arr); } echo "success"; break; case "2": // 支付失败(最终状态) // TODO 更新业务订单状态,提示用户提现失败,若有用户钱包体系,则需将提现金额退回至用户钱包 $redis = connectionRedis(); $key_name = "api:user:widthdraw:order_sn".$data['order_id']; $redis_order_sn = redis_lock_exits($key_name,1,5); $update_arr = [ 'status' => 5, 'update_time' => time(), 'pay_message' => $data['status_message'], 'pay_time' => time(), // 'pay_platform' => 1, ]; if($redis_order_sn) { Db::startTrans(); try { // $info = Db::name('user_withdrawal')->where(['order_sn' => $data['order_id'], 'status' => 4])->find(); $info = Db::name('user_withdrawal')->where(['order_sn' => $data['order_id']])->find(); if ($info) { Db::name('user_withdrawal')->where(['order_sn' => $data['order_id']])->update($update_arr); $reslut=model('admin/User')->change_user_money_by_uid($info['uid'], $info['money'], 1, 15, "代付失败,余额提现驳回:" . $info['order_sn'], $info['uid'], $info['wid']); if ($reslut['code'] !=200 ) { Db::rollback(); Log::write(['msg'=>'支付失败1!','msg1'=>$reslut['msg']],'yun_notify'); } } Db::commit(); } catch (Exception $e) { Db::rollback(); Log::write(['msg'=>'支付失败2!','msg1'=>$e->getMessage()],'yun_notify'); // Log::info($e->getMessage()); } } echo "success"; break; case "4": // 订单挂单(中间状态,挂单原因会在订单详细状态信息返回) // TODO 提示用户提现中,其他逻辑如:若因余额不足导致的挂单,可通知财务及时充值,72小时内补足余额后可自动继续支付 echo "success"; break; case "9": // 退汇,(最终状态,银行卡渠道特有现象,会先收到"成功"回调,然后再收到"退汇"的回调,一般以成功状态间隔24小时以上) // TODO 更新业务订单状态为“退汇”(失败),通知用户提现失败,建议用户更换其他银行卡提现,若有用户钱包体系,则需将提现金额退回至用户钱包 $update_arr = [ 'status' => 5, 'update_time' => time(), 'pay_message' => $data['status_message'], // 'pay_platform' => 1, 'pay_time' => time() ]; $redis = connectionRedis(); $key_name = "api:user:widthdraw:order_sn".$data['order_id']; $redis_order_sn = redis_lock_exits($key_name,1,5); if($redis_order_sn) { Db::startTrans(); try { // $info = Db::name('user_withdrawal')->where(['order_sn' => $data['order_id'], 'status' => 4])->find(); $info = Db::name('user_withdrawal')->where(['order_sn' => $data['order_id']])->find(); if ($info) { Db::name('user_withdrawal')->where(['order_sn' => $data['order_id']])->update($update_arr); $reslut=model('admin/User')->change_user_money_by_uid($info['uid'], $info['money'], 1, 15, "代付失败,余额提现驳回:" . $info['order_sn'], $info['uid'], $info['wid']); if ($reslut['code'] !=200 ) { Db::rollback(); // return ['code' => 201, 'msg' => "处理失败", 'data' => null]; } } Db::commit(); } catch (Exception $e) { Db::rollback(); Log::write(['msg'=>'退汇!','msg1'=>$e->getMessage()],'yun_notify'); // Log::info($e->getMessage()); } } echo "success"; break; case "15": // 订单取消,(最终状态,只有挂单的订单才可以取消) // TODO 更新业务订单状态为“取消”(失败),通知用户提现失败,若有用户钱包体系,则需将提现金额退回至用户钱包 $update_arr = [ 'status' => 5, 'update_time' => time(), 'pay_message' => $data['status_message'], // 'pay_platform' => 1, 'pay_time' => time() ]; $redis = connectionRedis(); $key_name = "api:user:widthdraw:order_sn".$data['order_id']; $redis_order_sn = redis_lock_exits($key_name,1,5); if($redis_order_sn) { Db::startTrans(); try { // $info = Db::name('user_withdrawal')->where(['order_sn' => $data['order_id'], 'status' => 4])->find(); $info = Db::name('user_withdrawal')->where(['order_sn' => $data['order_id']])->find(); if ($info) { Db::name('user_withdrawal')->where(['order_sn' => $data['order_id']])->update($update_arr); $reslut=model('admin/User')->change_user_money_by_uid($info['uid'], $info['money'], 1, 15, "代付失败,余额提现驳回:" . $info['order_sn'], $info['uid'], $info['wid']); if ($reslut['code'] !=200 ) { Db::rollback(); } } Db::commit(); } catch (Exception $e) { Db::rollback(); Log::write(['msg'=>'订单取消!','msg1'=>$e->getMessage()],'yun_notify'); // Log::info($e->getMessage()); } } echo "success"; break; } // echo "success"; //回写success,终止本次回调 } }