TimestampBehavior::class, 'attributes' => [ ActiveRecord::EVENT_BEFORE_INSERT => ['created_at'], ActiveRecord::EVENT_BEFORE_UPDATE => ['updated_at'] ] ] ]; } /** * {@inheritdoc} */ public function rules() { return [ [['store_id'], 'required'], [['md_id', 'user_id', 'saas_id', 'store_id', 'status', 'is_delete', 'created_at', 'pay_time', 'type', 'pay_type', 'cash_type', 'updated_at'], 'integer'], [['price', 'service_charge'], 'number'], [['mobile', 'name', 'order_no'], 'string', 'max' => 255], [['bank_name'], 'string', 'max' => 30], [['user_id', 'pay_time', 'reject_reason'], 'safe'], ]; } /** * {@inheritdoc} */ public function attributeLabels() { return [ 'id' => 'ID', 'user_id' => '用户id', 'saas_id' => '商盟用户id', 'store_id' => '商城id', 'price' => '提现金额', 'status' => '申请状态 0--申请中 1--确认申请 2--已打款 3--驳回 5--余额通过', 'is_delete' => '是否删除', 'created_at' => '添加時間', 'pay_time' => '付款', 'type' => '支付方式 0--微信支付 1--支付宝 2--银行卡 3--余额', 'mobile' => '支付宝账号', 'name' => '支付宝姓名', 'bank_name' => '开户行名称', 'pay_type' => '打款方式 0--之前未统计的 1--微信自动打款 2--手动打款', 'order_no' => '微信自动打款订单号', 'service_charge' => '提现手续费', 'cash_type' => '0、正常,1、自提点提现', 'updated_at' => '更新时间', ]; } public static function getStatusName($cash) { $name = ''; if($cash['status'] == 0){ $name = '申请中'; } if($cash['status'] == 1){ $name = '确认申请'; } if($cash['status'] == 2){ $name = '已打款'; } if($cash['status'] == 3){ $name = '驳回'; } if($cash['status'] == 5){ $name = '余额通过'; } return $name; } public static function getTypeName($cash) { $name = ''; if($cash['type'] == 0){ $name = '微信'; } if($cash['type'] == 1){ $name = '支付宝'; } if($cash['type'] == 2){ $name = '银行卡'; } if($cash['type'] == 3){ $name = '余额'; } return $name; } public static function getServiceMoney($cash) { if($cash['service_charge'] == 0){ $price = $cash['price']; }else{ $cashPrice = floatval($cash['price']); $price = $cashPrice * (100 - $cash['service_charge']) / 100; } return round($price, 2); } //最大提现金额 public static function getMaxCash($store, &$data = []) { $storeMoney = Store::getMoney($store); $storeMoneyTotal = Store::getTotalMoney($store); $moneyMd = Md::find()->where(['store_id' => $store->id, 'is_delete' => 0]) ->andWhere(['>', 'cash_profit', 0]) ->sum('cash_profit') ?: 0; $moneyUser = User::find()->where(['store_id' => $store->id, 'is_delete' => 0]) ->andWhere(['>', 'price', 0]) ->sum('price') ?: 0; $hasIncoming = Store::hasIncoming($store->id); if($hasIncoming){ $max = $storeMoney; }else{ $max = bcsub(bcsub($storeMoney, $moneyMd, 2), $moneyUser, 2);//$storeMoney - $moneyMd - $moneyUser; } $data['storeMoneyTotal'] = $storeMoneyTotal; $data['storeMoney'] = $storeMoney; $data['moneyUser'] = $moneyUser; $data['moneyMd'] = $moneyMd; $data['moneyFrozen'] = bcadd($moneyMd, $moneyUser, 2); return $max; } //新增判断openid // public function beforeSave($insert) // { // // 判断是否有 openid // if (empty($this->mobile)) { // // 如果没有 openid // return false; // } // // 如果有 openid,继续保存 // return parent::beforeSave($insert); // } public static function getRejectReason($batch_id){ $wechat = getAllianceClientWxConfig(); $result = (new WxV3($wechat))->queryTransferStatus($batch_id, 0); $resfobj = json_decode($result); $transfer_detail_list = $resfobj->transfer_detail_list; $detailref = ''; if ($transfer_detail_list) { $detail_response = (new WxV3($wechat))->queryTransferDetail($batch_id, $transfer_detail_list[0]->detail_id, 0); $detail_response_obj = json_decode($detail_response); $detailref = self::handleTransferFailure($detail_response_obj->fail_reason); } return $detailref; } public static function handleTransferFailure($failure_reason) { // 根据失败原因进行处理 switch ($failure_reason) { case 'ACCOUNT_FROZEN': return "该用户账户被冻结,请联系客服处理。"; case 'REAL_NAME_CHECK_FAIL': return "收款人未实名认证,需要用户完成微信实名认证。"; case 'NAME_NOT_CORRECT': return "收款人姓名校验不通过,请核实信息。"; case 'OPENID_INVALID': return "Openid格式错误或者不属于商家公众账号。"; case 'TRANSFER_QUOTA_EXCEED': return "超过用户单笔收款额度,请核实产品设置是否准确。"; case 'DAY_RECEIVED_QUOTA_EXCEED': return "超过用户单日收款额度,请核实产品设置是否准确。"; case 'MONTH_RECEIVED_QUOTA_EXCEED': return "超过用户单月收款额度,请核实产品设置是否准确。"; case 'DAY_RECEIVED_COUNT_EXCEED': return "超过用户单日收款次数,请核实产品设置是否准确。"; case 'PRODUCT_AUTH_CHECK_FAIL': return "未开通该权限或权限被冻结,请核实产品权限状态。"; case 'OVERDUE_CLOSE': return "超过系统重试期,系统自动关闭。"; case 'ID_CARD_NOT_CORRECT': return "收款人身份证校验不通过,请核实信息。"; case 'ACCOUNT_NOT_EXIST': return "该用户账户不存在,请核实用户信息。"; case 'TRANSFER_RISK': return "该笔转账可能存在风险,已被微信拦截。"; case 'OTHER_FAIL_REASON_TYPE': return "其它失败原因,请联系微信支付客服。"; case 'REALNAME_ACCOUNT_RECEIVED_QUOTA_EXCEED': return "用户账户收款受限,请引导用户在微信支付查看详情。"; case 'RECEIVE_ACCOUNT_NOT_PERMMIT': return "未配置该用户为转账收款人,请在产品设置中调整,添加该用户为收款人。"; case 'PAYEE_ACCOUNT_ABNORMAL': return "用户账户收款异常,请联系用户完善其在微信支付的身份信息。"; case 'PAYER_ACCOUNT_ABNORMAL': return "商户账户付款受限,请前往商户平台获取解除功能限制指引。"; case 'TRANSFER_SCENE_UNAVAILABLE': return "该转账场景暂不可用,请确认转账场景ID是否正确。"; case 'TRANSFER_SCENE_INVALID': return "你尚未获取该转账场景,请确认转账场景ID是否正确。"; case 'TRANSFER_REMARK_SET_FAIL': return "转账备注设置失败,请调整后重新再试。"; case 'RECEIVE_ACCOUNT_NOT_CONFIGURE': return "请前往商户平台-商家转账到零钱-前往功能-转账场景中添加。"; case 'BLOCK_B2C_USERLIMITAMOUNT_BSRULE_MONTH': return "超出用户单月转账收款20w限额,本月不支持继续向该用户付款。"; case 'BLOCK_B2C_USERLIMITAMOUNT_MONTH': return "用户账户存在风险收款受限,本月不支持继续向该用户付款。"; case 'MERCHANT_REJECT': return "商户员工(转账验密人)已驳回转账,请检查操作。"; case 'MERCHANT_NOT_CONFIRM': return "商户员工(转账验密人)超时未验密,请及时完成操作。"; default: return "未知的失败原因,请稍后重试或联系微信支付客服。"; } } }