OrderMerchant.php 44 KB

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