| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- <?php
- /**
- * Created by PhpStorm.
- * Name: 芸众商城系统
- * Author: 广州市芸众信息科技有限公司
- * Profile: 广州市芸众信息科技有限公司位于国际商贸中心的广州,专注于移动电子商务生态系统打造,拥有芸众社交电商系统、区块链数字资产管理系统、供应链管理系统、电子合同等产品/服务。官网 :www.yunzmall.com www.yunzshop.com
- * Date: 2021/5/26
- * Time: 17:13
- */
- namespace app\payment\controllers;
- use app\common\events\withdraw\WithdrawSuccessEvent;
- use app\common\exceptions\ShopException;
- use app\payment\PaymentController;
- use Yunshop\HighLight\models\HighLightWithdrawModel;
- use Yunshop\HighLight\services\ApiService;
- use app\common\services\Pay;
- use Yunshop\HighLight\services\WithdrawService;
- class HighlightController extends PaymentController
- {
- protected $parameters;
- /**
- * @var HighLightWithdrawModel
- */
- protected $withdraw;
- public function __construct()
- {
- parent::__construct();
- $this->setParameter();
- //访问记录
- Pay::payAccessLog();
- //保存响应数据
- Pay::payResponseDataLog('', '高灯提现回调', json_encode($this->parameters));
- if (!app('plugins')->isEnabled('high-light')) {
- \Log::debug('高灯提现回调通知:高灯插件未开启',$this->parameters);
- exit('success');
- }
- }
- /**
- * @return ApiService
- */
- private function api()
- {
- return ApiService::current($this->parameters['appkey']);
- }
- private function setParameter()
- {
- $this->parameters = request()->input();
- }
- /**
- * @param $trade_number
- */
- private function setWithdraw($trade_number)
- {
- $this->withdraw = HighLightWithdrawModel::where('order_sn',$trade_number)->first();
- if (!$this->withdraw) {
- \Log::debug('高灯提现结算单回调通知:提现订单信息未找到',$trade_number);
- exit('success');
- }
- \Setting::$uniqueAccountId = \YunShop::app()->uniacid = $this->withdraw->uniacid;
- }
- //异步创建高灯结算单通知
- public function notifyUrl()
- {
- try {
- if ($this->parameters['code'] <> 0) {
- throw new \Exception($this->parameters['msg']);
- }
- $this->parameters['data'] = $this->api()->decrypt($this->parameters['data']);
- if (!$this->parameters['data']) {
- throw new \Exception('解密失败');
- }
- $this->parameters['data'] = json_decode($this->parameters['data'],true);
- foreach ($this->parameters['data'] as $item) {
- $this->setWithdraw($item['order_random_code']);
- $this->verifyStatus($item);
- }
- } catch (\Exception $e) {
- \Log::debug('高灯创建结算单回调失败:'.$e->getMessage(),$this->parameters);
- }
- exit('success'); //确保一次回调就返回,流转状态交由定时任务走
- }
- public function verifyStatus($data)
- {
- switch ($data['status']) {
- case 100:
- case 200:
- if ($data['status'] == 100 && !$data['is_verification']) {
- WithdrawService::setWithdraw($this->withdraw,-1,'结算单创建失败:'.($data['check_error_info'] ? : $data['fail_reason']),null,null,$data['status']);
- } elseif ($data['status'] == 100 && $data['is_verification']) {
- WithdrawService::setWithdraw($this->withdraw,1,'结算单校验中',null,null,$data['status']);
- } elseif ($data['status'] == 200) {
- WithdrawService::setWithdraw($this->withdraw,-1,'结算单创建失败已删除:'.$data['fail_reason'],null,null,$data['status']);
- }
- break;
- case 300:
- WithdrawService::setWithdraw($this->withdraw,1,'商户余额不足,充值后状态会自动流转!如需停止支付,需在商户结算后台【财务管理】找到对应结算单-【删除】',null,null,$data['status']);
- break;
- case 600:
- if ($data['hangup_flag']) {
- $failText = '该用户在多家商户累计本月结算超14900,次月可自动支付,也可在【结算后台-财务人员-挂起订单】中操作退款';
- } else {
- $failText = '高灯侧挂单中,可在【结算后台-财务人员-挂起订单】中操作退款';
- }
- WithdrawService::setWithdraw($this->withdraw,1,$failText,null,null,$data['status']);
- break;
- case 700:
- case 800:
- case 850:
- case 900:
- case 860:
- case 1006:
- case 910:
- case 920:
- case 930:
- WithdrawService::setWithdraw($this->withdraw,1,'高灯侧正在结算处理中',null,null,$data['status']);
- break;
- //----以下状态需进行退款处理----
- case 610:
- WithdrawService::setWithdraw($this->withdraw,1,'待用户确认结算单',null,null,$data['status']);
- break;
- case 1004:
- $failText = $data['status'] == 610?'打款失败:创建结算单时用户未签约或未认证':'打款失败';
- try {
- $this->api()->refundBalance(['order_random_code' => [$this->withdraw->order_sn]]);
- $refundStatus = 1;
- $refundFailText = null;
- } catch (\Exception $e) {
- $refundStatus = -1;
- $refundFailText = '退款失败:'.$e->getMessage().',请到高灯后台进行退款!';
- }
- WithdrawService::setWithdraw($this->withdraw,-1,$failText,$refundStatus,$refundFailText,$data['status']);
- break;
- //------------------------------
- case 1000://打款成功
- WithdrawService::setWithdraw($this->withdraw,2,'',null,null,$data['status']);
- WithdrawService::withdrawSuccess($this->withdraw->withdraw_sn);
- break;
- case 750:
- case 5000:
- //退款完成
- WithdrawService::setWithdraw($this->withdraw,-1,'',2,'',$data['status']);
- break;
- default:
- WithdrawService::setWithdraw($this->withdraw,-1,'未知状态码',null,null,$data['status']);
- }
- }
- //异步高灯退款通知
- public function refundNotifyUrl()
- {
- try {
- if ($this->parameters['code'] <> 0) {
- throw new \Exception($this->parameters['msg']);
- }
- $this->parameters['data'] = $this->api()->decrypt($this->parameters['data']);
- if (!$this->parameters['data']) {
- throw new \Exception('解密失败');
- }
- $this->parameters['data'] = json_decode($this->parameters['data'],true);
- $this->setWithdraw($this->parameters['data']['order_random_code']);
- WithdrawService::setWithdraw($this->withdraw,-1,null,2,'');
- } catch (\Exception $e) {
- \Log::debug('高灯结算单退款回调失败:'.$e->getMessage(),$this->parameters);
- }
- exit('success'); //确保一次回调就返回,流转状态交由定时任务走
- }
- }
|