OrderMerchant.php 43 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049
  1. <?php
  2. /**
  3. * @package merchant
  4. * @Author: Qinii
  5. * @Date: 2020/5/27
  6. */
  7. namespace app\controller\api\merchant\order;
  8. use AdaPaySdk\AdapayTools;
  9. use app\common\repositories\merchant\MerchantRepository;
  10. use app\traits\HaikeApiRequest;
  11. use app\traits\HuiPay;
  12. use think\App;
  13. use crmeb\basic\BaseController;
  14. use app\common\repositories\merchant\order\OrderMerchantRepository as repository;
  15. use think\facade\Cache;
  16. use think\facade\Db;
  17. use think\facade\Log;
  18. class OrderMerchant extends BaseController
  19. {
  20. use HaikeApiRequest;
  21. use HuiPay;
  22. /**
  23. * @var \Redis
  24. */
  25. protected $redis;
  26. /**
  27. * @var repository
  28. */
  29. protected $repository;
  30. /**
  31. * StoreBrand constructor.
  32. * @param App $app
  33. * @param repository $repository
  34. */
  35. public function __construct(App $app, repository $repository)
  36. {
  37. parent::__construct($app);
  38. $this->repository = $repository;
  39. $this->redis = Cache::store('redis')->handler();
  40. }
  41. /**
  42. * 订单列表
  43. * @return mixed
  44. * @author php迷途小书童
  45. * @created 2021/1/16 10:49
  46. */
  47. public function lst()
  48. {
  49. $uid = $this->request->uid();
  50. [$page, $limit] = $this->getPage();
  51. return app('json')->success($this->repository->getMerchantList($uid, [
  52. 'paid' => 1,
  53. ], $page, $limit));
  54. }
  55. /**
  56. * 订单列表
  57. * @return mixed
  58. * @author php迷途小书童
  59. * @created 2021/1/16 10:49
  60. */
  61. public function del()
  62. {
  63. $time=time();
  64. $end=$time-60*5;
  65. $stat=date('Y-m-d H:i:s',$end);
  66. Db::name('order_merchant')
  67. ->where('is_broadcast',0)
  68. ->whereNotNull('pay_time')
  69. ->whereTime('pay_time','<',$stat)
  70. ->update(['is_broadcast'=>1]);
  71. }
  72. // /**
  73. // * 订单列表
  74. // * @return mixed
  75. // * @author php迷途小书童
  76. // * @created 2021/1/16 10:49
  77. // */
  78. // public function lst()
  79. // {
  80. // $merId = $this->request->userInfo()->mer_id;
  81. // [$page, $limit] = $this->getPage();
  82. // return app('json')->success($this->repository->getMerchantList($merId, [
  83. // 'paid' => 1,
  84. // ], $page, $limit));
  85. // }
  86. /**
  87. * 修改语音播报状态
  88. * @return mixed
  89. * @author php迷途小书童
  90. * @created 2021/3/8 18:08
  91. */
  92. public function broadcast()
  93. {
  94. $orderId = (int)$this->request->param('order_id', 0);
  95. $order = $this->repository->getOneById($orderId);
  96. if (!$order)
  97. return app('json')->fail('订单不存在');
  98. $order->is_broadcast = 1;
  99. $order->save();
  100. return app('json')->success('修改成功');
  101. }
  102. /**
  103. * 创建订单
  104. * @return mixed
  105. * @author php迷途小书童
  106. * @created 2021/1/16 10:52
  107. */
  108. public function createOrder(MerchantRepository $merchantRepository)
  109. {
  110. $merchantUserId = (int)$this->request->param('user_id', 0);
  111. $merId = $this->request->param('mer_id', 0);
  112. if($merId==496){
  113. return app('json')->fail('该商户暂不支持该支付方式');
  114. }
  115. if(strpos($merId,'_') !== false){
  116. $mer_ = explode("_",$merId);
  117. $merId=$mer_[0];
  118. }
  119. log::info($merId);
  120. $payUserId = $this->request->param('pay_user_id', null);
  121. // Db::name('log')->insert(['data'=>json_encode($payUserId)]);
  122. $nickname = $this->request->param('nickname', null);
  123. $avatar = $this->request->param('avatar', null);
  124. $money = (float)$this->request->param('money', 0);
  125. $tradeType = $this->request->param('trade_type');
  126. $mer = $merchantRepository->getWhere(['mer_id' => $merId]);
  127. if (!$mer)
  128. return app('json')->fail('商户不存在');
  129. if (!in_array($tradeType, explode(',', $mer['trade_type'])))
  130. return app('json')->fail('该商户暂不支持该支付方式');
  131. if ($mer['mer_id'] == 324 && !in_array($money,[300,1000,3000]))
  132. return app('json')->fail('支付金额不正确,请支付300、1000、3000元的档位');
  133. $this->redis->set('create_order' . $payUserId, 1, 5);
  134. $merchant_type=Db::name('merchant')->where('mer_id',$merId)->value('merchant_type');
  135. try {
  136. if($merchant_type==2){
  137. $order = $this->repository->createOrder_276(
  138. [
  139. 'merchant_user_id' => $merchantUserId,
  140. 'mer_id' => $merId,
  141. 'merch_no' => $mer['merch_no'],
  142. 'pay_user_id' => $payUserId,
  143. 'nickname' => $nickname,
  144. 'avatar' => $avatar,
  145. 'money' => $money,
  146. 'trade_type' => $tradeType,
  147. 'qr_num' => $mer_[1]??0,
  148. ]
  149. );
  150. }else{
  151. $order = $this->repository->createOrder(
  152. [
  153. 'merchant_user_id' => $merchantUserId,
  154. 'mer_id' => $merId,
  155. 'merch_no' => $mer['merch_no'],
  156. 'pay_user_id' => $payUserId,
  157. 'nickname' => $nickname,
  158. 'avatar' => $avatar,
  159. 'money' => $money,
  160. 'trade_type' => $tradeType,
  161. 'qr_num' => $mer_[1]??0,
  162. ]
  163. );
  164. }
  165. } catch (\Throwable $e) {
  166. $this->redis->del('create_order' . $payUserId);
  167. return app('json')->fail($e->getMessage());
  168. }
  169. $this->redis->del('create_order' . $payUserId);
  170. try {
  171. return app('json')->success($order);
  172. } catch (\Throwable $e) {
  173. return app('json')->status('error', $e->getMessage(), ['out_trade_no' => $order->out_trade_no]);
  174. }
  175. }
  176. /**
  177. * 聚合公众号支付API
  178. * @return mixed
  179. * @author php迷途小书童
  180. * @created 2021/1/16 10:02
  181. */
  182. public function jsapiPay(){
  183. try {
  184. $type = (string)$this->request->param("type", '');
  185. $out_trade_no = (string)$this->request->param("out_trade_no", '');
  186. $order = $this->repository->getOne($out_trade_no);
  187. if (!$order)
  188. return app('json')->fail('订单不存在');
  189. $merchant=Db::name('merchant')->where('mer_id',$order['mer_id'])->find();
  190. // Db::name('log')->insert(['data'=>'商户信息---'.json_encode($merchant)]);
  191. if($type=='HF'){
  192. //这个不用管他。这两商户关了
  193. if($merchant['hf_type']==2) {
  194. // Db::name('log')->insert(['data'=>'单独付款进来了']);
  195. if($merchant['mer_id']==290){
  196. $data=$this->HF_DANDU_290($order);
  197. }elseif($merchant['mer_id']==276){
  198. $data=$this->HF_DANDU_276($order);
  199. }
  200. }else{
  201. // if($merchant['merchant_type']==2){
  202. // $data=$this->HF_276($order);
  203. // }else{
  204. $data=$this->HF($order);
  205. // }
  206. }
  207. }else{
  208. $data = $this->getJsapiPayGateway($order);
  209. }
  210. }catch (\Throwable $e){
  211. Db::name('log')->insert(['data'=>'支付错误:'.$e->getFile().':'.$e->getLine().'【'.$e->getMessage().'】']);
  212. }
  213. log::info('聚合公众号支付API'.json_encode($data));
  214. try {
  215. if ($data['return_code'] === 10000) {
  216. $params = [
  217. 'trade_no' => $data['trade_no'],
  218. 'channel_trade_no' => $data['channel_trade_no'],
  219. ];
  220. if ($order->trade_type == "ALI")
  221. $params['alipay_no'] = $data['alipay_no'];
  222. $this->repository->updateOrder($order, $params);
  223. return app('json')->success($data);
  224. } elseif($data['code']=='1000'){
  225. $params = [
  226. 'trade_no' => $data['order_no'],
  227. 'channel_trade_no' => $data['party_order_id'],
  228. 'hf_pay_id' => $data['id'],
  229. ];
  230. ////
  231. // $this->repository->updateOrder($order, $params);
  232. Db::name('order_merchant')->where(['out_trade_no'=>$out_trade_no])->update($params);
  233. return app('json')->success($data);
  234. }else {
  235. return app('json')->fail($data['return_msg']);
  236. }
  237. } catch (\Throwable $e) {
  238. return app('json')->status('error', $e->getMessage(), ['out_trade_no' => $order->out_trade_no]);
  239. }
  240. }
  241. public function HF($order)
  242. {
  243. // $amt = $order['service_money'] + $order['pension'] + $order['swipe_fee']; //总可分佣金额
  244. $amt = $order['service_money'] + $order['pension']; //总可分佣金额 手续费由商家出
  245. $amt=sprintf("%01.2f",$amt); //保留2位数字。
  246. $mouny=$order['money']-$amt; //商户货款
  247. $mouny=sprintf("%01.2f",$mouny); //保留2位小时。
  248. $goods_title=Db::name('merchant')->where('mer_id',$order['mer_id'])->find();
  249. if($order['trade_type']=='WX'){
  250. $pay_wx = systemConfig('pay_wx');
  251. //微信
  252. if($pay_wx == 3){
  253. $member_id=Db::name('merchant_member')->where('mer_id',$order['mer_id']) ->where("type",3)->value('member_id');
  254. $key='api_live_b0a687ec-5450-4ada-a0e4-65bac0f46871';
  255. $app_id='app_383a75dd-c03d-44ab-8f58-92c60fe9b9d0';
  256. $member_70 = 'jsdk_member_wx21693792690420';
  257. $member_20 = 'jsdk_member_wx21689732717371';
  258. }else{
  259. $member_id=Db::name('merchant_member')->where('mer_id',$order['mer_id']) ->where("type",2)->value('member_id');
  260. $key='api_live_90ef02e4-54ac-41ee-adf1-e4927d23d58f';
  261. $app_id='app_0827b960-b932-45ec-b800-4e850091b419';
  262. $member_70 = 'jsdk_member_wx1693641002355';
  263. $member_20 = 'jsdk_member_wx1689731494604';
  264. }
  265. // $member_id=$goods_title['hf_member_id_wx'];
  266. // $app_id='app_0827b960-b932-45ec-b800-4e850091b419';
  267. $type='2';
  268. $pay_channel='wx_pub';
  269. // $key='api_live_90ef02e4-54ac-41ee-adf1-e4927d23d58f';
  270. $expend=[
  271. 'open_id'=>$order['pay_user_id']
  272. ];
  273. }elseif($order['trade_type']=='ALI'){
  274. $member_id=$goods_title['hf_member_id'];
  275. $app_id='app_44108546-d27a-48ee-88c1-84b45b75114f';
  276. $type='1';
  277. $pay_channel='alipay_pub';
  278. $expend=[
  279. 'buyer_id'=>$order['pay_user_id']
  280. ];
  281. $key='api_live_b23537ed-64b8-45d6-832e-fb228aa9e0a9';
  282. $member_70 = 'jsdk_member_ali1693792697054';
  283. $member_20 = 'jsdk_member_ali1689732721557';
  284. // 天地博爱通道
  285. // $app_id='app_0827b960-b932-45ec-b800-4e850091b419';
  286. // $key='api_live_90ef02e4-54ac-41ee-adf1-e4927d23d58f';
  287. }
  288. if($order['mer_id']==324 ){
  289. $div_members = [
  290. [
  291. 'member_id' => $member_id,
  292. 'amount' => bcmul($order['money'], 0.3, 2),
  293. 'fee_flag' => 'N'
  294. ],
  295. [
  296. 'member_id' => $member_70,
  297. 'amount' => bcmul($order['money'], 0.7, 2),
  298. 'fee_flag' => 'Y'
  299. ]
  300. ];
  301. }else if($order['mer_id']==496 ){
  302. $amt = $order['pension'] ; //只给养老金
  303. $amt=sprintf("%01.2f",$amt); //保留2位数字。
  304. $mouny=$order['money']-$amt; //商户货款
  305. $mouny=sprintf("%01.2f",$mouny); //保留2位小时。
  306. $div_members = [
  307. [
  308. 'member_id' => $member_id,
  309. 'amount' => $mouny,
  310. 'fee_flag' => 'Y'
  311. ],
  312. [
  313. 'member_id' => $member_20,
  314. 'amount' => $amt,
  315. 'fee_flag' => 'N'
  316. ]
  317. ];
  318. }else if($order['mer_id']==321 ){
  319. $div_members = [
  320. [
  321. 'member_id' => $member_id,
  322. 'amount' => bcmul($order['money'], 1, 2),
  323. 'fee_flag' => 'Y'
  324. ]
  325. ];
  326. }else{
  327. if($amt=='0.00'){
  328. $div_members=[
  329. [
  330. 'member_id'=>$member_id,
  331. 'amount'=>$mouny,
  332. 'fee_flag'=>'Y'
  333. ]
  334. ];
  335. }else{
  336. $div_members= [
  337. [
  338. 'member_id'=>$member_id,
  339. 'amount'=>$mouny,
  340. 'fee_flag'=>'Y'
  341. ],
  342. [
  343. 'member_id'=>$member_20,
  344. 'amount'=>$amt,
  345. 'fee_flag'=>'N'
  346. ]
  347. ];
  348. }
  349. }
  350. if($order['trade_type']=='WX'){
  351. $params=[
  352. 'order_no'=>$order['out_trade_no'].'_'.rand(000,999),
  353. 'app_id'=>$app_id,
  354. 'pay_channel'=>$pay_channel,
  355. 'pay_amt'=>(string)$order['money'],
  356. 'goods_title'=>$goods_title['mer_name'],
  357. 'goods_desc'=>$goods_title['mer_name'],
  358. 'device_info'=>[
  359. 'device_ip'=>app('request')->ip()
  360. // 'device_ip'=>'115.171.134.68'
  361. ],
  362. 'expend'=>json_encode($expend),
  363. 'div_members'=>json_encode($div_members),
  364. 'fee_mode'=>'I',
  365. 'notify_url'=>env('APP_URL')."/api/jsapiPay/notify/HF"
  366. ];
  367. }elseif($order['trade_type']=='ALI'){
  368. $params=[
  369. 'order_no'=>$order['out_trade_no'].'_'.rand(000,999),
  370. 'app_id'=>$app_id,
  371. 'pay_channel'=>$pay_channel,
  372. 'pay_amt'=>(string)$order['money'],
  373. 'goods_title'=>$goods_title['mer_name'],
  374. 'goods_desc'=>$goods_title['mer_name'],
  375. 'device_info'=>[
  376. 'device_ip'=>app('request')->ip()
  377. // 'device_ip'=>'115.171.134.68'
  378. ],
  379. 'expend'=>json_encode($expend),
  380. 'div_members'=>json_encode($div_members),
  381. 'fee_mode'=>'I',
  382. 'notify_url'=>env('APP_URL')."/api/jsapiPay/notify/HF"
  383. ];
  384. }
  385. // dump($type);return ;
  386. $res=$this->Payment_create_traits($params,$type,$key);
  387. // Db::name('log')->insert(['data'=>'发起支付参数:'.json_encode($params,true)]);
  388. // Db::name('log')->insert(['data'=>'支付返回:'.json_encode($res,true)]);
  389. if(!empty($res['error_code'])){
  390. $res1['code']='1000';
  391. $res1['return_msg']=$res['error_msg'];
  392. $res1['return_code']=1200;
  393. return $res1;
  394. }
  395. $res['code']='1000';
  396. $res['return_code']='999';
  397. return $res;
  398. }
  399. public function HF_DANDU_290($order)
  400. {
  401. $merchant=Db::name('merchant_intention')->where('mer_id',$order['mer_id'])->find();
  402. $goods_title=Db::name('merchant')->where('mer_id',$order['mer_id'])->find();
  403. if($order['trade_type']=='WX'){
  404. $fenyongmember_id=$goods_title['hf_dimension_id_wx'];
  405. $ingtaimember_id=$goods_title['hf_pingtai_id_wx'];
  406. $app_id=$merchant['app_id_wx'];
  407. $type='2';
  408. $pay_channel='wx_pub';
  409. $key=$merchant['hf_api_key_wx'];
  410. $expend=[
  411. 'open_id'=>$order['pay_user_id']
  412. ];
  413. }elseif($order['trade_type']=='ALI'){
  414. $fenyongmember_id=$goods_title['hf_dimension_id_al'];
  415. $ingtaimember_id=$goods_title['hf_pingtai_id_al'];
  416. $app_id=$merchant['app_id'];
  417. $type='1';
  418. $pay_channel='alipay_pub';
  419. $expend=[
  420. 'buyer_id'=>$order['pay_user_id']
  421. ];
  422. $key=$merchant['hf_api_key'];
  423. }
  424. $merchant_money=bcmul($order['money'],'0.4',2);
  425. $fenyongjine=bcmul($order['money'],'0.5',2);
  426. $pingtai_money=bcmul($order['money'],'0.1',2);
  427. $div_members= [
  428. [
  429. 'member_id'=>$fenyongmember_id,
  430. 'amount'=>$fenyongjine,
  431. 'fee_flag'=>'N'
  432. ],
  433. [
  434. 'member_id'=>0,
  435. 'amount'=>$merchant_money,
  436. 'fee_flag'=>'Y'
  437. ],
  438. [
  439. 'member_id'=>$ingtaimember_id,
  440. 'amount'=>$pingtai_money,
  441. 'fee_flag'=>'N'
  442. ]
  443. ];
  444. if($order['trade_type']=='WX'){
  445. $params=[
  446. 'order_no'=>$order['out_trade_no'].'_'.rand(000,999),
  447. 'app_id'=>$app_id,
  448. 'pay_channel'=>$pay_channel,
  449. 'pay_amt'=>(string)$order['money'],
  450. 'goods_title'=>$goods_title['mer_name'],
  451. 'goods_desc'=>$goods_title['mer_name'],
  452. 'device_info'=>[
  453. 'device_ip'=>app('request')->ip()
  454. ],
  455. 'expend'=>json_encode($expend),
  456. 'div_members'=>json_encode($div_members),
  457. 'fee_mode'=>'I',
  458. 'notify_url'=>env('APP_URL')."/api/jsapiPay/notify/HF"
  459. ];
  460. }elseif($order['trade_type']=='ALI'){
  461. $params=[
  462. 'order_no'=>$order['out_trade_no'].'_'.rand(000,999),
  463. 'app_id'=>$app_id,
  464. 'pay_channel'=>$pay_channel,
  465. 'pay_amt'=>(string)$order['money'],
  466. 'goods_title'=>$goods_title['mer_name'],
  467. 'goods_desc'=>$goods_title['mer_name'],
  468. 'device_info'=>[
  469. 'device_ip'=>app('request')->ip()
  470. ],
  471. 'expend'=>json_encode($expend),
  472. 'div_members'=>json_encode($div_members),
  473. 'fee_mode'=>'I',
  474. 'notify_url'=>env('APP_URL')."/api/jsapiPay/notify/HF"
  475. ];
  476. }
  477. $res=$this->Payment_create_traits($params,$type,$key);
  478. if(!empty($res['error_code'])){
  479. $res1['code']='1000';
  480. $res1['return_msg']=$res['error_msg'];
  481. $res1['return_code']=1200;
  482. return $res1;
  483. }
  484. $res['code']='1000';
  485. $res['return_code']='999';
  486. return $res;
  487. }
  488. public function HF_DANDU_276($order)
  489. {
  490. $merchant=Db::name('merchant_intention')->where('mer_id',$order['mer_id'])->find();
  491. $goods_title=Db::name('merchant')->where('mer_id',$order['mer_id'])->find();
  492. if($order['trade_type']=='WX'){
  493. $ingtaimember_id=$goods_title['hf_pingtai_id_wx'];
  494. $app_id=$merchant['app_id_wx'];
  495. $type='2';
  496. $pay_channel='wx_pub';
  497. $key=$merchant['hf_api_key_wx'];
  498. $expend=[
  499. 'open_id'=>$order['pay_user_id']
  500. ];
  501. }elseif($order['trade_type']=='ALI'){
  502. $ingtaimember_id=$goods_title['hf_pingtai_id_al'];
  503. $app_id=$merchant['app_id'];
  504. $type='1';
  505. $pay_channel='alipay_pub';
  506. $expend=[
  507. 'buyer_id'=>$order['pay_user_id']
  508. ];
  509. $key=$merchant['hf_api_key'];
  510. }
  511. $merchant_money=bcmul($order['money'],'0.62',2);
  512. $pingtai_money=bcmul($order['money'],'0.38',2);
  513. $div_members= [
  514. [
  515. 'member_id'=>0,
  516. 'amount'=>$merchant_money,
  517. 'fee_flag'=>'Y'
  518. ],
  519. [
  520. 'member_id'=>$ingtaimember_id,
  521. 'amount'=>$pingtai_money,
  522. 'fee_flag'=>'N'
  523. ]
  524. ];
  525. if($order['trade_type']=='WX'){
  526. $params=[
  527. 'order_no'=>$order['out_trade_no'].'_'.rand(000,999),
  528. 'app_id'=>$app_id,
  529. 'pay_channel'=>$pay_channel,
  530. 'pay_amt'=>(string)$order['money'],
  531. 'goods_title'=>$goods_title['mer_name'],
  532. 'goods_desc'=>$goods_title['mer_name'],
  533. 'device_info'=>[
  534. 'device_ip'=>app('request')->ip()
  535. ],
  536. 'expend'=>json_encode($expend),
  537. 'div_members'=>json_encode($div_members),
  538. 'fee_mode'=>'I',
  539. 'notify_url'=>env('APP_URL')."/api/jsapiPay/notify/HF"
  540. ];
  541. }elseif($order['trade_type']=='ALI'){
  542. $params=[
  543. 'order_no'=>$order['out_trade_no'].'_'.rand(000,999),
  544. 'app_id'=>$app_id,
  545. 'pay_channel'=>$pay_channel,
  546. 'pay_amt'=>(string)$order['money'],
  547. 'goods_title'=>$goods_title['mer_name'],
  548. 'goods_desc'=>$goods_title['mer_name'],
  549. 'device_info'=>[
  550. 'device_ip'=>app('request')->ip()
  551. ],
  552. 'expend'=>json_encode($expend),
  553. 'div_members'=>json_encode($div_members),
  554. 'fee_mode'=>'I',
  555. 'notify_url'=>env('APP_URL')."/api/jsapiPay/notify/HF"
  556. ];
  557. }
  558. $res=$this->Payment_create_traits($params,$type,$key);
  559. if(!empty($res['error_code'])){
  560. $res1['code']='1000';
  561. $res1['return_msg']=$res['error_msg'];
  562. $res1['return_code']=1200;
  563. return $res1;
  564. }
  565. $res['code']='1000';
  566. $res['return_code']='999';
  567. return $res;
  568. }
  569. public function HF_276($order)
  570. {
  571. $goods_title=Db::name('merchant')->where('mer_id',$order['mer_id'])->find();
  572. if($order['trade_type']=='WX'){
  573. $member_id=$goods_title['hf_member_id_wx'];
  574. $app_id='app_0827b960-b932-45ec-b800-4e850091b419';
  575. $type='2';
  576. $pay_channel='wx_pub';
  577. $key='api_live_90ef02e4-54ac-41ee-adf1-e4927d23d58f';
  578. $expend=[
  579. 'open_id'=>$order['pay_user_id']
  580. ];
  581. }elseif($order['trade_type']=='ALI'){
  582. $member_id=$goods_title['hf_member_id'];
  583. $app_id='app_44108546-d27a-48ee-88c1-84b45b75114f';
  584. $type='1';
  585. $pay_channel='alipay_pub';
  586. $expend=[
  587. 'buyer_id'=>$order['pay_user_id']
  588. ];
  589. $key='api_live_b23537ed-64b8-45d6-832e-fb228aa9e0a9';
  590. }
  591. $amt = $order['service_money'] + $order['pension'];
  592. $amt=sprintf("%01.2f",$amt);
  593. $mouny=$order['money']-$amt;
  594. $mouny=sprintf("%01.2f",$mouny);
  595. if($amt=='0.00'){
  596. $div_members=[
  597. [
  598. 'member_id'=>$member_id,
  599. 'amount'=>$mouny,
  600. 'fee_flag'=>'Y'
  601. ]
  602. ];
  603. }else{
  604. $div_members= [
  605. [
  606. 'member_id'=>$member_id,
  607. 'amount'=>$mouny,
  608. 'fee_flag'=>'Y'
  609. ],
  610. [
  611. 'member_id'=>0,
  612. 'amount'=>$amt,
  613. 'fee_flag'=>'N'
  614. ]
  615. ];
  616. }
  617. if($order['trade_type']=='WX'){
  618. $params=[
  619. 'order_no'=>$order['out_trade_no'].'_'.rand(000,999),
  620. 'app_id'=>$app_id,
  621. 'pay_channel'=>$pay_channel,
  622. 'pay_amt'=>(string)$order['money'],
  623. 'goods_title'=>$goods_title['mer_name'],
  624. 'goods_desc'=>$goods_title['mer_name'],
  625. 'device_info'=>[
  626. 'device_ip'=>app('request')->ip()
  627. // 'device_ip'=>'115.171.134.68'
  628. ],
  629. 'expend'=>json_encode($expend),
  630. 'div_members'=>json_encode($div_members),
  631. 'fee_mode'=>'I',
  632. 'notify_url'=>env('APP_URL')."/api/jsapiPay/notify/HF"
  633. ];
  634. }elseif($order['trade_type']=='ALI'){
  635. $params=[
  636. 'order_no'=>$order['out_trade_no'].'_'.rand(000,999),
  637. 'app_id'=>$app_id,
  638. 'pay_channel'=>$pay_channel,
  639. 'pay_amt'=>(string)$order['money'],
  640. 'goods_title'=>$goods_title['mer_name'],
  641. 'goods_desc'=>$goods_title['mer_name'],
  642. 'device_info'=>[
  643. 'device_ip'=>app('request')->ip()
  644. // 'device_ip'=>'115.171.134.68'
  645. ],
  646. // 'expend'=>json_encode($expend),
  647. 'div_members'=>json_encode($div_members),
  648. 'fee_mode'=>'I',
  649. 'notify_url'=>env('APP_URL')."/api/jsapiPay/notify/HF"
  650. ];
  651. }
  652. // dump($type);return ;
  653. $res=$this->Payment_create_traits($params,$type,$key);
  654. if(!empty($res['error_code'])){
  655. $res1['code']='1000';
  656. $res1['return_msg']=$res['error_msg'];
  657. $res1['return_code']=1200;
  658. return $res1;
  659. }
  660. $res['code']='1000';
  661. $res['return_code']='999';
  662. return $res;
  663. }
  664. /**
  665. * 支付后回调处理
  666. * @return mixed
  667. * @author php迷途小书童
  668. * @created 2021/1/16 14:41
  669. */
  670. public function notify($type){
  671. if($type=='HK'){
  672. try {
  673. $post = $this->request->post();
  674. Log::info($post);
  675. $bool = $this->doNotify($post);
  676. if (!$bool)
  677. return app('json')->success(['result' => 'ERROR']);
  678. $bool = $this->repository->doNotify($post);
  679. if (!$bool)
  680. return app('json')->success(['result' => 'ERROR']);
  681. return app('json')->success(['result' => 'SUCCESS']);
  682. } catch (\Throwable $e) {
  683. Log::info($e->getMessage());
  684. return app('json')->status('error', $e->getMessage());
  685. }
  686. }elseif ($type=='HF'){
  687. $post=$this->request->param();
  688. Db::name("log")->insert(array('data'=>'【异步接受到的参数】'.json_encode($post),));//日志记录
  689. $post_data_str = isset($post['data']) ? $post['data']: '';
  690. $post_sign_str = isset($post['sign']) ? $post['sign']: '';
  691. # 先校验签名和返回的数据的签名的数据是否一致
  692. $adapay_tools=new AdapayTools();
  693. AdapayTools::setRsaPrivateKey('MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBALFOkwRKx2HKMpAL7LUb755cIS7mleort++Rkl25tJMJCf9Ezeyg4xwLBN6RQsLERTAzRKc/EUtxm4/9rzDzvNZ4BegEI8mXWBUrgpn7e1ar8Ek8IRPdXLrozuld9cv56R3yB/Yta0R+kmgCfn2C5V+xtM6njimkOStvdK5cNwqFAgMBAAECgYA5pn+87IeJr1Hjbk0n0g6GYhRUCJuECXUEC0QY/3HMQSsj+f4uy10s2BRcPcUESQbqFjFjY+k+q5DWL7kP5KBoXGnFyflAyRhWGTkSC3VhGixh6ro3EcUJSrFDjGaThGaPrc8Zfcp5JhL5Thi0GaBXSnRH1Cmn4h8gkAEJxIM7PQJBAOq2+oVPtqkj99YRs0eewkZAM7bKRzSwI7OFU6YWsCYVkqNE7Lr3KKGekehuWwkOvrCBR+NEGQfAb557g2CHmzMCQQDBYtgQ5wvl9fD8BWAVKuPoxoleH+9wUQ65Rnt/Ebkx+g8kP37JRun81duLDULTKr/3ak42goE00TfnfeXl0gNnAkA0wuUVypF4/AjeKiRu2RU6zXvSfy36fg3IcRQYpcj7BqZr5TaB4MVVb1vFL+lu482hx63tPIWT5IIy0fj6XgFZAkBinlKLRBgIPISZMPCPuuCg22ZADs8fGucEStI9ub8Uom3IUW0JndVDb5fW8HtMjrd4p8ic+a6ETdFRhx2PNqsvAkAzDvlve56sZnLYx9t/MPkJTK3ZhgVETS0H2FUyJGVOSfjv68bNsUshyPfzJrdbCeLzjMLq8TpyOmiIUAeQ5YCX');
  694. // $adapay_tools->SetParams();
  695. $sign_flag = $adapay_tools->verifySign($post_data_str, $post_sign_str);
  696. $post_data_str=json_decode($post_data_str,true);
  697. if ($sign_flag){
  698. try {
  699. if(empty($post_data_str['error_msg'])){
  700. Db::name("log")->insert(array('data'=>'【验签通过-支付】:时间:'.date('Y-m-d H:i:s',time()),));//日志记录
  701. $bool = $this->repository->doNotifyHF($post_data_str);
  702. }else{
  703. Db::name('order_merchant')->where('out_trade_no', explode('/', $post_data_str['payment_order_no'][0]))->update(['status'=>5]);
  704. }
  705. if (!$bool)
  706. return app('json')->success(['result' => 'ERROR']);
  707. return app('json')->success(['result' => 'SUCCESS']);
  708. }catch (Exception $exception){
  709. return app('json')->fail('错误2');
  710. }
  711. }
  712. }elseif ($type == 'HF_pay_user_annual'){
  713. $post=$this->request->param();
  714. Db::name("log")->insert(array('data'=>'【异步接受到的参数】'.json_encode($post),));//日志记录
  715. $post_data_str = isset($post['data']) ? $post['data']: '';
  716. $post_sign_str = isset($post['sign']) ? $post['sign']: '';
  717. # 先校验签名和返回的数据的签名的数据是否一致
  718. $adapay_tools=new AdapayTools();
  719. AdapayTools::setRsaPrivateKey('MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBALFOkwRKx2HKMpAL7LUb755cIS7mleort++Rkl25tJMJCf9Ezeyg4xwLBN6RQsLERTAzRKc/EUtxm4/9rzDzvNZ4BegEI8mXWBUrgpn7e1ar8Ek8IRPdXLrozuld9cv56R3yB/Yta0R+kmgCfn2C5V+xtM6njimkOStvdK5cNwqFAgMBAAECgYA5pn+87IeJr1Hjbk0n0g6GYhRUCJuECXUEC0QY/3HMQSsj+f4uy10s2BRcPcUESQbqFjFjY+k+q5DWL7kP5KBoXGnFyflAyRhWGTkSC3VhGixh6ro3EcUJSrFDjGaThGaPrc8Zfcp5JhL5Thi0GaBXSnRH1Cmn4h8gkAEJxIM7PQJBAOq2+oVPtqkj99YRs0eewkZAM7bKRzSwI7OFU6YWsCYVkqNE7Lr3KKGekehuWwkOvrCBR+NEGQfAb557g2CHmzMCQQDBYtgQ5wvl9fD8BWAVKuPoxoleH+9wUQ65Rnt/Ebkx+g8kP37JRun81duLDULTKr/3ak42goE00TfnfeXl0gNnAkA0wuUVypF4/AjeKiRu2RU6zXvSfy36fg3IcRQYpcj7BqZr5TaB4MVVb1vFL+lu482hx63tPIWT5IIy0fj6XgFZAkBinlKLRBgIPISZMPCPuuCg22ZADs8fGucEStI9ub8Uom3IUW0JndVDb5fW8HtMjrd4p8ic+a6ETdFRhx2PNqsvAkAzDvlve56sZnLYx9t/MPkJTK3ZhgVETS0H2FUyJGVOSfjv68bNsUshyPfzJrdbCeLzjMLq8TpyOmiIUAeQ5YCX');
  720. // $adapay_tools->SetParams();
  721. $sign_flag = $adapay_tools->verifySign($post_data_str, $post_sign_str);
  722. $post_data_str=json_decode($post_data_str,true);
  723. if ($sign_flag){
  724. try {
  725. if(empty($post_data_str['error_msg'])){
  726. Db::name("log")->insert(array('data'=>'【验签通过-支付】:时间:'.date('Y-m-d H:i:s',time()),));//日志记录
  727. if(strpos($post_data_str['order_no'],'_') !== false){
  728. $order_no = explode("_",$post_data_str['order_no'])[0];
  729. }else{
  730. $order_no = $post_data_str['order_no'];
  731. }
  732. $user_pension_account_order=Db::name('user_pension_account_order')-> where('order_no',$order_no)->find();
  733. if (!$user_pension_account_order){
  734. return app('json')->success(['result' => 'fail']);
  735. }
  736. if($user_pension_account_order['status']==1){
  737. return app('json')->success(['result' => 'SUCCESS']);
  738. }
  739. Db::startTrans();
  740. try {
  741. $pay_type = $post_data_str['pay_channel'] == "wx_pub" ? "WX" : "ALI";
  742. $uid = $user_pension_account_order['uid'];
  743. Db::name('user_pension_account_order')-> where('order_no',$order_no) -> update(['status'=>1,'pay_time'=>date('Y-m-d H:i:s'),'pay_type'=>$pay_type]);
  744. $check = Db::name("user_pension_account") -> where("uid",$uid) -> find();
  745. $start_time = date('Y-m-d');
  746. $end_time = date("Y-m-d 23:59:59",strtotime("+1 year", strtotime($start_time)));
  747. $give = 0;
  748. //存在既续费
  749. if ($check){
  750. Db::name("user_pension_account") -> where("uid",$uid) -> update(['start_time'=>$start_time,'end_time'=>$end_time]);
  751. }else{
  752. //新用户订单
  753. Db::name("user_pension_account") -> insert([
  754. "uid" => $uid,
  755. "start_time" => $start_time,
  756. "end_time" => $end_time,
  757. "status" => 1,
  758. ]);
  759. }
  760. Db::name("user_pension_account") -> where("uid",$uid) -> update(['give' => 1]);
  761. if ($user_pension_account_order['type'] > 1){
  762. $mark = "购买大礼包补贴养老金";
  763. $ylj=sprintf("%01.2f",bcmul($user_pension_account_order['pay_price'],'0.1',5));//10%的养老金
  764. $billData=[
  765. 'uid'=>$uid,
  766. 'pm'=>1,
  767. 'title'=>'养老金',
  768. 'category'=>'now_money',
  769. 'type'=>'commission',
  770. 'number'=>$ylj,
  771. 'balance'=>0,
  772. 'mark'=>$mark,
  773. 'create_time'=>date("Y-m-d H:i:s",time()),
  774. 'status'=>1,
  775. 'order_sn'=>'',
  776. 'type_shop'=>0,
  777. 'commission_type'=>5,
  778. 'order_type'=>1,
  779. 'gzc'=>0
  780. ];
  781. Db::name('user_bill')->insert($billData);
  782. Db::name("user")->where("uid",$uid)->inc('annuity', $ylj) ->update();
  783. Db::name("user")->where("uid",$uid)->inc('annuity_num', 1) ->update();
  784. //上级佣金
  785. $spread_uid = Db::name('user') -> where('uid',$uid) -> value('spread_uid');
  786. //上级给佣金10%
  787. $commission=sprintf("%01.2f",bcmul($user_pension_account_order['pay_price'],'0.1',5));//10%的佣金
  788. $spreadTitle='用户购买大礼包获得佣金';
  789. $spreadMark = "用户购买大礼包获得佣金";
  790. $spreadBillData=[
  791. 'uid'=>$spread_uid,
  792. 'link_id'=>0,
  793. 'pm'=>1,
  794. 'title'=>$spreadTitle,
  795. 'category'=>'now_money',
  796. 'type'=>'commission',
  797. 'number'=>$commission,
  798. 'balance'=>0,
  799. 'mark'=>$spreadMark,
  800. 'create_time'=>date("Y-m-d H:i:s",time()),
  801. 'status'=>1,
  802. 'order_sn'=>$user_pension_account_order['order_no'],
  803. 'type_shop'=>0,
  804. 'commission_type'=>3,
  805. 'order_type'=>1
  806. ];
  807. Db::name('user_bill')->insert($spreadBillData);
  808. Db::name('user')->where('uid',$spread_uid)->inc('brokerage_price',$commission)->update();
  809. }
  810. // 提交事务
  811. Db::commit();
  812. return true;
  813. } catch (\Exception $e) {
  814. // 回滚事务
  815. Db::rollback();
  816. Log::error($e->getMessage());
  817. }
  818. }
  819. return app('json')->success(['result' => 'SUCCESS']);
  820. }catch (\Exception $exception){
  821. return app('json')->fail('错误2');
  822. }
  823. }
  824. }
  825. }
  826. /**
  827. * 查询订单API
  828. * @return mixed
  829. * @author php迷途小书童
  830. * @created 2021/1/16 10:05
  831. */
  832. public function queryOrder(){
  833. $out_trade_no = (string)$this->request->param('out_trade_no');
  834. $data = $this->doQueryOrder($out_trade_no);
  835. return app('json')->success($data);
  836. }
  837. /**
  838. * 关闭订单API
  839. * @return bool|string
  840. * @author php迷途小书童
  841. * @created 2021/1/16 10:05
  842. */
  843. public function closeOrder(){
  844. $out_trade_no = (string)$this->request->param('out_trade_no');
  845. $data = $this->doCloseOrder($out_trade_no);
  846. return app('json')->success($data);
  847. }
  848. /**
  849. * 申请退款API
  850. * @return bool|string
  851. * @author php迷途小书童
  852. * @created 2021/1/16 10:05
  853. */
  854. public function refundApply(){
  855. $out_trade_no = (string)$this->request->param('out_trade_no');
  856. $order = $this->repository->getOne($out_trade_no);
  857. if (!$order)
  858. return app('json')->fail('订单不存在');
  859. makeLock()->lock();
  860. try {
  861. $refund_no=$this->repository->getNewOrderId($order->trade_type);
  862. $this->repository->updateOrder($order,
  863. [
  864. 'refund_no' => $refund_no,
  865. 'status' => 2,
  866. ]
  867. );
  868. } catch (\Throwable $e) {
  869. makeLock()->unlock();
  870. return app('json')->fail($e->getMessage());
  871. }
  872. makeLock()->unlock();
  873. try {
  874. // $data = $this->doRefundApply(['out_trade_no'=>$order['out_trade_no'],'refund_no'=>$refund_no,'money'=>$order['money']]);
  875. $data=$this->hf_refund($order,$refund_no);
  876. return app('json')->success($data);
  877. } catch (\Throwable $e) {
  878. return app('json')->status('error', $e->getMessage(), ['out_trade_no' => $order->out_trade_no]);
  879. }
  880. }
  881. public function hf_refund($order,$refund_no)
  882. {
  883. $goods_title=Db::name('merchant')->where('mer_id',$order['mer_id'])->find();
  884. if($order['trade_type']=='WX'){
  885. $member_id=$goods_title['hf_member_id_wx'];
  886. $key='api_live_90ef02e4-54ac-41ee-adf1-e4927d23d58f';
  887. }elseif($order['trade_type']=='ALI'){
  888. $member_id=$goods_title['hf_member_id'];
  889. $key='api_live_b23537ed-64b8-45d6-832e-fb228aa9e0a9';
  890. }
  891. $amt = $order['service_money'] + $order['pension']+$order['swipe_fee'];
  892. $amt=sprintf("%01.2f",$amt);
  893. $mouny=$order['money']-$amt;
  894. $mouny=sprintf("%01.2f",$mouny);
  895. if($amt=='0.00'){
  896. $div_members=[
  897. [
  898. 'member_id'=>$member_id,
  899. 'amount'=>$mouny,
  900. 'fee_flag'=>'Y'
  901. ]
  902. ];
  903. }else{
  904. $div_members= [
  905. [
  906. 'member_id'=>$member_id,
  907. 'amount'=>$mouny,
  908. 'fee_flag'=>'Y'
  909. ],
  910. [
  911. 'member_id'=>0,
  912. 'amount'=>$amt,
  913. 'fee_flag'=>'N'
  914. ]
  915. ];
  916. }
  917. return $this->Payment_refund_traits(['id'=>$order['hf_pay_id'],'refund_order_no'=>$refund_no,'refund_amt'=>$order['money'],'div_members'=>$div_members,'notify_url'=>env('APP_URL')."/api/jsapiPay/refund_notify/HF"],$key);
  918. }
  919. /**
  920. * 申请退款API回调
  921. * @return bool|string
  922. * @author php迷途小书童
  923. * @created 2021/1/16 10:05
  924. */
  925. public function refundNotify($type){
  926. try {
  927. if($type=='HF'){
  928. $post=$this->request->param();
  929. Db::name("log")->insert(array('data'=>'【异步接受到的参数】'.json_encode($post),));//日志记录
  930. $post_data_str = isset($post['data']) ? $post['data']: '';
  931. $post_sign_str = isset($post['sign']) ? $post['sign']: '';
  932. # 先校验签名和返回的数据的签名的数据是否一致
  933. $adapay_tools=new AdapayTools();
  934. AdapayTools::setRsaPrivateKey('MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBALFOkwRKx2HKMpAL7LUb755cIS7mleort++Rkl25tJMJCf9Ezeyg4xwLBN6RQsLERTAzRKc/EUtxm4/9rzDzvNZ4BegEI8mXWBUrgpn7e1ar8Ek8IRPdXLrozuld9cv56R3yB/Yta0R+kmgCfn2C5V+xtM6njimkOStvdK5cNwqFAgMBAAECgYA5pn+87IeJr1Hjbk0n0g6GYhRUCJuECXUEC0QY/3HMQSsj+f4uy10s2BRcPcUESQbqFjFjY+k+q5DWL7kP5KBoXGnFyflAyRhWGTkSC3VhGixh6ro3EcUJSrFDjGaThGaPrc8Zfcp5JhL5Thi0GaBXSnRH1Cmn4h8gkAEJxIM7PQJBAOq2+oVPtqkj99YRs0eewkZAM7bKRzSwI7OFU6YWsCYVkqNE7Lr3KKGekehuWwkOvrCBR+NEGQfAb557g2CHmzMCQQDBYtgQ5wvl9fD8BWAVKuPoxoleH+9wUQ65Rnt/Ebkx+g8kP37JRun81duLDULTKr/3ak42goE00TfnfeXl0gNnAkA0wuUVypF4/AjeKiRu2RU6zXvSfy36fg3IcRQYpcj7BqZr5TaB4MVVb1vFL+lu482hx63tPIWT5IIy0fj6XgFZAkBinlKLRBgIPISZMPCPuuCg22ZADs8fGucEStI9ub8Uom3IUW0JndVDb5fW8HtMjrd4p8ic+a6ETdFRhx2PNqsvAkAzDvlve56sZnLYx9t/MPkJTK3ZhgVETS0H2FUyJGVOSfjv68bNsUshyPfzJrdbCeLzjMLq8TpyOmiIUAeQ5YCX');
  935. // $adapay_tools->SetParams();
  936. $sign_flag = $adapay_tools->verifySign($post_data_str, $post_sign_str);
  937. $post_data_str=json_decode($post_data_str,true);
  938. if ($sign_flag){
  939. if(empty($post_data_str['error_code'])){
  940. Db::name("log")->insert(array('data'=>'【退款验签通过 时间:】'.date('Y-m-d H:i:s',time())));
  941. $bool = $this->repository->doRefundNotify( $post_data_str['refund_order_no']);
  942. }
  943. if (!$bool)
  944. return app('json')->success(['result' => 'ERROR']);
  945. return app('json')->success(['result' => 'SUCCESS']);
  946. }
  947. }
  948. $post = $this->request->post();
  949. $bool = $this->doNotify($post);
  950. if (!$bool)
  951. return app('json')->success(['result' => 'ERROR']);
  952. $bool = $this->repository->doRefundNotify($post);
  953. if (!$bool)
  954. return app('json')->success(['result' => 'ERROR']);
  955. return app('json')->success(['result' => 'SUCCESS']);
  956. } catch (\Throwable $e) {
  957. return app('json')->status('error', $e->getMessage());
  958. }
  959. }
  960. /**
  961. * 退款查询API
  962. * @return bool|string
  963. * @author php迷途小书童
  964. * @created 2021/1/16 10:04
  965. */
  966. public function refundQuery(){
  967. $refund_no = (string)$this->request->param('refund_no');
  968. $data = $this->doRefundQuery($refund_no);
  969. return app('json')->success($data);
  970. }
  971. /**
  972. * 账户余额查询
  973. * @return mixed
  974. * @author php迷途小书童
  975. * @created 2021/1/16 10:04
  976. */
  977. public function balanceQuery(){
  978. $merch_no = env('JSAPI.MERCH_NO');//海科商户编号
  979. $data = $this->dobalanceQuery($merch_no);
  980. return app('json')->success($data);
  981. }
  982. public function queryOrders(){
  983. $out_trade_no = (string)$this->request->param('out_trade_no');
  984. $data = Db::name("order_merchant")
  985. -> alias("om")
  986. -> join("merchant m","om.mer_id = m.mer_id")
  987. -> where("out_trade_no",$out_trade_no) -> field("om.money,om.status,om.out_trade_no,om.pension,om.pay_time,m.mer_name") -> find();
  988. return app('json')->success($data);
  989. }
  990. }