MemberCoinService_bak.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  1. <?php
  2. namespace app\service;
  3. use app\common\logic\PayHandle;
  4. use app\common\model\MemberCoinPay;
  5. use think\Config;
  6. use think\Db;
  7. class MemberCoinService_bak
  8. {
  9. protected $payRequestLimit = 5; //重复下单的限制时间
  10. /**
  11. * 充值平台币
  12. */
  13. public function payCoin($data)
  14. {
  15. // 转换支付标识为指定的标识
  16. // if ($data['paytype'] == 'qmf_wxmp_h5') {
  17. // $data['paytype'] = 'yyyb_wx_h5';
  18. // }
  19. // if ($data['paytype'] == 'pay_h5_001') { // 备用支付 - 001
  20. // $data['paytype'] = 'test';
  21. // }
  22. // if ($data['paytype'] == 'pay_h5_002') { // 备用支付 - 001
  23. // $data['paytype'] = 'test';
  24. // }
  25. // ## 随机为新的支付渠道 ##
  26. if (version_compare($data['version'], config('pay_handle_version'), '>')) {
  27. $payType = [
  28. 'wx_h5' => ['qzl_wx_h5', 'ldys_wx_h5', 'ybzf_wxmp_h5', 'yyyb_wx_h5', 'xty_wx_h5', 'qmf_wxmp_h5'],
  29. 'ali_h5' => ['old-zfb-wap', 'ldys_zfb_h5', 'xty_ali_h5', 'yyyb_ali_h5'],
  30. 'ali_app' => ['zfb'],
  31. ];
  32. } else {
  33. $payType = [
  34. 'wx_h5' => ['qzl_wx_h5', 'ldys_wx_h5', 'ybzf_wxmp_h5', 'yyyb_wx_h5', 'xty_wx_h5', 'qmf_wxmp_h5'],
  35. 'ali_h5' => [],
  36. 'ali_app' => [],
  37. ];
  38. }
  39. $pay_scene = '';
  40. if (in_array($data['paytype'], $payType['wx_h5'])) {
  41. $pay_scene = 'wx_h5';
  42. } else if (in_array($data['paytype'], $payType['ali_h5'])) {
  43. $pay_scene = 'ali_h5';
  44. } else if (in_array($data['paytype'], $payType['ali_app'])) {
  45. $pay_scene = 'ali_app';
  46. } else {
  47. // 不能这样判断,因为会有ptb
  48. // return ['code' => -111, 'msg' => '支付方式有误!', 'data' => []];
  49. }
  50. // 新版本+支持的支付方式才会走获取随机支付,没有则走默认配置的
  51. if ((version_compare($data['version'], config('pay_handle_version'), '>') && $pay_scene) || (isInArrType($payType, $data['paytype']) && $pay_scene)) {
  52. $newPayType = (new PayHandle())->getPayChannel($pay_scene, $data['gameid'], $data['version']);
  53. if (empty($newPayType['data']['paytype'])) {
  54. return ['data' => '', 'code' => -110, 'msg' => '支付配置有误!当前游戏或者版本未开启支付!'];
  55. }
  56. $data['paytype'] = $newPayType['data']['paytype'];
  57. } else {
  58. $setPayType = model('common/Setting')->where(['name' => 'OLD_PAY_WX_TYPE'])->value('value');
  59. if ($setPayType) {
  60. if (strstr($data['paytype'], 'qmf_wxmp_h5') !== false)
  61. {
  62. if ($data['paytype'] == 'qmf_wxmp_h5') {
  63. $data['paytype'] = $setPayType;
  64. }
  65. }
  66. }
  67. }
  68. // ## 随机为新的支付渠道 - END ##
  69. $payData['userid'] = $data['member_id'];
  70. $payData['orderid'] = makeOrderid('COIN');
  71. $payData['amount'] = $data['amount'];
  72. if (in_array($data['paytype'], ['airwallexh5', 'airwallex'])) {
  73. $paytypeInfo = model('common/PayType')->where('paytype', $data['paytype'])->find();
  74. $payData['real_amount'] = priceFormat($data['amount'] * (1 + $paytypeInfo['commission']));
  75. } else {
  76. $payData['real_amount'] = $data['amount'];
  77. }
  78. $payData['paytype'] = $data['paytype'];
  79. $payData['ip'] = $data['ip'];
  80. $payData['create_time'] = NOW_TIMESTAMP;
  81. $payData['place_user_id'] = $data['place_user_id'];
  82. // 启动事务
  83. Db::startTrans();
  84. try {
  85. //指定时间内,禁止重复下单
  86. $cacheKey = 'pay_duplicate_' . $payData['userid'] . '_' . 'coin';
  87. if (!requestDuplicateCheck($cacheKey, $this->payRequestLimit)) {
  88. return ['code' => 0, 'msg' => '充值请求过多,请于' . $this->payRequestLimit . 's以后,再次进行充值操作'];
  89. }
  90. if (!$id = (new MemberCoinPay())->insertGetId($payData)) {
  91. // 回滚事务
  92. Db::rollback();
  93. return ['code' => 0, 'msg' => '订单生成失败1'];
  94. }
  95. // 提交事务
  96. Db::commit();
  97. } catch (\Exception $e) {
  98. // 回滚事务
  99. Db::rollback();
  100. return ['code' => 0, 'msg' => '订单生成失败' . $e->getMessage()];
  101. }
  102. /**
  103. * 微信支付:
  104. * 可用:'qzl_wx_h5', 'ybzf_wxmp_h5', 'yyyb_wx_h5', 'xty_wx_h5'
  105. * 不可用:'ldys_wx_h5'
  106. *
  107. * 支付宝:
  108. * 可用:'xty_ali_h5', 'yyyb_ali_h5'
  109. * 不可用:'old-zfb-wap', 'ldys_zfb_h5'
  110. */
  111. try {
  112. //支付方式是支付宝扫码
  113. $payBody = '平台币';
  114. $pay = new PayService();
  115. $payData['productname'] = $payBody;
  116. $payData['pay_amount'] = $payData['amount'];
  117. $payData['gameid'] = $data['gameid'];
  118. $payInfoRes = [];
  119. if ($data['paytype'] == 'zfb') { // 支付宝-app 扫码(官方支付宝快捷支付)
  120. $notify_url = Config::get('ali_pay_config')['notify_coin_url'];
  121. $payInfoRes = $pay->getAlipayAopParam($payData['orderid'], $payData['amount'], $payBody, '', $notify_url);
  122. } elseif (in_array($data['paytype'], ['zfb-wap', 'old-zfb-wap'])) { //支付宝-h5(官方支付宝h5支付)带referer
  123. $notify_url = Config::get('ali_pay_config')['notify_coin_url'];
  124. $payInfoRes = $pay->getAlipayWapPostAopParam($payData['orderid'], $payData['amount'], $payBody, '', $notify_url);
  125. } elseif (in_array($data['paytype'], ['wxpay-h5', 'wx-wap'])) { // 微信-h5
  126. if ($payData['amount'] > 3000) {
  127. return ['code' => 0, 'msg' => '微信单笔支付限额3000元,您可选择其它支付'];
  128. }
  129. $notify_url = Config::get('wxpay-h5')['notify_coin_url'];
  130. $payInfoRes = $pay->getWxpayH5Param($payData['orderid'], $payData['amount'], $payBody, $payData['ip'], $notify_url, $data['gameid']);
  131. } elseif ($data['paytype'] == 'ybzf_wxmp_h5') { // 易宝-wxmp_h5
  132. $notify_url = Config::get('ybzf_pay')['notify_coin_url'];
  133. $payInfoRes = $pay->getYbzfParam($data['paytype'], $payData['orderid'], $payData['amount'], $payBody, $notify_url);
  134. } elseif (in_array($data['paytype'], ['ldys_zfb', 'ldys_wx_h5'])) { // 联动优势-zfb_H5
  135. $payType = 'payZfbH5';
  136. if (in_array($data['paytype'], ['ldys_wx_h5'])) {
  137. $payType = 'payWxmpH5V2';
  138. }
  139. $payData['is_coin'] = 1;
  140. $payInfoRes = $pay->getldysParam($payData, $payType);
  141. } elseif ($data['paytype'] == 'qmf_wxmp_h5') { // 趣智连-wxmp_h5
  142. $payData['notify_url'] = Config::get('qzl_pay')['notify_coin_url'];
  143. $payInfoRes = $pay->getqzlParam($payData, 'payWxH5');
  144. } elseif (in_array($data['paytype'], ['yyyb_wx_h5', 'yyyb_ali_h5'])) { // 优亿支付-H5
  145. $payData['notify_url'] = Config::get('yyyb_pay')['notify_coin_url'];
  146. $payType = 'WX_H5';
  147. if (in_array($data['paytype'], ['yyyb_ali_h5'])) {
  148. $payType = 'ALI_H5';
  149. }
  150. $payInfoRes = $pay->getYyYbPayParam($payData, $payType);
  151. } elseif (in_array($data['paytype'], ['xty_wx_h5', 'xty_ali_h5'])) { // 喜钛游支付-H5
  152. $payData['notify_url'] = Config::get('xty_pay')['notify']['notify_coin_url'];
  153. $payType = 'payWxH5';
  154. if (in_array($data['paytype'], ['xty_ali_h5'])) {
  155. $payType = 'payAliH5';
  156. }
  157. $payInfoRes = $pay->getXtyPayParam($payData, $payType);
  158. } elseif ($data['paytype'] == 'test') {
  159. return ['data' => '', 'code' => 0, 'msg' => '当前支付方式开发中...'];
  160. }
  161. if($payInfoRes && $data['paytype'] != 'coinpay'){
  162. if($payInfoRes['error'] == true){
  163. trace("充值方式下单失败 - {$data['paytype']}: " . json_encode($payInfoRes), 'MemberCoinService@payCoin.$payInfoRes');
  164. ddMsg("warning", '', ['充值方式-'.$data['paytype'], $payInfoRes['msg'], json_encode(['orderid'=>$payData['orderid'], 'username' => $data['username'], 'gameid'=>$data['gameid']], JSON_UNESCAPED_UNICODE)]);
  165. return ['data' => '', 'code' => 0, 'msg' => $payInfoRes['msg']];
  166. }
  167. // TODO: 新加支付方式时,这块判断要加上
  168. if (in_array($data['paytype'], ['zfb'])) {
  169. $result = ['alipay_app_param' => $payInfoRes['data'], 'wxpayh5_param' => ['mweb_url' => '']];
  170. } elseif (in_array($data['paytype'], ['old-zfb-wap', 'xty_ali_h5', 'ldys_zfb', 'yyyb_ali_h5'])) {
  171. $result = ['alipay_param' => $payInfoRes['data']];
  172. if($data['device'] == 4){
  173. $result = ['pay_url' => $payInfoRes['data']['mweb_url']];
  174. }
  175. } 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'])) {
  176. $result = ['wxpayh5_param' => $payInfoRes['data']];
  177. if($data['device'] == 4){
  178. $result = ['pay_url' => $payInfoRes['data']['mweb_url']];
  179. }
  180. } else {
  181. return ['data' => '', 'code' => 0, 'msg' => $data['paytype'].' - 订单支付类型配置有误!!'];
  182. }
  183. }
  184. // TODO: 有使用时,在开启
  185. // if ($data['paytype'] == 'zfbsmzf') { //支付宝扫码(官方支付宝扫码)
  186. // //支付宝支付参数
  187. // $notify_url = Config::get('alipayAop')['notify_coin_url'];
  188. // $alipayParam = $pay->chargeByZfbWap($payData['orderid'], $payData['amount'], $payBody, '', $notify_url);
  189. // $result = ['zfbsmzf_param' => ['mweb_url'=>$alipayParam]];
  190. // } elseif ($data['paytype'] == 'zfb-h5') { //支付宝 h5(官方支付宝h5支付)
  191. // //支付宝支付参数
  192. // $notify_url = Config::get('alipayAop')['notify_coin_url'];
  193. // $alipayParam = $pay->getAlipayWapAopParam($payData['orderid'], $payData['amount'], $payBody, '', $notify_url);
  194. // $result = ['alipay_param' => $alipayParam];
  195. // } elseif ($payData['paytype'] == 'xzzfbzf') { // 新支付宝 H5 (现在支付)
  196. // $notify_url = Config::get('h5_alipay_config')['notify_coin_url'];
  197. // if (!$urlPays = $pay->chargeByxzzfbzf($payData['orderid'], $payData['amount'], $payBody, '', $notify_url)) {
  198. // return ['code' => 0, 'msg' => '订单生成失败'];
  199. // }
  200. // $result['xzzfbzf_param'] = $urlPays;
  201. // } elseif ($payData['paytype'] == 'xzzfsmf') { // 新支付宝 扫码 (现在支付)
  202. // $notify_url = Config::get('h5_alipay_config')['notify_coin_url'];
  203. // if (!$urlPays = $pay->chargeByxzzfsmf($payData['orderid'], $payData['amount'], $payBody, '', $notify_url)) {
  204. // return ['code' => 0, 'msg' => '订单生成失败'];
  205. // }
  206. // $result['xzzfbzf_param'] = $urlPays;
  207. // } elseif ($payData['paytype'] == 'ipaywxpay') { // 微信支付(未知) (现在支付)
  208. // $notify_url = Config::get('h5_alipay_config')['notify_coin_url'];
  209. // $ipay_param = $pay->getIpaynowParam($payData['orderid'], $payData['amount'], $payBody, '', $notify_url);
  210. //
  211. // $result = ['ipay_param' => $ipay_param];
  212. // } elseif ($payData['paytype'] == 'wxsmzf') {// 微信扫码(汇付宝)
  213. //
  214. // $notify_url = Config::get('wxwappay-h5')['notify_coin_url'];
  215. // //微信汇付宝扫码支付参数
  216. // if (!$wxsmParam = $pay->getWxWapsmPostAopParam($payData['orderid'], $payData['amount'], $payBody, '', $payData['ip'], $notify_url)) {
  217. // return ['code' => 0, 'msg' => '订单生成失败'];
  218. // }
  219. // $result = ['wxpaysm_param' => $wxsmParam];
  220. // } elseif ($payData['paytype'] == 'wx-wap') { //微信h5 (汇付宝)
  221. // $notify_url = Config::get('wxwappay-h5')['notify_coin_url'];
  222. // //微信汇付宝支付参数
  223. // if (!$wxParam = $pay->getWxWapPostAopParam($payData['orderid'], $payData['amount'], $payBody, '', $payData['ip'], $notify_url)) {
  224. // return ['code' => 0, 'msg' => '订单生成失败'];
  225. // }
  226. // $result = ['wxpayh5_param' => $wxParam];
  227. // } elseif ($payData['paytype'] == 'kdh5') { //微信H5 酷点H5
  228. // $notify_url = Config::get('kdh5')['notify_coin_url'];
  229. // if (!$kdh5_param = $pay->getkdh5weixinParam($payData['orderid'], $payData['amount'], $payBody, $notify_url)) {
  230. // return ['code' => 0, 'msg' => '订单生成失败'];
  231. // }
  232. // $result = ['kdh5_param' => $kdh5_param];
  233. // } elseif ($payData['paytype'] == 'kdsm') { //微信扫码 酷点扫码
  234. // $notify_url = Config::get('kdh5')['notify_coin_url'];
  235. // if (!$kdsm_param = $pay->getkdsmweixinParam($payData['orderid'], $payData['amount'], $payBody, $notify_url)) {
  236. // return ['code' => 0, 'msg' => '订单生成失败'];
  237. // }
  238. // $dataPay = [
  239. // 'id' => $id,
  240. // 'orderid' => $payData['orderid'],
  241. // 'kdsm_param' => $kdsm_param,
  242. // 'real_amount' => priceFormat($payData['real_amount']),
  243. // 'create_time' => date('Y-m-d', $payData['create_time']),
  244. // 'goods' => '平台币',
  245. // ];
  246. // $pay_url = Config::get('kdh5')['pay_url'] . '?data=' . opensslEncrypt(json_encode($dataPay));
  247. // $result = ['kdsm_param' => ['mweb_url' => $pay_url]];
  248. // } elseif ($payData['paytype'] == 'airwallex') {
  249. //
  250. // cache('memberCoin:real_amount:'.$payData['orderid'],$payData['real_amount'],60*60);
  251. // $pay_url = WEBSITE_DOMAIN.'/coin_airwallex/airwallex.html?orderid='.$payData['orderid'].'&goods='.urlencode('平台币');
  252. // $result = ['airwallex_param' => ['mweb_url' => $pay_url]];
  253. // } elseif ($payData['paytype'] == 'airwallexh5') {
  254. // cache('memberCoin:real_amount:'.$payData['orderid'],$payData['real_amount'],60*60);
  255. // $pay_url = MOBILE_SITE_DOMAIN.'/coin_airwallex/airwallex.html?orderid='.$payData['orderid'].'&goods='.urlencode('平台币').'&urltype=2';
  256. // $result = ['airwallexh5_param' => ['mweb_url' => $pay_url]];
  257. // }
  258. $result['orderid'] = $payData['orderid'];
  259. $result['paytype'] = $data['paytype'];
  260. return ['code' => 1, 'msg' => '订单生成成功', 'data' => $result];
  261. } catch (\Exception $e) {
  262. // 回滚事务
  263. // Db::rollback();
  264. return ['code' => 0, 'msg' => '订单生成失败:' . $e->getMessage()];
  265. }
  266. }
  267. }