|
|
@@ -64,6 +64,9 @@ class PaymentOrderService extends BaseService
|
|
|
if(isset($search['channel']) && !empty($search['channel'])){
|
|
|
$where[] = ['channel', '=', $search['channel']];
|
|
|
}
|
|
|
+ if(isset($search['order_no']) && !empty($search['order_no'])){
|
|
|
+ $where[] = ['order_no', '=', $search['order_no']];
|
|
|
+ }
|
|
|
if(isset($search['id']) && !empty($search['id'])){
|
|
|
$where[] = ['id', '=', $search['id']];
|
|
|
}
|
|
|
@@ -144,12 +147,31 @@ class PaymentOrderService extends BaseService
|
|
|
return $msg;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @description: 创建代付订单
|
|
|
+ * @param {*} $memberId 会员
|
|
|
+ * @param {*} $amount 金额
|
|
|
+ * @param {*} $channel 提现通道
|
|
|
+ * @param {*} $bank_name 银行名称/支付宝
|
|
|
+ * @param {*} $account 姓名
|
|
|
+ * @param {*} $card_no 银行卡号/支付宝账号
|
|
|
+ * @return {*}
|
|
|
+ */
|
|
|
public static function createPayout($memberId, $amount, $channel, $bank_name, $account, $card_no)
|
|
|
{
|
|
|
$default_amount = $amount;
|
|
|
$result = [];
|
|
|
$result['chat_id'] = $memberId;
|
|
|
|
|
|
+ if($amount < 100){
|
|
|
+ $result['text'] = '提现金额最少100';
|
|
|
+ return $result;
|
|
|
+ }
|
|
|
+ if($amount > 49999){
|
|
|
+ $result['text'] = '提现金额最多49999';
|
|
|
+ return $result;
|
|
|
+ }
|
|
|
+
|
|
|
// 在调用三方支付前开始事务
|
|
|
DB::beginTransaction();
|
|
|
|
|
|
@@ -173,6 +195,7 @@ class PaymentOrderService extends BaseService
|
|
|
$order_no = self::createOrderNo('sj'.$data['type'].'_', $memberId);
|
|
|
$data['order_no'] = $order_no;
|
|
|
$data['member_id'] = $memberId;
|
|
|
+ $data['free'] = $amount * 0.002 + 2;
|
|
|
$amount = number_format($amount, 2, '.', '');
|
|
|
$data['amount'] = $amount;
|
|
|
$data['channel'] = $channel;
|
|
|
@@ -181,6 +204,7 @@ class PaymentOrderService extends BaseService
|
|
|
$data['card_no'] = $card_no;
|
|
|
$data['callback_url'] = SanJinService::getNotifyUrl();
|
|
|
$data['status'] = self::STATUS_STAY;
|
|
|
+ $data['remark'] = '提现费率:0.2%+2';
|
|
|
|
|
|
// 先预扣款(锁定资金)
|
|
|
$wallet->available_balance = $available_balance;
|
|
|
@@ -202,7 +226,7 @@ class PaymentOrderService extends BaseService
|
|
|
$available_balance,
|
|
|
'三方提现',
|
|
|
$id,
|
|
|
- '钱宝提现'
|
|
|
+ '钱宝提现费率:0.2%+2'
|
|
|
);
|
|
|
|
|
|
// 提交事务,确保预扣款成功
|
|
|
@@ -290,4 +314,91 @@ class PaymentOrderService extends BaseService
|
|
|
return $result;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @description: 接收三方订单
|
|
|
+ * @param {*} $params
|
|
|
+ * @return {*}
|
|
|
+ */
|
|
|
+ public static function receiveOrder($params)
|
|
|
+ {
|
|
|
+ // 判断商户号是否一致
|
|
|
+ if($params['merchantNum'] == SanJinService::getMerchantId()){
|
|
|
+
|
|
|
+ $info = self::findOne(['order_no' => $params['orderNo']]);
|
|
|
+ if($info){
|
|
|
+ // 判断金额是不是正确认
|
|
|
+ if($info->amount != $params['amount']){
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 验证签名
|
|
|
+ $sign = SanJinService::verifyNotifySign($params['state'],$params['orderNo'],$params['amount']);
|
|
|
+ if($params['sign'] != $sign){
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 代付
|
|
|
+ if($info->type == self::TYPE_PAYOUT){
|
|
|
+ self::onSubmitPayout($params,$info);
|
|
|
+ }
|
|
|
+ // 代收
|
|
|
+ if($info->type == self::TYPE_PAY){
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @description: 处理代付订单
|
|
|
+ * @param {*} $params
|
|
|
+ * @return {*}
|
|
|
+ */
|
|
|
+ public static function onSubmitPayout($params,$info)
|
|
|
+ {
|
|
|
+ $data = [];
|
|
|
+ $result = [];
|
|
|
+ $chat_id = $info->member_id;
|
|
|
+ DB::transaction();
|
|
|
+
|
|
|
+ try{
|
|
|
+ if($params['state'] == 1){
|
|
|
+ $data['status'] = self::STATUS_SUCCESS;
|
|
|
+ $res = self::model()::where(['order_no' => $params['orderNo']])->update($data);
|
|
|
+ if($res){
|
|
|
+ DB::commit();
|
|
|
+ $text = "✅ 提现通知 \n";
|
|
|
+ $text .= "提现平台:{$info->bank_name} \n";
|
|
|
+ $text .= "收款人:{$info->account} \n";
|
|
|
+ $text .= "收款卡号:{$info->card_no} \n";
|
|
|
+ $text .= "提现金额:{$info->amount} \n";
|
|
|
+ $text .= "提现成功,金额已到账,请注意查收!";
|
|
|
+ self::sendMessage($chat_id,$text);
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ $data['status'] = self::STATUS_FAIL;
|
|
|
+ $res = self::model()::where(['order_no' => $params['orderNo']])->update($data);
|
|
|
+ if($res){
|
|
|
+ DB::commit();
|
|
|
+ $text = "❌ 提现通知 \n";
|
|
|
+ $text .= "提现平台:{$info->bank_name} \n";
|
|
|
+ $text .= "收款人:{$info->account} \n";
|
|
|
+ $text .= "收款卡号:{$info->card_no} \n";
|
|
|
+ $text .= "提现金额:{$info->amount} \n";
|
|
|
+ $text .= "提现失败,金额已返回钱包,请注意查收!";
|
|
|
+ self::sendMessage($chat_id,$text);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }catch(\Exception $e){
|
|
|
+ DB::rollBack();
|
|
|
+ // 回滚失败,需要记录告警,人工干预
|
|
|
+ Log::error('提现失败回滚异常: ' . $e->getMessage(), $params);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
}
|