| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291 |
- <?php
- namespace app\service;
- use app\common\logic\PayHandle;
- use app\common\model\MemberCoinPay;
- use think\Config;
- use think\Db;
- class MemberCoinService_bak
- {
- protected $payRequestLimit = 5; //重复下单的限制时间
- /**
- * 充值平台币
- */
- public function payCoin($data)
- {
- // 转换支付标识为指定的标识
- // if ($data['paytype'] == 'qmf_wxmp_h5') {
- // $data['paytype'] = 'yyyb_wx_h5';
- // }
- // if ($data['paytype'] == 'pay_h5_001') { // 备用支付 - 001
- // $data['paytype'] = 'test';
- // }
- // if ($data['paytype'] == 'pay_h5_002') { // 备用支付 - 001
- // $data['paytype'] = 'test';
- // }
- // ## 随机为新的支付渠道 ##
- 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' => [],
- 'ali_app' => [],
- ];
- }
- $pay_scene = '';
- if (in_array($data['paytype'], $payType['wx_h5'])) {
- $pay_scene = 'wx_h5';
- } else if (in_array($data['paytype'], $payType['ali_h5'])) {
- $pay_scene = 'ali_h5';
- } else if (in_array($data['paytype'], $payType['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($payType, $data['paytype']) && $pay_scene)) {
- $newPayType = (new PayHandle())->getPayChannel($pay_scene, $data['gameid'], $data['version']);
- if (empty($newPayType['data']['paytype'])) {
- return ['data' => '', 'code' => -110, 'msg' => '支付配置有误!当前游戏或者版本未开启支付!'];
- }
- $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)
- {
- if ($data['paytype'] == 'qmf_wxmp_h5') {
- $data['paytype'] = $setPayType;
- }
- }
- }
- }
- // ## 随机为新的支付渠道 - END ##
- $payData['userid'] = $data['member_id'];
- $payData['orderid'] = makeOrderid('COIN');
- $payData['amount'] = $data['amount'];
- if (in_array($data['paytype'], ['airwallexh5', 'airwallex'])) {
- $paytypeInfo = model('common/PayType')->where('paytype', $data['paytype'])->find();
- $payData['real_amount'] = priceFormat($data['amount'] * (1 + $paytypeInfo['commission']));
- } else {
- $payData['real_amount'] = $data['amount'];
- }
- $payData['paytype'] = $data['paytype'];
- $payData['ip'] = $data['ip'];
- $payData['create_time'] = NOW_TIMESTAMP;
- $payData['place_user_id'] = $data['place_user_id'];
- // 启动事务
- Db::startTrans();
- try {
- //指定时间内,禁止重复下单
- $cacheKey = 'pay_duplicate_' . $payData['userid'] . '_' . 'coin';
- if (!requestDuplicateCheck($cacheKey, $this->payRequestLimit)) {
- return ['code' => 0, 'msg' => '充值请求过多,请于' . $this->payRequestLimit . 's以后,再次进行充值操作'];
- }
- if (!$id = (new MemberCoinPay())->insertGetId($payData)) {
- // 回滚事务
- Db::rollback();
- return ['code' => 0, 'msg' => '订单生成失败1'];
- }
- // 提交事务
- Db::commit();
- } catch (\Exception $e) {
- // 回滚事务
- Db::rollback();
- return ['code' => 0, 'msg' => '订单生成失败' . $e->getMessage()];
- }
-
- /**
- * 微信支付:
- * 可用:'qzl_wx_h5', 'ybzf_wxmp_h5', 'yyyb_wx_h5', 'xty_wx_h5'
- * 不可用:'ldys_wx_h5'
- *
- * 支付宝:
- * 可用:'xty_ali_h5', 'yyyb_ali_h5'
- * 不可用:'old-zfb-wap', 'ldys_zfb_h5'
- */
- try {
- //支付方式是支付宝扫码
- $payBody = '平台币';
- $pay = new PayService();
- $payData['productname'] = $payBody;
- $payData['pay_amount'] = $payData['amount'];
- $payData['gameid'] = $data['gameid'];
- $payInfoRes = [];
- if ($data['paytype'] == 'zfb') { // 支付宝-app 扫码(官方支付宝快捷支付)
- $notify_url = Config::get('ali_pay_config')['notify_coin_url'];
- $payInfoRes = $pay->getAlipayAopParam($payData['orderid'], $payData['amount'], $payBody, '', $notify_url);
- } elseif (in_array($data['paytype'], ['zfb-wap', 'old-zfb-wap'])) { //支付宝-h5(官方支付宝h5支付)带referer
- $notify_url = Config::get('ali_pay_config')['notify_coin_url'];
- $payInfoRes = $pay->getAlipayWapPostAopParam($payData['orderid'], $payData['amount'], $payBody, '', $notify_url);
- } elseif (in_array($data['paytype'], ['wxpay-h5', 'wx-wap'])) { // 微信-h5
- if ($payData['amount'] > 3000) {
- return ['code' => 0, 'msg' => '微信单笔支付限额3000元,您可选择其它支付'];
- }
- $notify_url = Config::get('wxpay-h5')['notify_coin_url'];
- $payInfoRes = $pay->getWxpayH5Param($payData['orderid'], $payData['amount'], $payBody, $payData['ip'], $notify_url, $data['gameid']);
- } elseif ($data['paytype'] == 'ybzf_wxmp_h5') { // 易宝-wxmp_h5
- $notify_url = Config::get('ybzf_pay')['notify_coin_url'];
- $payInfoRes = $pay->getYbzfParam($data['paytype'], $payData['orderid'], $payData['amount'], $payBody, $notify_url);
- } elseif (in_array($data['paytype'], ['ldys_zfb', 'ldys_wx_h5'])) { // 联动优势-zfb_H5
- $payType = 'payZfbH5';
- if (in_array($data['paytype'], ['ldys_wx_h5'])) {
- $payType = 'payWxmpH5V2';
- }
- $payData['is_coin'] = 1;
- $payInfoRes = $pay->getldysParam($payData, $payType);
- } elseif ($data['paytype'] == 'qmf_wxmp_h5') { // 趣智连-wxmp_h5
- $payData['notify_url'] = Config::get('qzl_pay')['notify_coin_url'];
- $payInfoRes = $pay->getqzlParam($payData, 'payWxH5');
- } elseif (in_array($data['paytype'], ['yyyb_wx_h5', 'yyyb_ali_h5'])) { // 优亿支付-H5
- $payData['notify_url'] = Config::get('yyyb_pay')['notify_coin_url'];
- $payType = 'WX_H5';
- if (in_array($data['paytype'], ['yyyb_ali_h5'])) {
- $payType = 'ALI_H5';
- }
- $payInfoRes = $pay->getYyYbPayParam($payData, $payType);
- } elseif (in_array($data['paytype'], ['xty_wx_h5', 'xty_ali_h5'])) { // 喜钛游支付-H5
- $payData['notify_url'] = Config::get('xty_pay')['notify']['notify_coin_url'];
- $payType = 'payWxH5';
- if (in_array($data['paytype'], ['xty_ali_h5'])) {
- $payType = 'payAliH5';
- }
- $payInfoRes = $pay->getXtyPayParam($payData, $payType);
- } elseif ($data['paytype'] == 'test') {
- return ['data' => '', 'code' => 0, 'msg' => '当前支付方式开发中...'];
- }
- if($payInfoRes && $data['paytype'] != 'coinpay'){
- if($payInfoRes['error'] == true){
- trace("充值方式下单失败 - {$data['paytype']}: " . json_encode($payInfoRes), 'MemberCoinService@payCoin.$payInfoRes');
- ddMsg("warning", '', ['充值方式-'.$data['paytype'], $payInfoRes['msg'], json_encode(['orderid'=>$payData['orderid'], 'username' => $data['username'], 'gameid'=>$data['gameid']], JSON_UNESCAPED_UNICODE)]);
- return ['data' => '', 'code' => 0, 'msg' => $payInfoRes['msg']];
- }
- // TODO: 新加支付方式时,这块判断要加上
- if (in_array($data['paytype'], ['zfb'])) {
- $result = ['alipay_app_param' => $payInfoRes['data'], 'wxpayh5_param' => ['mweb_url' => '']];
- } elseif (in_array($data['paytype'], ['old-zfb-wap', 'xty_ali_h5', 'ldys_zfb', 'yyyb_ali_h5'])) {
- $result = ['alipay_param' => $payInfoRes['data']];
- if($data['device'] == 4){
- $result = ['pay_url' => $payInfoRes['data']['mweb_url']];
- }
- } elseif (in_array($data['paytype'], ['wxpay-h5', 'ybzf_wxmp_h5', 'wx-wap', 'qzl_wx_h5', 'qzl_wx_h5', 'ldys_wx_h5', 'yyyb_wx_h5', 'ybzf_wxmp_h5', 'qmf_wxmp_h5', 'xty_wx_h5'])) {
- $result = ['wxpayh5_param' => $payInfoRes['data']];
- if($data['device'] == 4){
- $result = ['pay_url' => $payInfoRes['data']['mweb_url']];
- }
- } else {
- return ['data' => '', 'code' => 0, 'msg' => $data['paytype'].' - 订单支付类型配置有误!!'];
- }
- }
- // TODO: 有使用时,在开启
- // if ($data['paytype'] == 'zfbsmzf') { //支付宝扫码(官方支付宝扫码)
- // //支付宝支付参数
- // $notify_url = Config::get('alipayAop')['notify_coin_url'];
- // $alipayParam = $pay->chargeByZfbWap($payData['orderid'], $payData['amount'], $payBody, '', $notify_url);
- // $result = ['zfbsmzf_param' => ['mweb_url'=>$alipayParam]];
- // } elseif ($data['paytype'] == 'zfb-h5') { //支付宝 h5(官方支付宝h5支付)
- // //支付宝支付参数
- // $notify_url = Config::get('alipayAop')['notify_coin_url'];
- // $alipayParam = $pay->getAlipayWapAopParam($payData['orderid'], $payData['amount'], $payBody, '', $notify_url);
- // $result = ['alipay_param' => $alipayParam];
- // } elseif ($payData['paytype'] == 'xzzfbzf') { // 新支付宝 H5 (现在支付)
- // $notify_url = Config::get('h5_alipay_config')['notify_coin_url'];
- // if (!$urlPays = $pay->chargeByxzzfbzf($payData['orderid'], $payData['amount'], $payBody, '', $notify_url)) {
- // return ['code' => 0, 'msg' => '订单生成失败'];
- // }
- // $result['xzzfbzf_param'] = $urlPays;
- // } elseif ($payData['paytype'] == 'xzzfsmf') { // 新支付宝 扫码 (现在支付)
- // $notify_url = Config::get('h5_alipay_config')['notify_coin_url'];
- // if (!$urlPays = $pay->chargeByxzzfsmf($payData['orderid'], $payData['amount'], $payBody, '', $notify_url)) {
- // return ['code' => 0, 'msg' => '订单生成失败'];
- // }
- // $result['xzzfbzf_param'] = $urlPays;
- // } elseif ($payData['paytype'] == 'ipaywxpay') { // 微信支付(未知) (现在支付)
- // $notify_url = Config::get('h5_alipay_config')['notify_coin_url'];
- // $ipay_param = $pay->getIpaynowParam($payData['orderid'], $payData['amount'], $payBody, '', $notify_url);
- //
- // $result = ['ipay_param' => $ipay_param];
- // } elseif ($payData['paytype'] == 'wxsmzf') {// 微信扫码(汇付宝)
- //
- // $notify_url = Config::get('wxwappay-h5')['notify_coin_url'];
- // //微信汇付宝扫码支付参数
- // if (!$wxsmParam = $pay->getWxWapsmPostAopParam($payData['orderid'], $payData['amount'], $payBody, '', $payData['ip'], $notify_url)) {
- // return ['code' => 0, 'msg' => '订单生成失败'];
- // }
- // $result = ['wxpaysm_param' => $wxsmParam];
- // } elseif ($payData['paytype'] == 'wx-wap') { //微信h5 (汇付宝)
- // $notify_url = Config::get('wxwappay-h5')['notify_coin_url'];
- // //微信汇付宝支付参数
- // if (!$wxParam = $pay->getWxWapPostAopParam($payData['orderid'], $payData['amount'], $payBody, '', $payData['ip'], $notify_url)) {
- // return ['code' => 0, 'msg' => '订单生成失败'];
- // }
- // $result = ['wxpayh5_param' => $wxParam];
- // } elseif ($payData['paytype'] == 'kdh5') { //微信H5 酷点H5
- // $notify_url = Config::get('kdh5')['notify_coin_url'];
- // if (!$kdh5_param = $pay->getkdh5weixinParam($payData['orderid'], $payData['amount'], $payBody, $notify_url)) {
- // return ['code' => 0, 'msg' => '订单生成失败'];
- // }
- // $result = ['kdh5_param' => $kdh5_param];
- // } elseif ($payData['paytype'] == 'kdsm') { //微信扫码 酷点扫码
- // $notify_url = Config::get('kdh5')['notify_coin_url'];
- // if (!$kdsm_param = $pay->getkdsmweixinParam($payData['orderid'], $payData['amount'], $payBody, $notify_url)) {
- // return ['code' => 0, 'msg' => '订单生成失败'];
- // }
- // $dataPay = [
- // 'id' => $id,
- // 'orderid' => $payData['orderid'],
- // 'kdsm_param' => $kdsm_param,
- // 'real_amount' => priceFormat($payData['real_amount']),
- // 'create_time' => date('Y-m-d', $payData['create_time']),
- // 'goods' => '平台币',
- // ];
- // $pay_url = Config::get('kdh5')['pay_url'] . '?data=' . opensslEncrypt(json_encode($dataPay));
- // $result = ['kdsm_param' => ['mweb_url' => $pay_url]];
- // } elseif ($payData['paytype'] == 'airwallex') {
- //
- // cache('memberCoin:real_amount:'.$payData['orderid'],$payData['real_amount'],60*60);
- // $pay_url = WEBSITE_DOMAIN.'/coin_airwallex/airwallex.html?orderid='.$payData['orderid'].'&goods='.urlencode('平台币');
- // $result = ['airwallex_param' => ['mweb_url' => $pay_url]];
- // } elseif ($payData['paytype'] == 'airwallexh5') {
- // cache('memberCoin:real_amount:'.$payData['orderid'],$payData['real_amount'],60*60);
- // $pay_url = MOBILE_SITE_DOMAIN.'/coin_airwallex/airwallex.html?orderid='.$payData['orderid'].'&goods='.urlencode('平台币').'&urltype=2';
- // $result = ['airwallexh5_param' => ['mweb_url' => $pay_url]];
- // }
- $result['orderid'] = $payData['orderid'];
- $result['paytype'] = $data['paytype'];
- return ['code' => 1, 'msg' => '订单生成成功', 'data' => $result];
- } catch (\Exception $e) {
- // 回滚事务
- // Db::rollback();
- return ['code' => 0, 'msg' => '订单生成失败:' . $e->getMessage()];
- }
- }
- }
|