basePath . "/utils/Adapay/AdapaySdk/init.php"; class Adapay { public static $notify_url = 'adapay/notify'; public static $confs = []; public static function conf($store_id = 0, $refresh = 0) { if(isset(self::$confs[$store_id]) && !$refresh){ return self::$confs[$store_id]; } $confDef = [ "api_key_live" => "", "rsa_private_key" => "", "app_id" => "", "v2" => [ "sys_id" => "", "product_id" => "", "huifu_id" => '', "rsa_huifu_public_key" => "", "rsa_merch_private_key" => "", ] ]; $conf = Option::get(OptionSetting::ADAPAY, $store_id, 'store')['value']; if($conf){ $conf = array_merge($confDef, json_decode($conf, true)); }else{ $conf = $confDef; } self::$confs[$store_id] = $conf; return $conf; } public static function saveConf($store_id = 0, $config = []) { $oldConf = self::conf($store_id, 1); $conf = array_merge($oldConf, $config); $set = Option::set(OptionSetting::ADAPAY, json_encode($conf), $store_id, 'store'); self::conf($store_id, 1); return $set; } public static function initStoreAdapay($store_id) { $conf = self::conf($store_id); \AdaPay\AdaPay::init([ "api_key_live" => $conf['api_key_live'], "rsa_private_key" => $conf['rsa_private_key'], ], "live", true); } public static function create($pay_type, $order, $type, $goods_names = null, $total_pay_price = 0, $is_app = false, $balance_price = 0, $is_h5 = false, $is_official = false) { if (!$order || !in_array($type, OrderNo::$validOrderType) || ($type != OrderNo::ORDER_UNION && !$goods_names)) { return [ 'code' => 1, 'msg' => '订单信息或订单类型错误' ]; } // \AdaPay\AdaPay::init([ // "api_key_live" => "api_live_2fdb32b6-2807-4d4a-99f7-fc0a9b3c8fa5", // "api_key_test" => "api_test_46be6a5e-c047-4cd0-9aac-c8c73a332f51", //// "rsa_public_key" => "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCS0Fpi540Y5pPtItiRrsnguG8N22mwbNcHaA+ZfqDxEM32bNoLp7VhV/4T9jUS8plSYkH3kr7xmWl311f0qxEz5S4LbQACN/vDag48zsY2iTulhnCdpbhFqqCVnuK86g7uFyGhy9PJwGscXpmLxXkA1jwEFXM+8NTjfD8YsEdF0QIDAQAB", // "rsa_private_key" => "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAJLQWmLnjRjmk+0i2JGuyeC4bw3babBs1wdoD5l+oPEQzfZs2guntWFX/hP2NRLymVJiQfeSvvGZaXfXV/SrETPlLgttAAI3+8NqDjzOxjaJO6WGcJ2luEWqoJWe4rzqDu4XIaHL08nAaxxemYvFeQDWPAQVcz7w1ON8PxiwR0XRAgMBAAECgYEAgg4gg80rqQtZr5BW2XdFTtUTS+s6zRcdxWnhp9ANMn/4dHwpDHocq4cPhQ9uJMLUH677UR2mGNAWJhuVxyBjs4J2qVFACpU4Ta9BRQXCppao3maB+04Uobik0xObAz6Fj+EitfO3HFrV6ilPtEMtiObd25uS/aQF7tLKgC+rs4ECQQDeTQyAtmWG+5Iacz1uIxLBWIyz5uIwdRb8pAcA/XIR/alv0IOEhPmYTq/6234av6CP9tWl65vOjozBY5D7RbDNAkEAqRHWNu0Zyw6koY6Pu3mivABanY0lZHigdSmxwAQqB8HnUXpuSscj5N1KxlTVvcPw40pbKOCrUoRXib9Cu3rZFQJAZdBkKY9gcLJH+FVPjWIC9QrZZowYjJkULiHyE0IBPLwxHkUh90/wARIJB5v/5cBeiZFDyPpgIfqn/OrdPDhvAQJAUd8JVN/MNcCJiJJ4l9h3LYMeXl0TVmvzh8kBAnMBx2/mjFY1QpDcmN9wbkp2lsZjyC0hp9HkJLlhiprLve3nYQJBAJZ8XdINDo+P9YJLEwMn1OrDG8h071YijgvAvHpZWxb+7GbUhExkDUVaT99jjLzGZ8mVvvTJ/VoqnFu4+ALyAjE=", // ], "live", true); // $app_id = 'app_9aa823b9-d959-4307-a931-23ba8780f9aa'; // $open_id = 'oNiCd4gweWf2Irg2K5WfTFWFGEts'; $store_id = $order->store_id; self::initStoreAdapay($store_id); $conf = self::conf($store_id); $app_id = $conf['app_id']; if($pay_type == Order::PAY_TYPE_ADAPAY_WX){ if ($is_app) { $open_id = get_user()->wechat_app_open_id; } else if ($is_official) { $open_id = get_user()->wechat_platform_open_id; } else { $open_id = get_user()->wechat_open_id; } $expend = ['open_id' => $open_id]; } if($pay_type == Order::PAY_TYPE_ADAPAY_ALIPAY){ $open_id = get_user()->alipay_open_id; $expend = ['buyer_id' => $open_id]; } if ($type == OrderNo::ORDER_UNION) { $goods_title = count($order) . '笔订单合并支付'; $out_trade_no = OrderNo::getOrderNo(OrderNo::ORDER_UNION); $total_fee = $balance_price > 0 ? floatval($total_pay_price - $balance_price) * 100 : $total_pay_price * 100; $order_union = new OrderUnion(); $order_union->store_id = get_store_id(); $order_union->user_id = get_user()->id; $order_union->order_no = $out_trade_no; $order_union->price = $total_pay_price; $order_union->is_pay = 0; $order_union->created_at = time(); $order_union->is_delete = 0; $order_id_list = []; foreach ($order as $value) { $order_id_list[] = $value->id; } $order_union->order_id_list = json_encode($order_id_list); if (!$order_union->save()) { foreach ($order_union->errors as $error) { return [ 'code' => 1, 'msg' => $error ]; } } } else { $pay_price = $order->pay_price; // if ($type != OrderNo::ORDER_RECHARGE) { // if (isset($order->is_delivery) && $order->is_delivery == 1) { // $deliveryInfo = DeliveryInfo::find()->where(['order_no' => $order->order_no])->one(); // if ($deliveryInfo) { // $pay_price += $deliveryInfo->fee; // } // } // } $goods_title = mb_substr($goods_names, 0, 20); $out_trade_no = $order->order_no; $total_fee = $balance_price > 0 ? floatval($pay_price - $balance_price) * 100 : $pay_price * 100; } if($pay_type == Order::PAY_TYPE_ADAPAY_WX){ if ($is_h5) { $pay_channel = 'wx_pub'; } else { $pay_channel = 'wx_lite'; } } if($pay_type == Order::PAY_TYPE_ADAPAY_ALIPAY){ $pay_channel = 'alipay_lite'; } // 是否走分账 $pay_mode = ''; if (is_profit_sharing()) { $pay_mode = 'delay'; } //强制走分账流程,减少判断逻辑 $pay_mode = 'delay'; # 初始化支付类 $payment = new \AdaPaySdk\Payment(); if($order->adapay_payment_id){ ob_start(); $payment->query(['payment_id' => $order->adapay_payment_id]); $ob_cont = ob_get_contents(); var_dump(['2', $ob_cont]); ob_end_clean(); debug_log([__METHOD__, __LINE__, $payment->result], __CLASS__ . '.log'); if ($payment->isError()){ return [ 'code' => 1, 'msg' => '支付失败,查询失败', ]; } else { if(in_array($payment->result['status'], ['succeeded'])){ return [ 'code' => 1, 'msg' => '支付状态异常', ]; } if($payment->result['order_no'] == $out_trade_no){ $out_trade_no = OrderNo::getOrderNo($type); $order->order_no = $out_trade_no; $order->save(); } } } # 支付设置 $payment_params = array( "app_id"=> $app_id, "order_no"=> $out_trade_no, "pay_channel"=> $pay_channel, //"wx_lite", // "time_expire"=> "20200101000000", "pay_amt"=> sprintf("%.2f", $total_fee/100), "goods_title"=> $goods_title, "goods_desc"=> $goods_title, // "description"=> "description", "pay_mode"=> $pay_mode, 'expend' => $expend, 'notify_url' => pay_notify_url(self::$notify_url), ); # 发起支付 ob_start(); $payment->create($payment_params); $ob_cont = ob_get_contents(); var_dump(['2', $ob_cont]); ob_end_clean(); # 对支付结果进行处理 if ($payment->isError()){ //失败处理 debug_log([__METHOD__, __LINE__, $payment->result], __CLASS__ . '.log'); return [ 'code' => 1, 'msg' => '支付失败,' . (isset($payment->result['error_msg']) ? $payment->result['error_msg'] : ''), 'res' => $payment->result, ]; } else { $data = json_decode($payment->result['expend']['pay_info'], true); if($data === null){ $data = $payment->result['expend']['pay_info']; } if($pay_channel == 'alipay_lite'){ $data = $data['tradeNO']; } //成功处理 $return = [ 'code' => 0, 'msg' => 'success', 'res' => $payment->result, 'data' => $data, ]; if ($type == OrderNo::ORDER_UNION) { foreach ($order as $value) { $value->order_union_id = $value->id; $value->adapay_payment_id = $payment->result['id']; $value->save(); } $return['order_no'] = $payment_params['out_trade_no']; $return['body'] = $payment_params['goods_title']; }else{ $order->adapay_payment_id = $payment->result['id']; $order->save(); } if ($is_h5) { $return['res']['mweb_url'] = $return['res']['mweb_url'] . '&redirect_url=' . \Yii::$app->request->hostInfo . '/h5/#/order/order/order'; } return $return; } } public static function paymentConfirmCreate($order, $member_id, $amount) { $store_id = $order->store_id; self::initStoreAdapay($store_id); $adapay_payment_id = self::getOrderPaymentId($order); if($adapay_payment_id['code'] != 0){ return $adapay_payment_id; } # 初始化支付类 $payment = new \AdaPaySdk\PaymentConfirm(); # 支付确认参数设置 $payment_params = array( "payment_id"=> $adapay_payment_id['data'], "order_no"=> $order->order_no . '_' . time() . random_int(100000, 999999), "confirm_amt"=> sprintf("%.2f", $amount), "description"=> "分账", "div_members"=> [ [ 'member_id' => $member_id, 'amount' => sprintf("%.2f", $amount), 'fee_flag' => 'Y', ] ] ); # 发起支付确认创建 $payment->create($payment_params); # 对支付确认创建结果进行处理 if ($payment->isError()){ //失败处理 debug_log([__METHOD__, __LINE__, $payment->result, $payment_params], __CLASS__ . '.log'); return [ 'code' => 1, 'msg' => 'adapay分账失败1,' . (isset($payment->result['error_msg']) ? $payment->result['error_msg'] : ''), 'res' => $payment->result, ]; } else { //成功处理 // var_dump($payment->result); return [ 'code' => 0, 'msg' => 'success', 'data' => $payment->result, ]; } } public static function paymentConfirmQueryList($order, $page = 1) { $store_id = $order->store_id; self::initStoreAdapay($store_id); $conf = self::conf($store_id); $app_id = $conf['app_id']; $adapay_payment_id = self::getOrderPaymentId($order); if($adapay_payment_id['code'] != 0){ return $adapay_payment_id; } # 初始化支付类 $payment = new \AdaPaySdk\PaymentConfirm(); # 支付确认参数设置 $payment_params = array( "app_id"=> $app_id, "payment_id"=> $adapay_payment_id['data'], "page_index"=> $page, "page_size"=> 20, ); # 发起支付确认创建 $payment->queryList($payment_params); # 对支付确认创建结果进行处理 if ($payment->isError()){ //失败处理 debug_log([__METHOD__, __LINE__, $payment->result, $payment_params], __CLASS__ . '.log'); return [ 'code' => 1, 'msg' => 'adapay查询支付确认对象列表失败1,' . (isset($payment->result['error_msg']) ? $payment->result['error_msg'] : ''), 'res' => $payment->result, ]; } else { //成功处理 // var_dump($payment->result); return [ 'code' => 0, 'msg' => 'success', 'data' => $payment->result, ]; } } public static function query($store_id, $page_size = 10, $page_index = 1, $order_no = '', $payment_id = '') { self::initStoreAdapay($store_id); $conf = self::conf($store_id); $app_id = $conf['app_id']; # 初始化支付类 $payment = new \AdaPaySdk\Payment(); # 请求参数 $payment_params = array( "app_id"=> $app_id, "payment_id"=> $payment_id, "order_no"=> $order_no, "page_index"=> $page_index, "page_size"=> $page_size, "created_gte"=> "", "created_lte"=> "" ); $payment->queryList($payment_params); # 对支付结果进行处理 if ($payment->isError()){ //失败处理 return [ 'code' => 1, 'msg' => '查询订单失败1,' . (isset($payment->result['error_msg']) ? $payment->result['error_msg'] : ''), 'res' => $payment->result, ]; } else { //成功处理 // var_dump($payment->result); return [ 'code' => 0, 'msg' => 'success', 'data' => $payment->result, ]; } } public static function orderNo2Id($store_id, $order_no = '') { $data = self::query($store_id, 1, 1, $order_no); if($data['code'] != 0){ return $data; } if(!empty($data['data']['payments'])){ $id = $data['data']['payments'][0]['id']; return [ 'code' => 0, 'data' => $id, ]; } return [ 'code' => 1, 'msg' => '未查询到数据', ]; } public static function paymentReverse($order, $reverse_amt) { $store_id = $order->store_id; self::initStoreAdapay($store_id); $conf = self::conf($store_id); $app_id = $conf['app_id']; $adapay_payment_id = self::getOrderPaymentId($order); if($adapay_payment_id['code'] != 0){ return $adapay_payment_id; } # 初始化支付类 $payment = new \AdaPaySdk\PaymentReverse(); $payment_params = array( # 支付对象ID "payment_id"=> $adapay_payment_id['data'], # 商户app_id "app_id"=> $app_id, # 撤销订单号 "order_no"=> $order->order_no . "R" . time() .rand(100000, 999999), # 撤销金额 "reverse_amt"=> sprintf("%.2f", $reverse_amt), # 通知地址 "notify_url"=> "", # 撤销原因 "reason"=> "撤销", # 扩展域 "expand"=> "", # 设备信息 "device_info"=> "", ); # 发起支付撤销 $payment->create($payment_params); # 对支付撤销结果进行处理 if ($payment->isError()){ //失败处理 debug_log([__METHOD__, __LINE__, $payment->result, $payment_params], __CLASS__ . '.log'); return [ 'code' => 1, 'msg' => '撤销失败1,' . (isset($payment->result['error_msg']) ? $payment->result['error_msg'] : ''), 'res' => $payment->result, ]; } else { //成功处理 // var_dump($payment->result); return [ 'code' => 0, 'msg' => 'success', 'data' => $payment->result, ]; } } /** * 退款 * @param Object $order * @param string $orderRefundNo * @param string $type * @param integer $refundFee * @param $refund_account * @return array */ public static function orderRefund($order, $type, $refundFee, $orderRefundNo, $refund_account = null, $profit_share = 1) { if(in_array($order->pay_type, [Order::PAY_TYPE_ADAPAY_QUICKPAY_FRONTPAY, Order::PAY_TYPE_HUIFU_V2_JSPAY_WX])){ return AdapayV2::orderRefund($order, $type, $refundFee, $orderRefundNo, $refund_account, $profit_share); } if($profit_share){ $confirmList = self::paymentConfirmQueryList($order, 1); if($confirmList['code'] != 0){ return $confirmList; } if(!empty($confirmList['data']['payment_confirms'])){ return [ 'code' => 1, 'msg' => '已经分账,无法退款', ]; }else{ return self::paymentReverse($order, $refundFee); } } $adapay_payment_id = self::getOrderPaymentId($order); if($adapay_payment_id['code'] != 0){ return $adapay_payment_id; } $store_id = $order->store_id; self::initStoreAdapay($store_id); #初始化退款对象 $refund = new \AdaPaySdk\refund(); $refund_params = array( # 原交易支付对象ID "payment_id"=> $adapay_payment_id['data'], # 退款订单号 "refund_order_no"=> $orderRefundNo, # 退款金额 "refund_amt"=> sprintf("%.2f", $refundFee), # 退款描述 "reason"=> "退款", # 扩展域 "expend"=> "", # 设备静态信息 "device_info"=> "", 'notify_url' => pay_notify_url(self::$notify_url), ); # 发起退款 $refund->create($refund_params); # 对退款结果进行处理 # $refund->result 类型为数组 if ($refund->isError()){ //失败处理 debug_log([__METHOD__, __LINE__, $refund->result, $refund_params], __CLASS__ . '.log'); return [ 'code' => 1, 'msg' => '退款失败1,' . (isset($refund->result['error_msg']) ? $refund->result['error_msg'] : ''), 'res' => $refund->result, ]; } else { //成功处理 // var_dump($refund->result); } // 联合支付,退余额 if ($order->is_combine_pay == 1 && $order->combine_money > 0) { AccountLog::saveLog($order->user_id, $order->combine_money, AccountLog::TYPE_BALANCE, AccountLog::LOG_TYPE_INCOME, AccountLog::TYPE_PLATFORM_REFUND_ORDER, $order->id, "商城订单退款,订单号:{$order->order_no}"); } return [ 'code' => 0, 'msg' => 'success', 'data' => $refund->result, ]; } public static function shareToSelf($order) { $store_id = $order->store_id; $adapay_payment_id = self::getOrderPaymentId($order); if($adapay_payment_id['code'] != 0){ return $adapay_payment_id; } $adapay_payment_id = $adapay_payment_id['data']; $data = self::query($store_id, 1, 1, '', $adapay_payment_id); if($data['code'] != 0){ return $data; } if(!empty($data['data']['payments']) && ($data['data']['payments'][0]['status'] === 'failed')){ debug_log([__METHOD__, __LINE__, '支付失败,无需分账', $adapay_payment_id, $store_id], __CLASS__ . '.log'); return [ 'code' => 0, 'msg' => '支付失败,无需分账', ]; } $confirmList = self::paymentConfirmQueryList($order, 1); if($confirmList['code'] != 0){ return $confirmList; } $amount = $order->pay_price; if($confirmList['data']['payment_confirms']){ $amount -= $confirmList['data']['payment_confirms'][0]['confirmed_amt']; } if($amount <= 0){ return [ 'code' => 0, 'msg' => '分账已完结', ]; } $member_id = 0; $share = self::paymentConfirmCreate($order, $member_id, $amount); return $share; } public static function shareToStore($order, $receivers_share) { $store_id = $order['store_id']; $addRec = self::addReceiversStore($store_id, $receivers_share['to_store_id']); if($addRec['code'] != 0){ return $addRec; } $member_id = self::getMemberId(0, $receivers_share['to_store_id']); $amount = $receivers_share['amount']; return self::paymentConfirmCreate($order, $member_id, $amount); } public static function shareToSaas($order, $receivers_share) { $store_id = $order['store_id']; $addRec = self::addReceiversSaas($store_id); if($addRec['code'] != 0){ return $addRec; } $member_id = self::getMemberId(0, 0, 1); $amount = $receivers_share['amount']; return self::paymentConfirmCreate($order, $member_id, $amount); } public static function share($order, $receivers_share) { if($receivers_share['to_store_id']){ return self::shareToStore($order, $receivers_share); } if($receivers_share['type'] == 2 && empty($receivers_share['to_store_id'])){ return self::shareToSaas($order, $receivers_share); } $store_id = $order['store_id']; $addRec = self::addReceiversStoreUser($store_id, $receivers_share['user_id'], $receivers_share['saas_id']); if($addRec['code'] != 0){ return $addRec; } $member_id = self::getMemberId($receivers_share['user_id'], 0, 0, $receivers_share['saas_id']); $amount = $receivers_share['amount']; return self::paymentConfirmCreate($order, $member_id, $amount); } public static function addReceiversStoreUser($store_id, $user_id = 0, $saas_user_id = 0) { $memberCreate = self::memberCreate($store_id, $user_id, 0, 0, $saas_user_id); if($memberCreate['code'] != 0){ return $memberCreate; } return self::settleAccountCreate($store_id, $user_id, 0, 0, $saas_user_id); } public static function addReceiversStore($store_id, $m_store_id) { $memberCreate = self::memberCreate($store_id, 0, $m_store_id); if($memberCreate['code'] != 0){ return $memberCreate; } return self::settleAccountCreate($store_id, 0, $m_store_id); } public static function addReceiversSaas($store_id) { $memberCreate = self::memberCreate($store_id, 0, 0, 1); if($memberCreate['code'] != 0){ return $memberCreate; } return self::settleAccountCreate($store_id, 0, 0, 1); } public static function setReceiverStore($store_id, $data) { $v = Option::set(OptionSetting::ADAPAY_RECEIVER, json_encode(array_merge([self::getReceiverStore($store_id), $data])), $store_id, 'store'); return json_decode($v, true); } public static function setReceiverSaas($data) { $v = Option::set(OptionSetting::ADAPAY_RECEIVER, json_encode(array_merge([self::getReceiverSaas(), $data])), 0, 'saas'); return json_decode($v, true); } public static function getReceiverStore($store_id) { $v = Option::get(OptionSetting::ADAPAY_RECEIVER, $store_id, 'store', '{}')['value']; return json_decode($v, true); } public static function getReceiverSaas() { $v = Option::get(OptionSetting::ADAPAY_RECEIVER, 0, 'saas', '{}')['value']; return json_decode($v, true); } public static function getMemberId($user_id = 0, $m_store_id = 0, $is_saas = 0, $saas_user_id = 0) { if($user_id || $saas_user_id){ if($saas_user_id){ $member_id = $saas_user_id; }else{ $user = \app\models\User::findOne($user_id); $saas_user = SaasUser::findOne(['mobile' => $user->binding]); $member_id = $saas_user->id; } } if($m_store_id){ $member_id = 'store_id_' . $m_store_id; } if($is_saas){ $member_id = 'saas'; } return $member_id; } public static function memberCreate($store_id, $user_id = 0, $m_store_id = 0, $is_saas = 0, $saas_user_id = 0) { $member_id = self::getMemberId($user_id, $m_store_id, $is_saas, $saas_user_id); self::initStoreAdapay($store_id); $conf = self::conf($store_id); $app_id = $conf['app_id']; $member = new \AdaPaySdk\Member(); # 查询用户对象 $member->query(["app_id"=> $app_id, "member_id"=> $member_id]); # 对查询用户对象结果进行处理 if ($member->isError()){ //失败处理 } else { //成功处理 return [ 'code' => 0, 'msg' => 'success', 'data' => $member->result, ]; } $member_params = array( # app_id "app_id"=> $app_id, # 用户id "member_id"=> $member_id, ); # 创建 $member->create($member_params); # 对创建用户对象结果进行处理 if ($member->isError()){ //失败处理 debug_log([__METHOD__, __LINE__, $member->result, $member_params, $store_id], __CLASS__ . '.log'); return [ 'code' => 1, 'msg' => 'adapay创建用户对象失败1,' . (isset($member->result['error_msg']) ? $member->result['error_msg'] : ''), 'res' => $member->result, ]; } else { //成功处理 return [ 'code' => 0, 'msg' => 'success', 'data' => $member->result, ]; } } public static function setBankInfo($user_id = 0, $m_store_id = 0, $is_saas = 0, $saas_user_id = 0, $adapay_settle_account_id = '') { return self::getBankInfo($user_id, $m_store_id, $is_saas, $saas_user_id, $adapay_settle_account_id); } public static function getBankInfo($user_id = 0, $m_store_id = 0, $is_saas = 0, $saas_user_id = 0, $adapay_settle_account_id = '') { if($user_id || $saas_user_id){ $distributionInfo = SaasDistribution::findOne(['saas_id'=>$saas_user_id]); if($distributionInfo){ $bank = json_decode($distributionInfo->bank, true); if($adapay_settle_account_id){ $bank['adapay_settle_account_id'] = $adapay_settle_account_id; $distributionInfo->bank = json_encode($bank); return $distributionInfo->save(); } if($bank){ return [ 'code' => 0, 'data' => $bank, ]; } } if($saas_user_id){ $saas_user = SaasUser::findOne($saas_user_id); }else{ $user = \app\models\User::findOne($user_id); $saas_user = SaasUser::findOne(['mobile' => $user->binding]); } if (!empty($saas_user->withdraw_method)) { $decode = json_decode($saas_user->withdraw_method, true); if (is_array($decode)) { $cash_method = $decode; } } if($cash_method && in_array('bank_card', array_column($cash_method, 'type'))){ foreach ($cash_method as $i => $value) { if ($value['type'] == 'bank_card') { if($adapay_settle_account_id){ $cash_method[$i]['adapay_settle_account_id'] = $adapay_settle_account_id; $saas_user->withdraw_method = json_encode($cash_method); return $saas_user->save(); } $bank_card = $value; break; } } if($bank_card){ $data = [ "card_id" => $bank_card['account'], "card_name" => $bank_card['name'], "cert_id" => $bank_card['card_no'], "cert_type" => "00", "tel_no" => $saas_user->mobile, "bank_acct_type" => "2", ]; return [ 'code' => 0, 'data' => $data, ]; } } } if($m_store_id){ $bank_card = SaasForm::bankSetting(0, $m_store_id); if($bank_card){ if($adapay_settle_account_id){ return SaasForm::bankSettingSave(0, $m_store_id, ['adapay_settle_account_id' => $adapay_settle_account_id]); } return [ 'code' => 0, 'data' => $bank_card, ]; } } if($is_saas){ $bank_card = SaasForm::bankSetting(1); if($bank_card){ if($adapay_settle_account_id){ return SaasForm::bankSettingSave(1, 0, ['adapay_settle_account_id' => $adapay_settle_account_id]); } return [ 'code' => 0, 'data' => $bank_card, ]; } } debug_log([__METHOD__, __LINE__, '提现方式银行卡信息不存在'], __CLASS__ . '.log'); return [ 'code' => 1, 'msg' => '提现方式银行卡信息不存在', ]; } public static function settleAccountCreate($store_id, $user_id = 0, $m_store_id = 0, $is_saas = 0, $saas_user_id = 0) { $memberId = self::getMemberId($user_id, $m_store_id, $is_saas, $saas_user_id); self::initStoreAdapay($store_id); $conf = self::conf($store_id); $app_id = $conf['app_id']; $account = new \AdaPaySdk\SettleAccount(); $bank_card = self::getBankInfo($user_id, $m_store_id, $is_saas, $saas_user_id); if($bank_card['code'] != 0){ return $bank_card; } $account_params = array( "app_id"=> $app_id, "member_id"=> $memberId, "channel"=> "bank_account", "account_info"=> $bank_card['data'], ); $member = new \AdaPaySdk\Member(); $member->query(["app_id"=> $app_id, "member_id"=> $memberId]); # 对查询用户对象结果进行处理 if ($member->isError()){ //失败处理 debug_log([__METHOD__, __LINE__, $member->result], __CLASS__ . '.log'); return [ 'code' => 1, 'msg' => 'adapay用户对象不存在1,' . (isset($member->result['error_msg']) ? $member->result['error_msg'] : ''), 'res' => $member->result, ]; } else { //成功处理 if(!empty($member->result['settle_accounts'])){ foreach ($member->result['settle_accounts'] as $item){ if(self::sameData('card_id', $item['account_info']['card_id'], $account_params['account_info']['card_id'])){ return [ 'code' => 0, 'msg' => 'success1', 'data' => $item, ]; } } } } # 创建结算账户 $account->create($account_params); # 对创建结算账户结果进行处理 if ($account->isError()){ //失败处理 debug_log([__METHOD__, __LINE__, $account->result, $account_params], __CLASS__ . '.log'); return [ 'code' => 1, 'msg' => 'adapay创建结算账户失败1,' . (isset($account->result['error_msg']) ? $account->result['error_msg'] : ''), 'res' => $account->result, ]; } else { //成功处理 self::setBankInfo($user_id, $m_store_id, $is_saas, $saas_user_id, $account->result['id']); return [ 'code' => 0, 'msg' => 'success', 'data' => $account->result, ]; } } public static function sameData($type, $data1, $data2) { if($type == 'card_id'){ $fd = substr($data1, 0, 8) == substr($data2, 0, 8); $ed = substr($data1, -1) == substr($data2, -1); return $fd && $ed; } return false; } public static function getOrderPaymentId($order) { $payment_id = $order->adapay_payment_id; if(empty($payment_id)){ $payment_id = self::orderNo2Id($order->store_id, $order->order_no); if($payment_id['code'] == 0){ $payment_id = $payment_id['data']; }else{ return $payment_id; } } return [ 'code' => 0, 'data' => $payment_id, ]; } }