| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639 |
- <?php
- namespace app\service;
- use app\common\logic\PayHandle;
- use app\common\model\ChannelFrozen;
- use app\common\model\Cpurl;
- use app\common\model\Members;
- use app\common\model\Game;
- use app\common\model\Pay as PayModel;
- use app\common\model\PayCpinfo;
- use app\common\model\MemberChannelGame;
- use app\common\logic\Pay as PayLogic;
- use app\common\model\Subaccount;
- use think\Config;
- use think\Db;
- use think\Exception;
- use app\common\model\App;
- class GamePayService_bak
- {
- protected $payRequestLimit = 5; //重复下单的限制时间
- /**
- * 游戏支付
- * @param $data
- */
- public function gamePay($data, $urlType = 1)
- {
- // ## 随机为新的支付渠道 ##
- $paytype = $data['paytype'];// 支付方式
- $pay_scene = $data['paytype'];
-
- if(!in_array($paytype, ['wx_h5', 'ali_h5', 'ali_app']) && $data['device'] != 4){
- if (version_compare($data['version'], config('pay_handle_version'), '>')) {
- $payType = [
- 'wx_h5' => ['qzl_wx_h5', 'ldys_wx_h5', 'ybzf_wxmp_h5', 'yyyb_wx_h5', 'xty_wx_h5', 'qmf_wxmp_h5'],
- 'ali_h5' => ['old-zfb-wap', 'ldys_zfb_h5', 'xty_ali_h5', 'yyyb_ali_h5'],
- 'ali_app' => ['zfb'],
- ];
- } else {
- $payType = [
- 'wx_h5' => ['qzl_wx_h5', 'ldys_wx_h5', 'ybzf_wxmp_h5', 'yyyb_wx_h5', 'xty_wx_h5', 'qmf_wxmp_h5'],
- 'ali_h5' => ['old-zfb-wap', 'xty_ali_h5'],
- 'ali_app' => [],
- ];
- }
- $newPayType = handlePayType($payType);
-
- if (in_array($data['paytype'], $newPayType['wx_h5'])) {
- $pay_scene = 'wx_h5';
- } else if (in_array($data['paytype'], $newPayType['ali_h5'])) {
- $pay_scene = 'ali_h5';
- } else if (in_array($data['paytype'], $newPayType['ali_app'])) {
- $pay_scene = 'ali_app';
- } else {
- // 不能这样判断,因为会有ptb
- // return ['code' => -111, 'msg' => '支付方式有误!', 'data' => []];
- }
- }
- // 新版本+支持的支付方式才会走获取随机支付,没有则走默认配置的
- if ((version_compare($data['version'], config('pay_handle_version'), '>') && $pay_scene) || (isInArrType($newPayType, $paytype) && $pay_scene)) {
- $newPayType = (new PayHandle())->getPayChannel($pay_scene, $data['gameid'], $data['version']);
- if (empty($newPayType['data']['paytype'])) {
- return ['data' => '', 'code' => -110, 'msg' => '支付配置有误!当前游戏或者版本未开启支付!'];
- }
- $paytype = $newPayType['data']['paytype'];
- if (substr($data['paytype'], 0, 4) == 'mix-') {
- $data['paytype'] = 'mix-' . $paytype;
- } else if (substr($data['paytype'], 0, 5) == 'coin-') {
- $data['paytype'] = 'coin-' . $paytype;
- } else {
- $data['paytype'] = $newPayType['data']['paytype'];
- }
- } else {
- // 老版支付使用指定
- $setPayType = model('common/Setting')->where(['name' => 'OLD_PAY_WX_TYPE'])->value('value');
- if ($setPayType) {
- if (strstr($data['paytype'], 'qmf_wxmp_h5') !== false) {
- $paytype = $setPayType;
- if ($data['paytype'] == 'qmf_wxmp_h5') {
- $data['paytype'] = $setPayType;
- } else if ($data['paytype'] == 'mix-qmf_wxmp_h5') {
- $data['paytype'] = 'mix-' . $setPayType;
- } else if ($data['paytype'] == 'coin-qmf_wxmp_h5') {
- $data['paytype'] = 'coin-' . $setPayType;
- }
- }
- }
- }
- // ## 随机为新的支付渠道 - END ##
- $time = NOW_TIMESTAMP;
- $data['orderid'] = $orderid = makeOrderid();
- $pay_status = 0; //cy_pay表的支付状态
- $cp_payflag = 0; //cy_paycpinfo表的支付状态
- $memberModel = new Members();
- $frozenModel = new ChannelFrozen();
- $cpurlModel = new Cpurl();
- $gameModel = new Game;
- $payModel = new PayModel;
- $payCpinfoModel = new PayCpinfo;
- $memberChannelGameModel = new MemberChannelGame;
- $payLogic = new PayLogic();
- //当前游戏的包是否禁止消费(非归属渠道)
- if (isFrozenOption($data['channel_id'], $data['gameid'], 'consume')) {
- return ['data' => '', 'code' => 0, 'msg' => '您所在渠道已经被禁止在此游戏消费'];
- }
- if (empty($data['ptb_amt']) && (substr($data['paytype'], 0, 4) == 'mix-' || $data['paytype'] == 'ptb')) {
- return ['code' => 0, 'msg' => '请输入专属币使用数量'];
- }
- if (empty($data['coin_amt']) && (substr($data['paytype'], 0, 5) == 'coin-' || $data['paytype'] == 'coinpay')) {
- return ['code' => 0, 'msg' => '请输入平台币使用数量'];
- }
- if (empty($data['coupon_member_id']) && $data['paytype'] == 'coupon') {
- return ['code' => 0, 'msg' => '请选择代金券'];
- }
- $memberInfo = $memberModel->field('id,username,amount')->where(['id' => $data['member_id']])->find();
- if (empty($memberInfo)) {
- return ['code' => 0, 'msg' => '用户不存在'];
- }
- //子账号用户名
- $subaccountData = (new Subaccount())->field(['sub_username', 'channel_id'])->where(['member_id' => $data['member_id'], 'game_id' => $data['gameid']])->find();
- $data['sub_username'] = $subaccountData['sub_username']??'';
- if (!$data['sub_username']) {
- return ['data' => '', 'code' => 0, 'msg' => '账号异常'];
- }
- //玩家在这款游戏的归属渠道
- $data['channel_id'] = $subaccountData['channel_id']??'';
- // $channel_id = $memberChannelGameModel->where(['member_id' => $data['member_id'], 'game_id' => $data['gameid']])->value('channel_id');
- if (empty($data['channel_id'])) {
- return ['data' => '', 'code' => 0, 'msg' => '无关联的归属渠道信息'];
- }
- // $data['channel_id'] = $channel_id;
- //判断渠道包是否合法
- $channelInfo = model('Channel')->where(['status' => 1, 'id' => $data['channel_id']])->find();
- if (!$channelInfo && intval($data['channel_id']) <> config('EMPTY_CHANNEL_ID')) {
- return ['data' => '', 'code' => 0, 'msg' => '当前渠道已禁用'];
- } else if ($channelInfo['level'] <> 3) {
- return ['data' => '', 'code' => 0, 'msg' => '非推广员渠道,不能进行推广,请联系客服'];
- }
- //当前游戏的渠道是否禁止消费(非归属渠道)
- if (isFrozenOption($data['channel_id'], $data['gameid'], 'consume')) {
- return ['data' => '', 'code' => 0, 'msg' => '您所在渠道已经被禁止在此游戏消费'];
- }
- $appModel = new App();
- if (!isset($data['appInfo'])) {
- $data['appInfo'] = $appModel->field('id,appkey,client_appkey,gameid')->where(['gameid' => $data['gameid']])->find()->toArray();
- }
- //充值回调地址
- if ($urlType == 1) {
- $cpurl = $cpurlModel->where(['appid' => $data['appInfo']['id']])->value('url');
- } else {
- $cpurl = $cpurlModel->where(['appid' => $data['appInfo']['id']])->value('web_url');
- if (!$gameServerInfo = model('GameServer')->field('serverid,servername')->where(['game_id' => $data['gameid'], 'serverid' => $data['serverid']])->find()) {
- return ['data' => '', 'code' => 0, 'msg' => '游戏区服id参数错误'];
- }
- $data['servername'] = $gameServerInfo['servername'];
- if (!$memberGameServerInfo = model('MemberGameServer')->where(['member_id' => $data['member_id'], 'game_id' => $data['gameid'], 'serverid' => $data['serverid'], 'roleid' => $data['roleid']])->find()) {
- return ['data' => '', 'code' => 0, 'msg' => '游戏角色信息不存在'];
- }
- $data['rolename'] = $memberGameServerInfo['rolename'];
- $data['rolelevel'] = $memberGameServerInfo['rolelevel'];
- }
- if (empty($cpurl)) {
- return ['data' => '', 'code' => 0, 'msg' => '没有回调地址,请通知我方配置'];
- }
- //游戏信息
- $gameInfo = $gameModel->field('order_recheck,is_pay')->where(['id' => $data['gameid']])->find();
- if (empty($gameInfo)) {
- return ['data' => '', 'code' => 0, 'msg' => '游戏id参数错误'];
- }
- if ($gameInfo['is_pay'] != 1) {
- return ['data' => '', 'code' => 0, 'msg' => '游戏已停止充值'];
- }
- if ($data['amount'] > 100000) {
- return ['data' => '', 'code' => 0, 'msg' => '您的充值金额过大,请确认是否为合法充值'];
- }
- $data['discount'] = $discount = getDiscount($data['member_id'], $data['gameid'], $data['channel_id']); // 折扣比例
- if ($data['ptb_amt'] > 0 && $data['coin_amt'] > 0) {
- return ['data' => '', 'code' => 0, 'msg' => '平台币和专属币不能同时使用'];
- }
- $data['coupon_amount'] = 0;
- $amount = $data['amount'];
- //代金券使用
- if ($data['coupon_member_id'] > 0) {
- $list = model('common/CouponMember')->getPayCoupon($data['member_id'], $data['gameid'], $data['amount'], $data['coupon_member_id']);
- if (count($list) != 1) {
- return ['data' => '', 'code' => 0, 'msg' => '代金券不存在'];
- }
- if ($list[0]['is_pay'] != 1) {
- return ['data' => '', 'code' => 0, 'msg' => '代金券不可使用'];
- }
- if ($list[0]['money'] > $data['amount']) {
- if ($data['paytype'] != 'coupon') {
- return ['data' => '', 'code' => 0, 'msg' => '支付类型错误'];
- }
- $data['coupon_amount'] = $data['amount'];
- $amount = 0;
- } else {
- $data['coupon_amount'] = $list[0]['money'];
- $amount = priceFormat($data['amount'] - $data['coupon_amount']);
- }
- }
- //有使用专属币时
- if (!empty($data['ptb_amt'])) {
- if ($data['ptb_amt'] > $amount) {
- return ['data' => '', 'code' => 0, 'msg' => '游戏专属币支付金额选择异常,平台币使用金额大于总金额'];
- }
- $userCoinInfo = model('MemberZscoin')->field('id,userid,username,game_id,amount,status')->where(['userid' => $data['member_id'], 'game_id' => $data['gameid']])->find();
- if (empty($userCoinInfo)) {
- return ['data' => '', 'code' => 0, 'msg' => '您的游戏专属币余额不足'];
- } else if (!$userCoinInfo['status']) {
- return ['data' => '', 'code' => 0, 'msg' => '您的游戏专属币账户已被冻结,不能使用'];
- } else if ($userCoinInfo['amount'] < $data['ptb_amt']) {
- return ['data' => '', 'code' => 0, 'msg' => '您的游戏专属币余额不足'];
- }
- $arrPayAmount = $payLogic->calPayAmount($amount, $data['ptb_amt'],$discount);
- } else if (!empty($data['coin_amt'])) { //有使用平台币时
- if ($data['coin_amt'] > $amount) {
- return ['data' => '', 'code' => 0, 'msg' => '游戏平台币支付金额选择异常,平台币使用金额大于总金额'];
- }
- if ($memberInfo['amount'] < $data['coin_amt']) {
- return ['data' => '', 'code' => 0, 'msg' => '您的游戏平台币余额不足'];
- }
- $arrPayAmount = $payLogic->calCoinPayAmount($amount, $data['coin_amt'],$discount);
- } else{
- $arrPayAmount = $payLogic->calPayAmount($amount,0,$discount);
- }
- // // 全民付 替换其他支付
- // if (strstr($data['paytype'], 'qmf_wxmp_h5')) {
- // if ($data['paytype'] == 'qmf_wxmp_h5') {
- // $data['paytype'] = 'yyyb_wx_h5';
- // } else if ($data['paytype'] == 'mix-qmf_wxmp_h5') {
- // $data['paytype'] = 'mix-yyyb_wx_h5';
- // } else if ($data['paytype'] == 'coin-qmf_wxmp_h5') {
- // $data['paytype'] = 'coin-yyyb_wx_h5';
- // }
- // }
- // // ## 支付方式适配 -- 未使用
- // if (strstr($data['paytype'], 'pay_h5_001')) { // 备用支付 - 001
- // if ($data['paytype'] == 'pay_h5_001') {
- // $data['paytype'] = 'test';
- // } else if($data['paytype'] == 'mix-pay_h5_001'){
- // $data['paytype'] = 'mix-test';
- // } else if($data['paytype'] == 'coin-pay_h5_001'){
- // $data['paytype'] = 'coin-test';
- // }
- // }
- // if (strstr($data['paytype'], 'pay_h5_002')) { // 备用支付 - 002
- // if ($data['paytype'] == 'pay_h5_002') {
- // $data['paytype'] = 'test';
- // } else if($data['paytype'] == 'mix-pay_h5_002'){
- // $data['paytype'] = 'mix-test';
- // } else if($data['paytype'] == 'coin-pay_h5_002'){
- // $data['paytype'] = 'coin-test';
- // }
- // }
- //实际支付金额为0时
- if ($arrPayAmount['real_amount'] == 0) {
- $pay_status = 1; //支付成功
- $cp_payflag = 1;
- //付款时间
- $payData['pay_time'] = NOW_TIMESTAMP;
- } elseif ($arrPayAmount['real_amount'] > 0 && $data['paytype'] == 'ptb') {//有实际支付金额并且支付方式是平台币时
- return ['data' => '', 'code' => 0, 'msg' => '平台币余额不足,请使用混合支付'];
- } elseif ($arrPayAmount['real_amount'] > 0 && $arrPayAmount['real_ptb'] > 0 && substr($data['paytype'], 0, 4) <> 'mix-') {
- return ['data' => '', 'code' => 0, 'msg' => '请选择正确的支付方式.'];
- } //有实际支付金额并且支付方式是平台币时
- elseif ($arrPayAmount['real_amount'] > 0 && $data['paytype'] == 'coinPay') {
- return ['data' => '', 'code' => 0, 'msg' => '平台币余额不足,请使用混合支付'];
- } elseif ($arrPayAmount['real_amount'] > 0 && $arrPayAmount['real_coin'] > 0 && substr($data['paytype'], 0, 5) <> 'coin-') {
- return ['data' => '', 'code' => 0, 'msg' => '请选择正确的支付方式..'];
- }
- //指定时间内,禁止重复下单
- if (!requestDuplicateCheck('pay_duplicate_' . $data['member_id'] . '_' . $data['gameid'], $this->payRequestLimit)) {
- return ['data' => '', 'code' => 0, 'msg' => '充值请求过多,请于' . $this->payRequestLimit . 's以后,再次进行充值操作'];
- }
- //订单已重复
- if ($payModel->where(['attach' => $data['attach'], 'gameid' => $data['gameid']])->find()) {
- //解锁
- requestDuplicateCheckUnlock('pay_duplicate_' . $data['member_id'] . '_' . $data['gameid']);
- return ['data' => '', 'code' => 0, 'msg' => '游戏合作方的订单参数不能重复'];
- }
- //游戏防沉迷限制
- $authentication = (new CommonService())->authentication($data['member_id'], $data['gameid'], $data['amount']);
- if ($authentication['code'] == 0) {
- return $authentication;
- }
- //海外支付添加比例
- if (in_array($data['paytype'], ['airwallexh5', 'airwallex', 'coin-airwallexh5', 'coin-airwallex'])) {
- $airPaytype = $data['paytype'];
- if ($data['paytype'] == 'coin-airwallexh5') {
- $airPaytype = 'airwallexh5';
- } elseif ($data['paytype'] == 'coin-airwallex') {
- $airPaytype = 'airwallex';
- }
- $paytypeInfo = model('common/PayType')->where('paytype', $airPaytype)->find();
- $arrPayAmount['real_amount'] = priceFormat($arrPayAmount['real_amount'] * (1 + $paytypeInfo['commission']));
- }
- //订单参数
- $payData = $this->orderData($data, $arrPayAmount, $memberInfo, $gameInfo, $pay_status);
- try {
- // 启动事务
- Db::startTrans();
- $id = $payModel->insertGetId($payData);
- //如果是自己聚合自己时,支付回调地址固定
- if (mb_substr($data['attach'], 0, 8, 'UTF-8') == 'xkhyn###') {
- $cpurl = Config::get('self_complex_callback_url');
- $attach = str_replace("xkhyn###", "", $data['attach']); //聚合的订单编号,去掉[aoyou###]前缀
- } else {
- $attach = $data['attach'];
- }
- //给Cp的用户名用子账号名
- $paycp_username = (!empty($data['sub_username']) ? $data['sub_username'] : $memberInfo['username']);
- $str = "orderid=" . urlencode($orderid) . "&username=" . urlencode($paycp_username) . "&gameid=" . $data['gameid'] . "&roleid=" . urlencode($data['roleid']) . "&serverid=" . urlencode($data['serverid']) . "&paytype=" . urlencode($data['paytype']) . "&amount=" . $data['amount'] . "&paytime=" . $time . "&attach=" . urlencode($attach);
- $param = $str . "&appkey=" . urlencode($data['appInfo']['appkey']);
- $md5params = md5($param);
- $params = $str . "&sign=" . urlencode($md5params);
- // 订单通知游戏数据
- // log_message('order_id: ' . $orderid .' - URL: '. $cpurl ." - sign_data: ".$param. " - md5: ". $md5params, 'log', LOG_PATH . 'notify_msg/');
- trace('CP_SIGN - order_id: ' . $orderid .' - URL: '. $cpurl ." - sign_data: ".$param. " - md5: ". $md5params, 'GamePayService@gamePay.cp_notify_body');
- $paycpData['orderid'] = $orderid;
- $paycpData['fcallbackurl'] = $cpurl;
- $paycpData['params'] = $params;
- $paycpData['create_time'] = $time;
- $paycpData['payflag'] = $cp_payflag;
- //写入cy_paycpinfo表数据
- $payCpinfoModel->insert($paycpData);
- //代金券状态修改
- if ($payData['coupon_amount'] > 0) {
- if(!$payLogic->saveCouponData($payData)){
- return ['data' => '', 'code' => 0, 'msg' => '代金券使用失败'];
- }
- }
- //如果使用了专属币
- if ($arrPayAmount['real_ptb'] > 0) {
- $payLogic->saveCoinData($userCoinInfo, $payData);
- } else if ($arrPayAmount['real_coin'] > 0) {
- if (!$payLogic->saveCoinPayData($memberInfo, $payData)) {
- return ['data' => '', 'code' => 0, 'msg' => '金额异常.'];
- }
- }else if($payData['paytype'] == 'coupon'){
- //纯代金券支付
- }else {
- // $arrPayAmount = $payLogic->calPayAmount($payData['amount']);
- if ($arrPayAmount['real_amount'] <= 0) {
- return ['data' => '', 'code' => 0, 'msg' => '金额异常..'];
- }
- }
- $real_amount = $arrPayAmount['real_amount'];
- //全部平台币支付,并且支付成功时
- if ($pay_status) {
- //更新member表的total_pay_amount
- $memberModel->where(['id' => $data['member_id']])->update(['total_pay_amount' => Db::raw('total_pay_amount+' . $data['amount']), 'update_time' => time()]);
- }
- // 提交事务
- Db::commit();
- } catch (Exception $e) {
- // 回滚事务
- Db::rollback();
- return ['data' => '', 'code' => 0, 'msg' => '订单生成失败: ' . $e->getMessage()];
- }
- try {
- //第三方支付用的商品简单描述 (去除&+等特殊字符)
- $payBody = preg_replace("/[\&\+]+/", '', $data['productname']);
- $pay = new PayService();
- $payData['real_amount'] = $real_amount;
- // dump($payData);
- $payInfoRes = [];
- if (in_array($data['paytype'], ['zfb', 'coin-zfb', 'mix-zfb', 'coin-mix-zfb'])) { // 支付宝-app
- $notify_url = Config::get('ali_pay_config')['notify_url'];
- $payInfoRes = $pay->getAlipayAopParam($orderid, $real_amount, $payBody, '', $notify_url);
- } elseif (in_array($data['paytype'], ['old-zfb-wap', 'coin-old-zfb-wap', 'mix-old-zfb-wap', 'coin-mix-old-zfb-wap'])) { // 支付宝-h5
- $notify_url = Config::get('ali_pay_config')['notify_url'];
- $payInfoRes = $pay->getAlipayWapPostAopParam($orderid, $real_amount, $payBody, '', $notify_url);
- } elseif (in_array($data['paytype'], ['wxpay-h5', 'coin-wxpay-h5', 'wx-wap', 'coin-wx-wap'])) { // 微信-h5
- if ($real_amount > 3000) {
- requestDuplicateCheckUnlock('pay_duplicate_' . $data['member_id'] . '_' . $data['gameid']);
- return ['data' => '', 'code' => 0, 'msg' => '微信单笔支付限额3000元,您可选择其它支付'];
- }
- $notify_url = Config::get('wxpay-h5')['notify_url'];
- $payInfoRes = $pay->getWxpayH5Param($orderid, $real_amount, $payBody, $data['ip'], $notify_url, $data['gameid']);
- } elseif (in_array($data['paytype'], ['ybzf_wxmp_h5', 'coin-ybzf_wxmp_h5', 'mix-ybzf_wxmp_h5'])) { // 易宝wxmp-h5
- $notify_url = Config::get('ybzf_pay')['notify_url'];
- $payInfoRes = $pay->getYbzfParam($data['paytype'], $orderid, $real_amount, $payBody, $notify_url);
- } elseif (in_array($data['paytype'], ['ldys_zfb_h5', 'coin-ldys_zfb_h5', 'mix-ldys_zfb_h5', 'ldys_wx_h5', 'coin-ldys_wx_h5', 'mix-ldys_wx_h5'])) { // 联动优势
- $payType = 'payZfbH5';
- if (in_array($data['paytype'], ['ldys_wx_h5', 'coin-ldys_wx_h5', 'mix-ldys_wx_h5'])) {
- $payType = 'payWxmpH5V2';
- }
- $payData['is_coin'] = 0;
- $payInfoRes = $pay->getldysParam($payData, $payType);
- } elseif (in_array($data['paytype'], ['qzl_wx_h5', 'coin-qzl_wx_h5', 'mix-qzl_wx_h5'])) { // 趣智连支付-H5
- $payData['notify_url'] = Config::get('qzl_pay')['notify_url'];
- $payInfoRes = $pay->getqzlParam($payData, 'payWxH5');
- } elseif (in_array($data['paytype'], ['yyyb_wx_h5', 'coin-yyyb_wx_h5', 'mix-yyyb_wx_h5', 'yyyb_ali_h5', 'coin-yyyb_ali_h5', 'mix-yyyb_ali_h5'])) { // 优亿支付-H5
- $payData['notify_url'] = Config::get('yyyb_pay')['notify_url'];
- $payType = 'WX_H5';
- if (in_array($data['paytype'], ['yyyb_ali_h5', 'coin-yyyb_ali_h5', 'mix-yyyb_ali_h5'])) {
- $payType = 'ALI_H5';
- }
- $payInfoRes = $pay->getYyYbPayParam($payData, $payType);
- } elseif (in_array($data['paytype'], ['xty_wx_h5', 'coin-xty_wx_h5', 'mix-xty_wx_h5', 'xty_ali_h5', 'coin-xty_ali_h5', 'mix-xty_ali_h5'])) { // 喜钛游支付-H5
- $payData['notify_url'] = Config::get('xty_pay')['notify']['notify_url'];
- $payType = 'payWxH5';
- if (in_array($data['paytype'], ['xty_ali_h5', 'coin-xty_ali_h5', 'mix-xty_ali_h5'])) {
- $payType = 'payAliH5';
- }
- $payInfoRes = $pay->getXtyPayParam($payData, $payType);
- } elseif (in_array($data['paytype'], ['test', 'coin-test', 'mix-test'])) {
- return ['data' => '', 'code' => 0, 'msg' => "当前支付方式开发中..."];
- }
- if($data['device'] == 4){
-
- }
- // TODO: 新加支付方式时,这块判断要加上支付方式的返回判断。
- if ($payInfoRes && $data['paytype'] != 'coinpay') {
- if ($payInfoRes['error'] == true) {
- trace("支付方式下单失败 - {$data['paytype']}: " . json_encode($payInfoRes), 'GamePayService@gamePay.$payInfoRes');
- ddMsg("warning", '', ['支付方式-' . $data['paytype'], $payInfoRes['msg'], json_encode(['orderid' => $orderid, 'username' => $paycp_username, 'gameid' => $data['gameid']], JSON_UNESCAPED_UNICODE)]);
- return ['data' => '', 'code' => 0, 'msg' => "发起下单失败!(" . $data['paytype'] . ")"];
- }
- if (in_array($data['paytype'], ['zfb', 'coin-zfb', 'mix-zfb', 'coin-mix-zfb'])) {
- $result = ['alipay_app_param' => $payInfoRes['data'], 'wxpayh5_param' => ['mweb_url' => '']];
- } elseif (in_array($data['paytype'], [
- 'old-zfb-wap', 'coin-old-zfb-wap', 'mix-old-zfb-wap', 'coin-mix-old-zfb-wap',
- 'ldys_zfb_h5', 'coin-ldys_zfb_h5', 'mix-ldys_zfb_h5',
- 'yyyb_ali_h5', 'coin-yyyb_ali_h5', 'mix-yyyb_ali_h5',
- 'xty_ali_h5', 'coin-xty_ali_h5', 'mix-xty_ali_h5',
- ])) {
- $result = ['alipay_param' => $payInfoRes['data']];
- } elseif (in_array($data['paytype'], [
- 'wxpay-h5', 'coin-wxpay-h5',
- 'wx-wap', 'coin-wx-wap',
- 'qzl_wx_h5', 'coin-qzl_wx_h5', 'mix-qzl_wx_h5',
- 'qmf_wxmp_h5', 'coin-qmf_wxmp_h5', 'mix-qmf_wxmp_h5',
- 'ybzf_wxmp_h5', 'coin-ybzf_wxmp_h5', 'mix-ybzf_wxmp_h5',
- 'ldys_wx_h5', 'coin-ldys_wx_h5', 'mix-ldys_wx_h5',
- 'yyyb_wx_h5', 'coin-yyyb_wx_h5', 'mix-yyyb_wx_h5',
- 'xty_wx_h5', 'coin-xty_wx_h5', 'mix-xty_wx_h5'
- ])) {
- $result = ['wxpayh5_param' => $payInfoRes['data']];
- } else {
- return ['data' => '', 'code' => 0, 'msg' => '支付渠道未配置返回类型!'];
- }
- }
- // TODO: 有使用时,在开启
- // if ($data['paytype'] == 'zfb-h5') {
- // // 支付宝H5支付
- // $notify_url = Config::get('alipayAop')['notify_url'];
- // $alipayParam = $pay->getAlipayWapAopParam($orderid, $real_amount, $payBody, '', $notify_url);
- // $result = ['alipay_param' => $alipayParam];
- //
- // } elseif ($data['paytype'] == 'zfb-wap' || $data['paytype'] == 'mix-zfb-wap' || $data['paytype'] == 'coin-zfb-wap') {
- // // 支付宝WAP
- // $notify_url = Config::get('alipayAop')['notify_url'];
- // $alipayParam = $pay->getAlipayWapPostAopParam($orderid, $real_amount, $payBody, '', $notify_url);
- // $result = ['alipay_param' => $alipayParam];
- //
- // } elseif ($data['paytype'] == 'wx-wap' || $data['paytype'] == 'mix-wx-wap' || $data['paytype'] == 'coin-wx-wap') {
- // // 微信汇付宝支付参数
- // $notify_url = Config::get('wxwappay-h5')['notify_url'];
- // $wxParam = $pay->getWxWapPostAopParam($orderid, $real_amount, $payBody, '', $data['ip'], $notify_url);
- // $result = ['wxpayh5_param' => $wxParam];
- //
- // } elseif ($data['paytype'] == 'wxsmzf' || $data['paytype'] == 'mix-wxsmzf' || $data['paytype'] == 'coin-wxsmzf') {
- // // 微信汇付宝扫码支付参数
- // $notify_url = Config::get('wxwappay-h5')['notify_url'];
- // $wxsmParam = $pay->getWxWapsmPostAopParam($orderid, $real_amount, $payBody, '', $data['ip'], $notify_url);
- // $result = ['wxpaysm_param' => $wxsmParam];
- //
- // } elseif ($data['paytype'] == 'kdh5' || $data['paytype'] == 'mix-kdh5' || $data['paytype'] == 'coin-kdh5') {
- // $notify_url = Config::get('kdh5')['notify_url'];
- // $kdh5_param = $pay->getkdh5weixinParam($orderid, $real_amount, $payBody, $notify_url);
- // $result = ['kdh5_param' => $kdh5_param];
- //
- // } elseif ($payData['paytype'] == 'kdsm' || $data['paytype'] == 'mix-kdsm' || $data['paytype'] == 'coin-kdsm') {
- // // 微信扫码 酷点扫码
- // $notify_url = Config::get('kdh5')['notify_url'];
- // if (!$kdsm_param = $pay->getkdsmweixinParam($payData['orderid'], $real_amount, $payBody, $notify_url)) {
- // return ['code' => 0, 'msg' => '订单生成失败'];
- // }
- // $dataPay = [
- // 'id' => $id,
- // 'orderid' => $payData['orderid'],
- // 'kdsm_param' => $kdsm_param,
- // 'real_amount' => priceFormat($real_amount),
- // 'create_time' => date('Y-m-d', $payData['create_time']),
- // 'goods' => $data['productname'],
- // ];
- // $pay_url = Config::get('kdh5')['pay_url'] . '?data=' . opensslEncrypt(json_encode($dataPay));
- // $result = ['kdsm_param' => ['mweb_url' => $pay_url]];
- //
- // } elseif ($data['paytype'] == 'zfbsmzf' || $data['paytype'] == 'mix-zfbsmzf' || $data['paytype'] == 'coin-zfbsmzf') {
- // // 支付宝扫码支付
- // $notify_url = Config::get('alipayAop')['notify_url'];
- // $qrcodePay = $pay->chargeByZfbWap($orderid, $real_amount, $payBody, '', $notify_url);
- // $result1['mweb_url'] = $qrcodePay;
- // $result['zfbsmzf_param'] = $result1;
- // $result['orderid'] = $orderid;
- // $result['referer'] = "com.yiyou.zfb";
- //
- // } elseif ($data['paytype'] == 'xzzfbzf' || $data['paytype'] == 'mix-xzzfbzf' || $data['paytype'] == 'coin-xzzfbzf') {
- // // 第三方现金支付 支付宝
- // $notify_url = Config::get('h5_alipay_config')['notify_url'];
- // $urlPays = $pay->chargeByxzzfbzf($orderid, $real_amount, $payBody, '', $notify_url);
- // $result['xzzfbzf_param'] = $urlPays;
- //
- // } elseif ($data['paytype'] == 'airwallex' || $data['paytype'] == 'mix-airwallex' || $data['paytype'] == 'coin-airwallex') {
- // Cache::set('memberCoin:real_amount:' . $orderid, $payData['real_amount'], 60 * 60);
- // $pay_url = WEBSITE_DOMAIN . '/pay/airwallex.html?orderid=' . $orderid . '&goods=' . urlencode($payBody) . '&urltype=3';
- // $result = ['airwallex_param' => ['mweb_url' => $pay_url], 'referer' => ''];
- // } elseif ($data['paytype'] == 'airwallexh5' || $data['paytype'] == 'mix-airwallexh5' || $data['paytype'] == 'coin-airwallexh5') {
- // Cache::set('memberCoin:real_amount:' . $orderid, $payData['real_amount'], 60 * 60);
- // $pay_url = MOBILE_SITE_DOMAIN . '/coin_airwallex/airwallex.html?orderid=' . $orderid . '&goods=' . urlencode($payBody) . '&urltype=3';
- // $result = ['airwallexh5_param' => ['mweb_url' => $pay_url], 'referer' => ''];
- //
- // } elseif ($data['paytype'] == 'qmf-zfb-h5') {
- // // 全民付H5
- // $notify_url = Config::get('qmf_pay')['notify_url'];
- // $alipayParam = $pay->getQmfWapH5Param($data['paytype'], $orderid, $real_amount, $payBody, $notify_url);
- // $result = ['mweb_url' => $alipayParam];
- // }
- requestDuplicateCheckUnlock('pay_duplicate_' . $data['member_id'] . '_' . $data['gameid']);
- } catch (Exception $e) {
- // 回滚事务
- // Db::rollback();
- return ['data' => '', 'code' => 0, 'msg' => '订单生成失败.:' . $e->getMessage()];
- }
- $result['pay_status'] = $pay_status; //支付状态
- $result['orderid'] = $orderid;
- $result['channel_id'] = $data['channel_id'];
- $result['paytype'] = $paytype;
- return ['data' => $result, 'code' => 1, 'msg' => '订单生成成功'];
- }
- /**
- * 订单参数
- * @param $data
- * @param $arrPayAmount
- * @param $memberInfo
- * @param $gameInfo
- */
- public function orderData($data, $arrPayAmount, $memberInfo, $gameInfo, $pay_status)
- {
- if ($arrPayAmount['real_amount'] > 0) {
- $real_amount = $arrPayAmount['real_amount'];
- } else {
- $real_amount = 0;
- }
- $payData['orderid'] = $data['orderid'];
- $payData['discount'] = $data['discount'] ?: 1;
- $payData['amount'] = $data['amount'];
- $payData['real_amount'] = $real_amount;
- $payData['real_ptb'] = $arrPayAmount['real_ptb'] ?: 0;
- $payData['real_coin'] = $arrPayAmount['real_coin'] ?: 0;
- $payData['coupon_amount'] = $data['coupon_amount'];
- // $payData['real_ptb_amount'] = $arrPayAmount['real_ptb_amount'];
- $payData['userid'] = $data['member_id'];
- $payData['username'] = $memberInfo['username'];
- $payData['roleid'] = $data['roleid'];
- $payData['rolename'] = $data['rolename'];
- $payData['rolelevel'] = $data['rolelevel'];
- $payData['paytype'] = $data['paytype'];
- $payData['productname'] = $data['productname'];
- $payData['serverid'] = $data['serverid'];
- $payData['servername'] = $data['servername'];
- $payData['gameid'] = $data['gameid'];
- $payData['status'] = $pay_status;
- $payData['ip'] = $data['ip'];
- $payData['imeil'] = $data['imeil'];
- $payData['create_time'] = NOW_TIMESTAMP;
- $payData['channel_id'] = $data['channel_id'];
- $payData['recheck_status'] = $gameInfo['order_recheck'];
- $payData['attach'] = $data['attach'];
- $payData['coupon_member_id'] = $data['coupon_member_id'];
- $payData['pay_amount'] = $data['amount'];
- if($payData['discount'] > 0 && $payData['discount'] < 1){
- $payData['pay_amount'] = number_format($data['amount'] * $payData['discount'], 2);
- }
- return $payData;
- }
- }
|