MovieRepository.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345
  1. <?php
  2. /**
  3. * @package merchant
  4. * @Author: Qinii
  5. * @Date: 2020/5/8
  6. */
  7. namespace app\common\repositories\movie;
  8. use app\common\dao\movie\order\MovieOrderDao;
  9. use app\common\repositories\BaseRepository;
  10. use app\common\repositories\store\order\StoreOrderRepository;
  11. use think\facade\Db;
  12. use think\facade\Log;
  13. /**
  14. * Class MovieRepository
  15. * @package app\common\repositories\movie
  16. * @author xaboy
  17. * @mixin MovieOrderDao
  18. */
  19. class MovieRepository extends BaseRepository
  20. {
  21. protected $dao;
  22. /**
  23. * ProductRepository constructor.
  24. * @param MovieOrderDao $dao
  25. */
  26. public function __construct(MovieOrderDao $dao)
  27. {
  28. $this->dao = $dao;
  29. }
  30. /**
  31. * @param $page
  32. * @param $limit
  33. * @param $initial
  34. * @param $city_name
  35. * @return false|int|mixed
  36. */
  37. public function getMovieCity($page = 1, $limit = 10, $initial = '', $city_name = '')
  38. {
  39. return DouHuoMallFilmApiRequest::getMovieCity($page, $limit, $initial = '', $city_name);
  40. }
  41. /**
  42. * @param $city_sign
  43. * @return false|int|mixed
  44. */
  45. public function getMovieArea($city_sign = '')
  46. {
  47. return DouHuoMallFilmApiRequest::getMovieArea($city_sign);
  48. }
  49. /**
  50. * @param $page
  51. * @param $limit
  52. * @param $city_sign
  53. * @param $area_sign
  54. * @return false|int|mixed
  55. */
  56. public function getCinema($page = 1, $limit = 10, $city_sign = '', $area_sign = '')
  57. {
  58. return DouHuoMallFilmApiRequest::getCinema($page, $limit, $city_sign, $area_sign);
  59. }
  60. /**
  61. * @param $page
  62. * @param $limit
  63. * @param $cinema_sign
  64. * @param $film_sign
  65. * @return false|int|mixed
  66. */
  67. public function getFilm($page = 1, $limit = 10, $cinema_sign = '', $film_sign = '')
  68. {
  69. return DouHuoMallFilmApiRequest::getFilm($page, $limit, $cinema_sign, $film_sign);
  70. }
  71. /**
  72. * @param $film_sign
  73. * @param $cinema_sign
  74. * @return mixed|string
  75. */
  76. public function getCinemaSched($film_sign = '', $cinema_sign = '')
  77. {
  78. return DouHuoMallFilmApiRequest::getCinemaSched($film_sign, $cinema_sign);
  79. }
  80. /**
  81. * @param $relation_id
  82. * @param $sched_sign
  83. * @return mixed|string
  84. */
  85. public function getSchedSeat($relation_id = '', $sched_sign = '')
  86. {
  87. return DouHuoMallFilmApiRequest::getSchedSeat($relation_id, $sched_sign);
  88. }
  89. /**
  90. * 锁座订单
  91. * @param $sched_sign
  92. * @param $seat_sign
  93. * @param $channel_type
  94. * @param $third_order
  95. * @param $order_price
  96. * @param $phone
  97. * @return mixed|string
  98. */
  99. public function submitOrder($userinfo, $params)
  100. {
  101. /** @var StoreOrderRepository $storeOrder */
  102. $storeOrder = app()->make(StoreOrderRepository::class);
  103. $order_sn = $storeOrder->getNewOrderId() . '0';
  104. $order_price = round($params['number'] * $params['price'], 2);
  105. $submitOrder = DouHuoMallFilmApiRequest::submitOrder($userinfo->phone, $params['channel_type'], $params['sched_sign'], $order_sn, $order_price);
  106. if (!empty($submitOrder) && isset($submitOrder['code']) && ($submitOrder['code'] == 200) && isset($submitOrder['data']['plat_order'])){
  107. $_order = [
  108. 'uid' => $userinfo->uid,
  109. 'mobile' => $userinfo->phone,
  110. 'order_sn' => $order_sn,
  111. 'plat_order' => $submitOrder['data']['plat_order'],
  112. 'price' => $params['price'],
  113. 'number' => $params['number'],
  114. 'order_price' => $order_price,
  115. 'channel_type' => $params['channel_type'],
  116. 'pay_type' => $params['pay_type'],
  117. 'city_sign' => $params['city_sign'],
  118. 'city_name' => $params['city_name'],
  119. 'area_code' => $params['area_code'],
  120. 'area_name' => $params['area_name'],
  121. 'cinema_sign' => $params['cinema_sign'],
  122. 'cinema_name' => $params['cinema_name'],
  123. 'address' => $params['address'],
  124. 'longitude' => $params['longitude'],
  125. 'latitude' => $params['latitude'],
  126. 'hall_sign' => $params['hall_sign'],
  127. 'hall_name' => $params['hall_name'],
  128. 'relation_id' => $params['relation_id'],
  129. 'sched_sign' => $params['sched_sign'],
  130. 'film_sign' => $params['film_sign'],
  131. 'film_name' => $params['film_name'],
  132. 'show_date' => $params['show_date'],
  133. 'show_time' => $params['show_time'],
  134. 'sched_seat' => $params['sched_seat'],
  135. 'create_time' => time()
  136. ];
  137. $group = Db::transaction(function () use ($userinfo, $_order) {
  138. $_order = $this->dao->create($_order);
  139. if ($_order) return static::pay();
  140. });
  141. return $group;
  142. } else {
  143. return $submitOrder;
  144. }
  145. }
  146. private static function pay($payType,$code,$groupOrder,$title,$notify_url,$pay_mode=null,$appid=''){
  147. $order_no = $groupOrder['group_order_sn'] ?? $groupOrder['order_no'];
  148. if($payType == 'wx'){
  149. if(!$code || $code == '' || $code =='undefined')
  150. return "授权失败,code为空";
  151. if($appid == '') {
  152. $pay_wx = systemConfig('pay_wx');
  153. if ($pay_wx == 2){
  154. $appid = env('WECHAT_MP.APPID');
  155. $new_secret = env('WECHAT_MP.SECRET');
  156. $app_id='app_0827b960-b932-45ec-b800-4e850091b419';
  157. $key='api_live_90ef02e4-54ac-41ee-adf1-e4927d23d58f';
  158. }elseif ($pay_wx == 3){
  159. $appid = env('WECHAT_TDYL.APPID');
  160. $new_secret = env('WECHAT_TDYL.SECRET');
  161. Db::name('log')->insert(['data'=>'appid---'.$appid]);
  162. Db::name('log')->insert(['data'=>'new_secret---'.$new_secret]);
  163. $app_id='app_383a75dd-c03d-44ab-8f58-92c60fe9b9d0';
  164. $key='api_live_b0a687ec-5450-4ada-a0e4-65bac0f46871';
  165. }
  166. }else{
  167. $app_id='app_0827b960-b932-45ec-b800-4e850091b419';
  168. $key='api_live_90ef02e4-54ac-41ee-adf1-e4927d23d58f';
  169. $new_secret = "c8cbe24fa3b83f77a88b79554b3aeab4";
  170. }
  171. $url = "https://api.weixin.qq.com/sns/jscode2session?appid=".$appid."&secret=".$new_secret."&js_code=".$code."&grant_type=authorization_code";
  172. $get = curlGet($url);
  173. Db::name('log')->insert(['data'=>'pay_wx---'.$pay_wx]);
  174. Db::name('log')->insert(['data'=>'code---'.$code]);
  175. Db::name('log')->insert(['data'=>'url---'.$url]);
  176. Db::name('log')->insert(['data'=>'open_id---'.json_encode($get)]);
  177. if(!isset($get['openid']) || empty($get['openid'])){
  178. return '授权失败';
  179. }
  180. $openid = $get['openid'];
  181. $member_id=0;
  182. $type='2';
  183. $pay_channel='wx_lite';
  184. $expend=[
  185. 'open_id'=>$openid,
  186. 'wx_app_id'=> $appid
  187. ];
  188. if ($groupOrder['order_type'] = "marketing"){
  189. db::name("test_log")->insert(["note"=>"pay_huifu" . json_encode($groupOrder)]);
  190. // 创富宝 分账
  191. //创富宝
  192. $cfb = sprintf("%01.2f",round(bcmul($groupOrder['pay_price'],'0.094',5),2));//9.4%的分账
  193. $cfb_member = "jsdk_member_1680162243019";
  194. // 平台
  195. $cxb = sprintf("%01.2f",round(bcsub($groupOrder['pay_price'],$cfb,5),2));//剩下的归平台
  196. $div_members=[
  197. [
  198. 'member_id'=>$member_id,
  199. 'amount'=>$cxb,
  200. 'fee_flag'=>'Y'
  201. ],
  202. [
  203. 'member_id'=>$cfb_member,
  204. 'amount'=>$cfb,
  205. 'fee_flag'=>'N'
  206. ]
  207. ];
  208. }else{
  209. $div_members=[
  210. [
  211. 'member_id'=>$member_id,
  212. 'amount'=>$groupOrder['pay_price'],
  213. 'fee_flag'=>'Y'
  214. ]
  215. ];
  216. }
  217. $params=[
  218. 'order_no'=>$order_no."_".rand(1000,9999),
  219. 'app_id'=>$app_id,
  220. 'pay_channel'=>$pay_channel,
  221. 'pay_amt'=>(string)$groupOrder['pay_price'],
  222. 'goods_title'=> strlen($title) > 64 ? mb_substr($title, 0, 64,'utf-8') : $title,// 解决因为太长不能支付问题
  223. 'goods_desc' => strlen($title) > 42 ? mb_substr($title, 0, 127,'utf-8') : $title,// 解决因为太长不能支付问题
  224. 'device_info'=>[
  225. 'device_ip'=>app('request')->ip()
  226. // 'device_ip'=>'115.171.134.68'
  227. ],
  228. 'expend'=>json_encode($expend),
  229. 'div_members'=>json_encode($div_members),
  230. 'fee_mode'=>'I',
  231. 'notify_url'=>$notify_url
  232. ];
  233. if($pay_mode == 'delay'){
  234. $params['pay_mode'] = 'delay';
  235. unset($params['div_members']);
  236. unset($params['fee_mode']);
  237. }
  238. return $this->Payment_create_traits_b($params,$type,$key);
  239. }elseif($payType=='ALI'){
  240. // throw new AuthException('支付宝正在升级,请使用微信支付');
  241. $member_id=0;
  242. $type='1';
  243. $pay_channel='alipay_qr';
  244. // 天地博爱科技通道
  245. $app_id='app_44108546-d27a-48ee-88c1-84b45b75114f';
  246. $key='api_live_b23537ed-64b8-45d6-832e-fb228aa9e0a9';
  247. // 天地博爱通道
  248. // $app_id='app_0827b960-b932-45ec-b800-4e850091b419';
  249. // $key='api_live_90ef02e4-54ac-41ee-adf1-e4927d23d58f';
  250. $div_members=[
  251. [
  252. 'member_id'=>$member_id,
  253. 'amount'=>$groupOrder['pay_price'],
  254. 'fee_flag'=>'Y'
  255. ]
  256. ];
  257. $params=[
  258. 'order_no'=>$order_no."_".rand(1000,9999),
  259. 'app_id'=>$app_id,
  260. 'pay_channel'=>$pay_channel,
  261. 'pay_amt'=>(string)$groupOrder['pay_price'],
  262. 'goods_title'=> strlen($title) > 64 ? mb_substr($title, 0, 64,'utf-8') : $title,// 解决因为太长不能支付问题
  263. 'goods_desc' => strlen($title) > 42 ? mb_substr($title, 0, 127,'utf-8') : $title,// 解决因为太长不能支付问题
  264. 'device_info'=>[
  265. 'device_ip'=>app('request')->ip()
  266. // 'device_ip'=>'115.171.134.68'
  267. ],
  268. // 'expend'=>json_encode($expend),
  269. 'div_members'=>json_encode($div_members),
  270. 'fee_mode'=>'I',
  271. 'notify_url'=>$notify_url
  272. ];
  273. if($pay_mode == 'delay'){
  274. $params['pay_mode'] = 'delay';
  275. unset($params['div_members']);
  276. unset($params['fee_mode']);
  277. }
  278. return $this->Payment_create_traits_a($params,$type,$key);
  279. }
  280. }
  281. /**
  282. * @param $third_order
  283. * @param $order_price
  284. * @return mixed|string
  285. */
  286. public function confirmOrder($third_order, $order_price)
  287. {
  288. return DouHuoMallFilmApiRequest::confirmOrder($third_order, $order_price);
  289. }
  290. /**
  291. * @param $third_order
  292. * @return mixed|string
  293. */
  294. public function getOrderInfo($third_order)
  295. {
  296. return DouHuoMallFilmApiRequest::getOrderInfo($third_order);
  297. }
  298. }