| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896 |
- <?php
- /**
- * 重庆赤晓店信息科技有限公司
- * https://www.chixiaodian.com
- * Copyright (c) 2023 赤店商城 All rights reserved.
- */
- namespace app\utils\Adapay;
- use app\models\Option;
- use app\constants\OptionSetting;
- use app\models\LevelOrder;
- use app\models\Order;
- use app\models\OrderUnion;
- use app\models\ReOrder;
- use app\models\SaasUser;
- use app\models\Store;
- use app\models\WechatConfig;
- use app\modules\client\models\v1\OpenidForm;
- use app\utils\DataTransform;
- use app\utils\OrderNo;
- use EasyWeChat\Kernel\Exceptions\Exception;
- use GuzzleHttp\Exception\GuzzleException;
- use yii\base\BaseObject;
- use function GuzzleHttp\Psr7\str;
- use app\models\DeliveryInfo;
- use app\models\AccountLog;
- use app\modules\admin\models\SaasForm;
- use app\models\SaasDistribution;
- include_once \Yii::$app->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,
- ];
- }
- }
|