Pay.php 77 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879
  1. <?php
  2. namespace app\api\controller\v1;
  3. use app\api\services\AliPayServices;
  4. use app\api\services\ThirdPayServices;
  5. use app\api\services\WxPayServices;
  6. use app\common\model\ShopGoodsModel;
  7. use app\common\model\ShopOrderGoodsModel as OrderGoods;
  8. use app\common\model\ShopOrderModel;
  9. use app\common\model\UserModel;
  10. use app\common\service\PaymentService;
  11. use app\common\service\SystemConfigService;
  12. use app\common\service\UserBankSignService;
  13. use app\common\service\YsBankService;
  14. use app\model\UserDataModel;
  15. use app\model\VipOrderModel;
  16. use app\Request;
  17. use app\services\balancePayServices;
  18. use app\services\OfflinePayServices;
  19. use jobs\VipOrderJob;
  20. use think\Exception;
  21. use think\facade\Db;
  22. use utils\RedisCache;
  23. /**
  24. * 支付处理 by wes
  25. * Class Pay
  26. * @package app\api\controller\v1
  27. */
  28. class Pay
  29. {
  30. /**
  31. * 支付方式配置
  32. * @param Request $request
  33. * @return \think\Response
  34. */
  35. public function payconfig(Request $request)
  36. {
  37. $setting = [];
  38. $appresource = $request->post('app_sources', '');
  39. $order_type = $request->post('order_type');
  40. if (empty($order_type)) {
  41. return api_error_return('参数错误');
  42. }
  43. // 石区支付宝支付
  44. array_push($setting, ['is_open' => 1, 'channel' => 22, 'title' => '支付宝支付', 'icon' => getWebUrl() . '/static/img/payconfig/ic_zhifubao.png']);
  45. // 商城购买
  46. if ($order_type == 4) {
  47. if ($appresource == 'android') {
  48. // 石学长 银联支付
  49. array_push($setting, ['is_open' => 1, 'channel' => 15, 'title' => '银联(协议绑卡)', 'icon' => getWebUrl() . '/static/img/payconfig/ic_yinlian_pay.png']);
  50. }
  51. if ($appresource == 'ios') {
  52. // 石学长 银联支付
  53. array_push($setting, ['is_open' => 1, 'channel' => 15, 'title' => '银联', 'icon' => getWebUrl() . '/static/img/payconfig/ic_yinlian_pay.png']);
  54. }
  55. }
  56. // 购买服务商
  57. if ($order_type == 6) {
  58. if ($appresource == 'android') {
  59. // 石学长 银联支付
  60. array_push($setting, ['is_open' => 1, 'channel' => 15, 'title' => '银联(协议绑卡)', 'icon' => getWebUrl() . '/static/img/payconfig/ic_yinlian_pay.png']);
  61. }
  62. if ($appresource == 'ios') {
  63. // 石学长 银联支付
  64. array_push($setting, ['is_open' => 1, 'channel' => 15, 'title' => '银联(协议绑卡)', 'icon' => getWebUrl() . '/static/img/payconfig/ic_yinlian_pay.png']);
  65. }
  66. }
  67. return api_succ_return(['msg' => '成功', 'data' => ['setting' => $setting]]);
  68. }
  69. /**
  70. * 生成支付订单
  71. * @param Request $request
  72. * @return \think\Response
  73. */
  74. public function paymentInfo(Request $request)
  75. {
  76. $post = $request->post();
  77. $curandroid = env('app.CUR_ANDROID_VERSION', '');
  78. $curios = env('app.CUR_IOS_VERSION', '');;
  79. $curAndroidVersion = str_replace('.', '', $curandroid);
  80. $curAndroidVersion = dispRepair($curAndroidVersion, 4, '0', '0');
  81. $curIosVersion = str_replace('.', '', $curios);
  82. $curIosVersion = dispRepair($curIosVersion, 4, '0', '0');
  83. $app_sources = $request->param('app_sources');
  84. $app_version = $request->param('app_version');
  85. $app_version = str_replace('.', '', $app_version);
  86. $app_version = dispRepair($app_version, 4, '0', '0');
  87. if ($app_sources == 'ios') {
  88. if ($curIosVersion > $app_version) {
  89. return api_error_return('app版本号过低,请更新');
  90. }
  91. }
  92. if ($app_sources == 'android') {
  93. if ($curAndroidVersion > $app_version) {
  94. return api_error_return('app版本号过低,请更新');
  95. }
  96. }
  97. if (empty($app_sources) || empty($app_version)) {
  98. if ($curAndroidVersion > $app_version) {
  99. return api_error_return('app版本号过低,请更新');
  100. }
  101. }
  102. // 限制提交调起
  103. $channel = $request->data['channel']; // 支付方式 1 支付宝支付 2 微信支付 3 余额 4 线下
  104. $orderSn = $request->data['order_id'];
  105. $orderType = isset($post['order_type']) ? intval($post['order_type']) : 0;
  106. $cacheKeyLock = "caches:payment:locks:u{$request->uid}_t{$orderType}_{$channel}";
  107. if (RedisCache::get($cacheKeyLock)) {
  108. return api_error_return('您的操作过于频繁,请5秒钟后重试');
  109. }
  110. // 加锁
  111. RedisCache::setnx($cacheKeyLock, 1, rand(2, 3));
  112. try {
  113. // 服务商订单验证
  114. if ($orderType == 6) {
  115. $userInfo = UserModel::where(['id' => $request->uid])->field('id,store_type')->findOrEmpty();
  116. $storeType = isset($userInfo['store_type']) ? $userInfo['store_type'] : 0;
  117. if ($storeType == 1) {
  118. throw new Exception('已是服务商,无需再次开通');
  119. }
  120. }
  121. if (!in_array($channel, [14, 15, 20, 22])) {
  122. throw new Exception('支付类型错误');
  123. }
  124. if ($post['order_type'] == 4) {
  125. if (empty($post['order_id'])) {
  126. throw new Exception('参数错误');
  127. }
  128. // 验证订单是否已支付
  129. if (PaymentService::make()->checkPaymentState($request->uid, $orderSn)) {
  130. throw new Exception('订单或已支付');
  131. }
  132. // 订单状态验证
  133. if (!ShopOrderModel::where(['order_sn' => $post['order_id'], 'status' => 0])->value('order_id')) {
  134. throw new Exception('订单不存在或已支付');
  135. }
  136. // 两小时内同一个订单调起未支付数量限制
  137. $limitPayCount = SystemConfigService::make()->getConfigByName('trade_call_pay_limit',1,'tradeconfig');
  138. $limitPayCount = $limitPayCount? $limitPayCount : env('PAYMENT.UNPAY_LIMIT_NUM',5);
  139. $count = PaymentService::make()->getPaymentCountByState($request->uid, $orderSn, 4, 7, 2);
  140. if ($count >= $limitPayCount) {
  141. throw new Exception("2小时内该笔订单请求支付已超过{$limitPayCount}次,请稍后再试");
  142. }
  143. }
  144. // 支付通道处理
  145. switch ($channel) {
  146. case 1:
  147. // 微信支付
  148. $result = WxPayServices::instance()->userId($request->uid)->data($request->data)->getUnifiedOrder();
  149. break;
  150. case 2:
  151. // 支付宝支付
  152. $result = AliPayServices::instance()->uid($request->uid)->data($request->data)->getUnifiedOrder();
  153. break;
  154. case 3:
  155. // 余额支付
  156. getActionSecury($request->uid, $request->post('security_pass', ''));
  157. $ser = new \app\api\services\BalancePayServices();
  158. $ser->balanceToOrder($request->uid, $request->post('order_id', ''));
  159. $result = api_succ_return(['msg' => '余额支付调用成功', 'data' => []]);
  160. break;
  161. case 14:
  162. // 第三方支付 汇付支付支付
  163. {
  164. $pay = new ThirdPayServices();
  165. $result = $pay->getHfPayInfoHF($request->uid, $request->data);
  166. }
  167. break;
  168. case 15:
  169. // 第三方支付 石区长
  170. {
  171. $pay = new ThirdPayServices();
  172. $result = $pay->getPayInfoSQZ($request->uid, $request->data);
  173. }
  174. break;
  175. case 16:
  176. // 第三方支付 支付宝 石区长
  177. {
  178. $pay = new ThirdPayServices();
  179. $result = $pay->getPayInfoSQZAlipay($request->uid, $request->data);
  180. }
  181. break;
  182. case 17:
  183. // 第三方支付 微信 石区长
  184. {
  185. $pay = new ThirdPayServices();
  186. $result = $pay->getPayInfoSQZWechat($request->uid, $request->data);
  187. }
  188. break;
  189. case 18:
  190. // 第三方支付 银联快捷 石区长 首信易
  191. {
  192. $pay = new ThirdPayServices();
  193. $result = $pay->getPayInfoSQZBankkuai($request->uid, $request->data);
  194. }
  195. break;
  196. case 19:
  197. // 第三方支付 usdt充值
  198. {
  199. $pay = new ThirdPayServices();
  200. $result = $pay->getPayInfoUsdt($request->uid, $request->data);
  201. }
  202. break;
  203. case 20:
  204. // 直连银盛 无卡快捷
  205. {
  206. $pay = new ThirdPayServices();
  207. $result = $pay->getPayInfoYSwk($request->uid, $request->data);
  208. }
  209. break;
  210. case 22:
  211. // 支付宝 电科科技支付
  212. {
  213. $pay = new ThirdPayServices();
  214. $result = $pay->getPayInfoDiankeZfb($request->uid, $request->data);
  215. }
  216. break;
  217. case 56:
  218. // 第三方支付 易票联统一支付
  219. {
  220. $pay = new ThirdPayServices();
  221. $result = $pay->getYsfPayInfoTY($request->uid, $request->data);
  222. }
  223. break;
  224. }
  225. } catch (Exception $e) {
  226. RedisCache::clear($cacheKeyLock);
  227. return api_error_return($e->getMessage());
  228. }
  229. RedisCache::keyDel("caches:paymentCall:u{$request->uid}_ot{$orderType}*");
  230. return $result;
  231. }
  232. /**
  233. * 快捷确认支付
  234. * @param Request $request
  235. * @return \think\Response
  236. */
  237. public function zlysSurePay(Request $request)
  238. {
  239. $post = $request->post();
  240. if (empty($post['trade_no']) || empty($post['sms_code'])) {
  241. return api_error_return('参数错误');
  242. }
  243. Db::startTrans();
  244. try {
  245. $ser = new ThirdPayServices();
  246. $res = $ser->kjPayWithCode($post['trade_no'], $post['sms_code']);
  247. Db::commit();
  248. } catch (\Exception $e) {
  249. Db::rollback();
  250. return api_error_return($e->getMessage());
  251. }
  252. return $res;
  253. }
  254. /**
  255. * 直连银盛 支持的银行卡列表
  256. * @param Request $request
  257. * @return \think\Response
  258. * @throws \think\db\exception\DataNotFoundException
  259. * @throws \think\db\exception\DbException
  260. * @throws \think\db\exception\ModelNotFoundException
  261. */
  262. public function zlysBankList(Request $request)
  263. {
  264. try{
  265. $post = $request->post();
  266. $pageSize = isset($post['limit'])? $post['limit'] : 0;
  267. return api_succ_return(['msg' => '成功', 'data' => YsBankService::make()->getList($post, $pageSize)]);
  268. }catch (\Exception $exception){
  269. return api_error_return('获取错误:'.$exception->getMessage());
  270. }
  271. }
  272. /**
  273. * 银盛银行卡支付支持的银行通道
  274. * @param Request $request
  275. * @return \think\Response
  276. */
  277. public function zlysBankPayWay(Request $request)
  278. {
  279. return api_succ_return(['msg' => '成功', 'data' => [
  280. ['bank_name' => '工商银行', 'xiane' => '单笔1万、单日1万、单月5万', 'jieji' => '是', 'xinyong' => '是'],
  281. ['bank_name' => '中国银行', 'xiane' => '单笔5万,单日5万', 'jieji' => '否', 'xinyong' => '是'],
  282. ['bank_name' => '建设银行', 'xiane' => '单笔1万、单日1万、单月5万', 'jieji' => '是', 'xinyong' => '是'],
  283. ['bank_name' => '招商银行', 'xiane' => '单笔5万,单日5万', 'jieji' => '否', 'xinyong' => '是'],
  284. ['bank_name' => '光大银行', 'xiane' => '单笔0.5万、单日5万 ', 'jieji' => '是', 'xinyong' => '是'],
  285. ['bank_name' => '民生银行', 'xiane' => '2万/2万', 'jieji' => '是', 'xinyong' => '是'],
  286. ['bank_name' => '浦发银行', 'xiane' => '借单笔/日2万、贷单笔/日1万、月不限', 'jieji' => '是', 'xinyong' => '是'],
  287. ['bank_name' => '平安银行', 'xiane' => '单笔5万、单日5万、月不限', 'jieji' => '是', 'xinyong' => '否'],
  288. ['bank_name' => '广发银行', 'xiane' => '贷记卡(单笔3w,单日3w)、借记卡(单笔2w,单日2w)', 'jieji' => '是', 'xinyong' => '是'],
  289. ['bank_name' => '中信银行', 'xiane' => '单笔5万、日/月不限', 'jieji' => '是', 'xinyong' => '是'],
  290. ['bank_name' => '交通银行', 'xiane' => '单笔2万,单日2万,单月5万', 'jieji' => '否', 'xinyong' => '是'],
  291. ['bank_name' => '渤海银行', 'xiane' => '借单笔3w,单日3w;贷单笔2w,单日2w', 'jieji' => '是', 'xinyong' => '是'],
  292. ['bank_name' => '上海银行', 'xiane' => '借单笔1w单日1万;贷单笔2w,日不限', 'jieji' => '是', 'xinyong' => '是'],
  293. ['bank_name' => '华夏银行', 'xiane' => '日累计2万,月累计60万', 'jieji' => '是', 'xinyong' => '否'],
  294. ['bank_name' => '邮储银行', 'xiane' => '借记卡:无限额,以发卡测为准;贷记卡:单笔2万、单日2万', 'jieji' => '是', 'xinyong' => '是'],
  295. ['bank_name' => '浙商银行', 'xiane' => '单笔2万、单日2万', 'jieji' => '是', 'xinyong' => '是'],
  296. ['bank_name' => '区域银行', 'xiane' => '无', 'jieji' => '是', 'xinyong' => '是']]
  297. ]);
  298. }
  299. /**
  300. * 支付宝支付回调
  301. * @param Request $request
  302. * @return mixed
  303. */
  304. public function aliResult(Request $request)
  305. {
  306. return AliPayServices::instance()->data($request->param())->getNotifyInfo()->afterPay();
  307. }
  308. /**
  309. * 支付宝支付回调 多来贝
  310. * @param Request $request
  311. * @return mixed
  312. */
  313. public function aliResultDLB(Request $request)
  314. {
  315. sr_log('----------------------支付三方回调-------------------------');
  316. sr_log($request);
  317. sr_log($request->param());
  318. sr_log('----------------------支付三方回调-------------------------');
  319. // DLB1649854201945040279940469OP
  320. $result = [
  321. 'order_id' => 'DLB1649854201945040279940469OP'
  322. ];
  323. // 897d9ea909093173b24dd89c772181e4
  324. // if (!$result || !$result->sign){
  325. // echo 'success';
  326. // die();
  327. // }
  328. // $sign = thirdPayGetSign($result, '897d9ea909093173b24dd89c772181e4');
  329. // if ($result['sign'] != $sign){
  330. // echo 'success';
  331. // die();
  332. // }
  333. $pay_info = Db::name('payment')->where('out_trade_no', $result['order_id'])->find();
  334. if (!$pay_info) {
  335. echo 'success';
  336. die();
  337. } else {
  338. if ($pay_info['state'] != 7) {
  339. echo 'success';
  340. die();
  341. }
  342. Db::startTrans();
  343. try {
  344. Db::name('payment')->where('id', $pay_info['id'])->update(['state' => 6, 'pay_at' => date('Y-m-d H:i:s')]); // 更改订单状态
  345. switch ($pay_info['order_type']) {
  346. case 1: // 充值
  347. break;
  348. case 3:
  349. // 充值会员
  350. //
  351. break;
  352. case 4: //购买商品
  353. // $order = Order::where(['order_sn' => explode(',', $pay_info['remarks'])])->select()->toArray();
  354. // Order::payDoneOrderCallback($order, 3, $pay_info['uid']);
  355. $m_goods = new ShopGoodsModel();
  356. $m_user = new UserModel();
  357. $m_shoporder = new ShopOrderModel();
  358. // 更改订单状态
  359. $order = ShopOrderModel::where('order_sn', $pay_info['remarks'])->find();
  360. $nowTime = date('Y-m-d H:i:s', time());
  361. Db::name('shop_order')->where(['order_sn' => $pay_info['remarks']])
  362. ->update(['pay_type' => 2, 'status' => 1, 'updated_time' => $nowTime]);
  363. // 增加销量
  364. $orderGoods = OrderGoods::where(['order_id' => $order['order_id']])->select()->toArray();
  365. foreach ($orderGoods as $k => $v) {
  366. ShopGoodsModel::where(['goods_id' => $v['goods_id']])->inc('sales_volume', $v['num'])->inc('real_sales_volume', $v['num'])->update();
  367. }
  368. // 送积分
  369. edit_user_score(5, $order['user_id'], $order['rebate_score']);
  370. edit_user_redscore(1, $order['user_id'], $order['rebate_lock_score']);
  371. break;
  372. }
  373. Db::commit();
  374. echo 'success';
  375. die;
  376. } catch (\Exception $e) {
  377. Db::rollback();
  378. echo 'failure';
  379. die;
  380. }
  381. }
  382. echo 'success';
  383. die();
  384. }
  385. /**
  386. * 微信支付回调 多来贝
  387. * @param Request $request
  388. * @return mixed
  389. */
  390. public function wechatResultDLB(Request $request)
  391. {
  392. sr_log('----------------------支付三方回调-------------------------');
  393. sr_log(json_encode($request->param()));
  394. sr_log('----------------------支付三方回调-------------------------');
  395. $result = $request->param();
  396. // {"body":"\u8d2d\u4e70\u5546\u54c1","order_no":"DLB1649940431291160101494681OP","external_order_no":"35054704392204140847101649940430","channel_order_no":"22041420471399027444900","total_amount":"0.01","pay_amount":"0.01","status":"1","note":"","pay_time":"1649940443","sign":"A836A4214BE26C145DF55C0F1F1ACDAB"}
  397. // {
  398. // "body": "购买商品",
  399. // "order_no": "DLB1649939394489656266205439OP",
  400. // "external_order_no": "55936444392204140829541649939394",
  401. // "channel_order_no": "22041420300550260054535",
  402. // "total_amount": "0.01",
  403. // "pay_amount": "0.01",
  404. // "status": "1",
  405. // "note": "",
  406. // "pay_time": "1649939414",
  407. // "sign": "7614744071B389F19388E681DD02A353"
  408. // }
  409. // 897d9ea909093173b24dd89c772181e4
  410. // sr_log('开始回调');
  411. try {
  412. if (!$result || !$result['sign']) {
  413. sr_log('11111');
  414. echo 'success';
  415. die();
  416. }
  417. $sign = thirdPayGetSign($result, '897d9ea909093173b24dd89c772181e4');
  418. if ($result['sign'] != $sign) {
  419. sr_log('222222');
  420. echo 'success';
  421. die();
  422. }
  423. if ($result['status'] != 1) {
  424. sr_log('33333333');
  425. echo 'success';
  426. die();
  427. }
  428. } catch (Exception $e) {
  429. echo 'success';
  430. sr_log('aaa' . $e->getMessage());
  431. die();
  432. }
  433. $pay_info = Db::name('payment')->where('out_trade_no', $result['order_no'])->find();
  434. if (!$pay_info) {
  435. sr_log('333333333');
  436. echo 'success';
  437. die();
  438. } else {
  439. if ($pay_info['state'] != 7) {
  440. sr_log('8888' . '已经处理过了');
  441. echo 'success';
  442. die();
  443. }
  444. if ($result['total_amount'] < $pay_info['total_fee']) {
  445. sr_testDb(json_encode($pay_info), 1);
  446. sr_log('9999' . '支付金额错误');
  447. echo 'success';
  448. die();
  449. }
  450. Db::startTrans();
  451. try {
  452. Db::name('payment')->where('id', $pay_info['id'])->update(['state' => 6, 'pay_at' => date('Y-m-d H:i:s')]); // 更改订单状态
  453. switch ($pay_info['order_type']) {
  454. case 1: // 充值
  455. break;
  456. case 3:
  457. // 充值会员
  458. //
  459. break;
  460. case 4: //购买商品
  461. // $order = Order::where(['order_sn' => explode(',', $pay_info['remarks'])])->select()->toArray();
  462. // Order::payDoneOrderCallback($order, 3, $pay_info['uid']);
  463. $m_goods = new ShopGoodsModel();
  464. $m_user = new UserModel();
  465. $m_shoporder = new ShopOrderModel();
  466. // 更改订单状态
  467. $order = ShopOrderModel::where('order_sn', $pay_info['remarks'])->find();
  468. $nowTime = date('Y-m-d H:i:s', time());
  469. Db::name('shop_order')->where(['order_sn' => $pay_info['remarks']])
  470. ->update(['pay_type' => 2, 'status' => 1, 'updated_time' => $nowTime]);
  471. // 增加销量
  472. $orderGoods = OrderGoods::where(['order_id' => $order['order_id']])->select()->toArray();
  473. foreach ($orderGoods as $k => $v) {
  474. ShopGoodsModel::where(['goods_id' => $v['goods_id']])->inc('sales_volume', $v['num'])->inc('real_sales_volume', $v['num'])->update();
  475. }
  476. // 送积分
  477. edit_user_score(5, $order['user_id'], $order['rebate_score']);
  478. edit_user_redscore(1, $order['user_id'], $order['rebate_lock_score']);
  479. break;
  480. }
  481. Db::commit();
  482. echo 'success';
  483. die;
  484. } catch (\Exception $e) {
  485. Db::rollback();
  486. echo 'failure';
  487. sr_log('微信多乐宝报错:' . $e->getMessage());
  488. die;
  489. }
  490. }
  491. echo 'success';
  492. die();
  493. }
  494. /**
  495. * 微信支付回调 畅联
  496. * @param Request $request
  497. * @return mixed
  498. */
  499. public function wechatResultCL(Request $request)
  500. {
  501. sr_log('----------------------支付三方回调-------------------------');
  502. sr_log(json_encode($request->param()));
  503. sr_log('----------------------支付三方回调-------------------------');
  504. $result = $request->param();
  505. // {
  506. // "callbacks": "CODE_SUCCESS",
  507. // "appid": "1059174",
  508. // "pay_type": "wechat",
  509. // "success_url": "http:\/\/www.baidu.com",
  510. // "error_url": "http:\/\/www.baidu.com",
  511. // "out_trade_no": "90898975872204150713401650021220",
  512. // "amount": "0.02",
  513. // "sign": "3F63CCE3522D487BEEDBDCA97B306C86"
  514. //}
  515. // "amount": "609",
  516. try {
  517. if (!$result || !$result['sign']) {
  518. sr_log('cl11111');
  519. echo 'success';
  520. die();
  521. }
  522. $sign = thirdPayCheckSignCL($result, 'XMLfjHMPOGexsSaadIWSVCNG0XJBClZZ');
  523. if ($result['sign'] != $sign) {
  524. sr_log('cl222222');
  525. echo 'success';
  526. die();
  527. }
  528. if ($result['callbacks'] != 'CODE_SUCCESS') {
  529. sr_log('cl33333333');
  530. echo 'success';
  531. die();
  532. }
  533. } catch (Exception $e) {
  534. echo 'success';
  535. sr_log('claaa' . $e->getMessage());
  536. die();
  537. }
  538. $pay_info = Db::name('payment')->where('out_trade_no', $result['out_trade_no'])->find();
  539. if (!$pay_info) {
  540. sr_log('cl333333333');
  541. echo 'success';
  542. die();
  543. } else {
  544. if ($pay_info['state'] != 7) {
  545. sr_log('cl8888' . '已经处理过了');
  546. echo 'success';
  547. die();
  548. }
  549. if ($result['amount'] < $pay_info['total_fee']) {
  550. sr_testDb(json_encode($pay_info), 1);
  551. sr_log('cl9999' . '支付金额错误');
  552. echo 'success';
  553. die();
  554. }
  555. Db::startTrans();
  556. try {
  557. $pay_info = Db::name('payment')->where('out_trade_no', $result['out_trade_no'])->lock(true)->find();
  558. Db::name("thirdpay_back")->insert([
  559. 'out_order_no' => $result['out_trade_no'],
  560. 'content' => json_encode($result),
  561. 'create_time' => sr_getcurtime(time()),
  562. 'type' => 1,
  563. 'uid' => $pay_info['uid']
  564. ]);
  565. if (empty($pay_info)) {
  566. throw new Exception('畅联并发了');
  567. }
  568. Db::name('payment')->where('id', $pay_info['id'])->update(['state' => 6, 'pay_at' => date('Y-m-d H:i:s')]); // 更改订单状态
  569. switch ($pay_info['order_type']) {
  570. case 1: // 充值
  571. break;
  572. case 3:
  573. // 充值会员
  574. //
  575. break;
  576. case 4: //购买商品
  577. // $order = Order::where(['order_sn' => explode(',', $pay_info['remarks'])])->select()->toArray();
  578. // Order::payDoneOrderCallback($order, 3, $pay_info['uid']);
  579. $m_goods = new ShopGoodsModel();
  580. $m_user = new UserModel();
  581. $m_shoporder = new ShopOrderModel();
  582. // 更改订单状态
  583. $order = ShopOrderModel::where('order_sn', $pay_info['remarks'])->find();
  584. $nowTime = date('Y-m-d H:i:s', time());
  585. Db::name('shop_order')->where(['order_sn' => $pay_info['remarks']])
  586. ->update(['status' => 1, 'pay_type' => 7, 'updated_time' => $nowTime]);
  587. // 增加销量
  588. $orderGoods = OrderGoods::where(['order_id' => $order['order_id']])->select()->toArray();
  589. foreach ($orderGoods as $k => $v) {
  590. ShopGoodsModel::where(['goods_id' => $v['goods_id']])->inc('sales_volume', $v['num'])->inc('real_sales_volume', $v['num'])->update();
  591. }
  592. $user = $m_user->where('id', $pay_info['uid'])->find();
  593. // if ($user['pid'] > 0){
  594. // if (Db::name('user')->where('id', $user['pid'])->where('is_auth', 1)->find()){
  595. // edit_user_score(15, $user['pid'], number_format($pay_info['total_fee']/100, 4, '.', ''));
  596. // }
  597. //
  598. // }
  599. // 送积分
  600. edit_user_score(5, $order['user_id'], $order['rebate_score']);
  601. edit_user_redscore(1, $order['user_id'], $order['rebate_lock_score']);
  602. break;
  603. }
  604. Db::commit();
  605. } catch (\Exception $e) {
  606. Db::rollback();
  607. sr_log('cl微信报错:' . $e->getMessage());
  608. echo 'failure';
  609. die;
  610. }
  611. echo 'success';
  612. die();
  613. }
  614. echo 'success';
  615. die();
  616. }
  617. /**
  618. * 支付宝支付回调 畅联
  619. * @param Request $request
  620. * @return mixed
  621. */
  622. public function AliResultCL(Request $request)
  623. {
  624. sr_log('----------------------支付三方回调-------------------------');
  625. sr_log(json_encode($request->param()));
  626. sr_log('----------------------支付三方回调-------------------------');
  627. $result = $request->param();
  628. // {
  629. // "callbacks": "CODE_SUCCESS",
  630. // "appid": "1059174",
  631. // "pay_type": "wechat",
  632. // "success_url": "http:\/\/www.baidu.com",
  633. // "error_url": "http:\/\/www.baidu.com",
  634. // "out_trade_no": "90898975872204150713401650021220",
  635. // "amount": "0.02",
  636. // "sign": "3F63CCE3522D487BEEDBDCA97B306C86"
  637. //}
  638. // "amount": "609",
  639. // try {
  640. // if (!$result || !$result['sign']){
  641. // sr_log('cl11111');
  642. // echo 'success';
  643. // die();
  644. // }
  645. // $sign = thirdPayCheckSignCL($result, 'XMLfjHMPOGexsSaadIWSVCNG0XJBClZZ');
  646. // if ($result['sign'] != $sign){
  647. // sr_log('cl222222');
  648. // echo 'success';
  649. // die();
  650. // }
  651. //
  652. // if ($result['callbacks'] != 'CODE_SUCCESS'){
  653. // sr_log('cl33333333');
  654. // echo 'success';
  655. // die();
  656. // }
  657. //
  658. // }catch (Exception $e){
  659. // echo 'success';
  660. // sr_log('claaa'.$e->getMessage());
  661. // die();
  662. // }
  663. $pay_info = Db::name('payment')->where('out_trade_no', $result['out_trade_no'])->find();
  664. if (!$pay_info) {
  665. sr_log('cl333333333');
  666. echo 'success';
  667. die();
  668. } else {
  669. if ($pay_info['state'] != 7) {
  670. sr_log('cl8888' . '已经处理过了');
  671. echo 'success';
  672. die();
  673. }
  674. if ($result['amount'] < $pay_info['total_fee']) {
  675. sr_testDb(json_encode($pay_info), 1);
  676. sr_log('cl9999' . '支付金额错误');
  677. echo 'success';
  678. die();
  679. }
  680. $key = 'api' . $request->pathinfo() . $result['out_trade_no'];
  681. Db::startTrans();
  682. try {
  683. redisLock($key);
  684. $pay_info = Db::name('payment')->where('out_trade_no', $result['out_trade_no'])->lock(true)->find();
  685. Db::name("thirdpay_back")->insert([
  686. 'out_order_no' => $result['out_trade_no'],
  687. 'content' => json_encode($result),
  688. 'create_time' => sr_getcurtime(time()),
  689. 'type' => 1,
  690. 'uid' => $pay_info['uid']
  691. ]);
  692. if (empty($pay_info)) {
  693. throw new Exception('畅联支付宝并发了');
  694. }
  695. Db::name('payment')->where('id', $pay_info['id'])->update(['state' => 6, 'pay_at' => date('Y-m-d H:i:s')]); // 更改订单状态
  696. switch ($pay_info['order_type']) {
  697. case 1: // 充值
  698. break;
  699. case 3:
  700. // 充值会员
  701. //
  702. break;
  703. case 4: //购买商品
  704. // $order = Order::where(['order_sn' => explode(',', $pay_info['remarks'])])->select()->toArray();
  705. // Order::payDoneOrderCallback($order, 3, $pay_info['uid']);
  706. $m_goods = new ShopGoodsModel();
  707. $m_user = new UserModel();
  708. $m_shoporder = new ShopOrderModel();
  709. // 更改订单状态
  710. $order = ShopOrderModel::where('order_sn', $pay_info['remarks'])->find();
  711. $nowTime = date('Y-m-d H:i:s', time());
  712. Db::name('shop_order')->where(['order_sn' => $pay_info['remarks']])
  713. ->update(['status' => 1, 'pay_type' => 8, 'updated_time' => $nowTime]);
  714. // 增加销量
  715. $orderGoods = OrderGoods::where(['order_id' => $order['order_id']])->select()->toArray();
  716. foreach ($orderGoods as $k => $v) {
  717. ShopGoodsModel::where(['goods_id' => $v['goods_id']])->inc('sales_volume', $v['num'])->inc('real_sales_volume', $v['num'])->update();
  718. }
  719. $user = $m_user->where('id', $pay_info['uid'])->find();
  720. // if ($user['pid'] > 0){
  721. // if (Db::name('user')->where('id', $user['pid'])->where('is_auth', 1)->find()){
  722. // edit_user_score(15, $user['pid'], number_format($pay_info['total_fee']/100, 4, '.', ''));
  723. // }
  724. //
  725. // }
  726. // 送积分
  727. edit_user_score(5, $order['user_id'], $order['rebate_score']);
  728. edit_user_redscore(1, $order['user_id'], $order['rebate_lock_score']);
  729. break;
  730. }
  731. Db::commit();
  732. } catch (\Exception $e) {
  733. Db::rollback();
  734. if ($e->getCode() != apiPingFanCode()) {
  735. redisFree($key);
  736. }
  737. sr_log('cl支付宝报错:' . $e->getMessage());
  738. echo 'failure';
  739. die;
  740. }
  741. redisFree($key);
  742. echo 'success';
  743. die();
  744. }
  745. echo 'success';
  746. die();
  747. }
  748. /**
  749. * mo宝银联回调 富友
  750. * @param Request $request
  751. * @return mixed
  752. */
  753. public function BankResultFY(Request $request)
  754. {
  755. $res = file_get_contents('php://input');
  756. sr_log('----------------------支付三方富有回调-------------------------');
  757. sr_log($res);
  758. sr_log('----------------------支付三方富有回调-------------------------');
  759. $result = json_decode($res);
  760. if (isset($result->mchnt_cd) && isset($result->message) && isset($result->resp_code) && isset($result->resp_desc)) {
  761. if ($result->resp_code == 0000) {
  762. $res_decode = json_decode(RSA_openssl($result->message, 'decode'));
  763. if (isset($res_decode->order_st) && $res_decode->order_st == 1) {
  764. $out_trade_no = 'FYYL' . $res_decode->order_id;
  765. $pay_info = Db::name('payment')->where('out_trade_no', $out_trade_no)->find();
  766. if ($pay_info) {
  767. if ($pay_info['state'] == 7) {
  768. if ($res_decode->order_amt < bcmul($pay_info['total_fee'], 100, 0)) {
  769. echo 'success';
  770. die();
  771. }
  772. $key = 'api' . $request->pathinfo() . $out_trade_no;
  773. Db::startTrans();
  774. try {
  775. redisLock($key);
  776. $pay_info = Db::name('payment')->where('out_trade_no', $out_trade_no)->lock(true)->find();
  777. Db::name("thirdpay_back")->insert([
  778. 'out_order_no' => $out_trade_no,
  779. 'content' => json_encode($res_decode),
  780. 'create_time' => sr_getcurtime(time()),
  781. 'type' => 2,
  782. 'uid' => $pay_info['uid']
  783. ]);
  784. Db::name('payment')->where('id', $pay_info['id'])->update(['state' => 6, 'pay_at' => date('Y-m-d H:i:s')]); // 更改订单状态
  785. switch ($pay_info['order_type']) {
  786. case 1: // 充值
  787. break;
  788. case 3:
  789. // 充值会员
  790. //
  791. break;
  792. case 4: //购买商品
  793. // $order = Order::where(['order_sn' => explode(',', $pay_info['remarks'])])->select()->toArray();
  794. // Order::payDoneOrderCallback($order, 3, $pay_info['uid']);
  795. $m_goods = new ShopGoodsModel();
  796. $m_user = new UserModel();
  797. $m_shoporder = new ShopOrderModel();
  798. // 更改订单状态
  799. $order = ShopOrderModel::where('order_sn', $pay_info['remarks'])->find();
  800. $nowTime = date('Y-m-d H:i:s', time());
  801. Db::name('shop_order')->where(['order_sn' => $pay_info['remarks']])
  802. ->update(['status' => 1, 'pay_type' => 9, 'updated_time' => $nowTime]);
  803. // 增加销量
  804. $orderGoods = OrderGoods::where(['order_id' => $order['order_id']])->select()->toArray();
  805. foreach ($orderGoods as $k => $v) {
  806. ShopGoodsModel::where(['goods_id' => $v['goods_id']])->inc('sales_volume', $v['num'])->inc('real_sales_volume', $v['num'])->update();
  807. }
  808. $user = $m_user->where('id', $pay_info['uid'])->find();
  809. // if ($user['pid'] > 0){
  810. // if (Db::name('user')->where('id', $user['pid'])->where('is_auth', 1)->find()){
  811. // edit_user_score(15, $user['pid'], number_format($pay_info['total_fee']/100, 4, '.', ''));
  812. // }
  813. //
  814. // }
  815. // 送积分
  816. edit_user_score(5, $order['user_id'], $order['rebate_score']);
  817. edit_user_redscore(1, $order['user_id'], $order['rebate_lock_score']);
  818. // 释放用户福利积分或者锁定积分到余额
  819. $sf_money = intval(intval($pay_info['total_fee']) / 100) * 5;
  820. if ($sf_money > 0) {
  821. $is_sf = false;
  822. if ($user['score_away'] > $sf_money && !$is_sf) {
  823. if ($user['score_away'] <= $sf_money) {
  824. $sf_money = intval($user['score_away']);
  825. }
  826. edit_user_score(24, $pay_info['uid'], $sf_money);
  827. edit_user_scoreaway(8, $pay_info['uid'], $sf_money);
  828. $is_sf = true;
  829. }
  830. if ($user['score_lock'] > $sf_money && !$is_sf) {
  831. edit_user_score(25, $pay_info['uid'], $sf_money);
  832. edit_user_lock_score(2, $pay_info['uid'], $sf_money);
  833. $is_sf = true;
  834. }
  835. }
  836. break;
  837. }
  838. Db::commit();
  839. } catch (\Exception $e) {
  840. Db::rollback();
  841. if ($e->getCode() != apiPingFanCode()) {
  842. redisFree($key);
  843. }
  844. sr_log('fy支付报错:' . $e->getMessage());
  845. echo 'failure';
  846. die;
  847. }
  848. }
  849. }
  850. }
  851. }
  852. }
  853. redisFree($key);
  854. echo 'success';
  855. die;
  856. }
  857. /**
  858. * 进件审核回调
  859. * @param Request $request
  860. */
  861. public function yplApplyResult(Request $request)
  862. {
  863. $res = file_get_contents('php://input');
  864. sr_log('----------------------ypl审核回调-------------------------');
  865. sr_log($res);
  866. sr_log('----------------------ypl审核回调-------------------------');
  867. echo "0000";
  868. die();
  869. }
  870. /**
  871. * @param Request $request
  872. */
  873. public function ZfbResultYPL(Request $request)
  874. {
  875. $res = file_get_contents('php://input');
  876. sr_log('----------------------ypl回调-------------------------');
  877. sr_log($res);
  878. sr_log('----------------------ypl回调-------------------------');
  879. // {"amount":5,"payTime":"20220622201730","transactionNo":"32202206228301997902995","cashAmount":5,"customerCode":"562012003860535","payState":"00","attachData":"attachData","channelOrder":"192022062222001491231433402953","buyerId":"2088612998991235","buyerLogonId":"sun***@163.com","nonceStr":"fba32d45251940f1b4acbfe5112aa7f6","procedureFee":0,"payerInfo":{"cardType":"D","fundChannel":"ALIPAYACCOUNT"},"outTradeNo":"YPL202206212246385110016927164"}
  880. $res = json_decode($res, true);
  881. // $res = json_decode('{"amount":5,"payTime":"20220622201730","transactionNo":"32202206228301997902995","cashAmount":5,"customerCode":"562012003860535","payState":"00","attachData":"attachData","channelOrder":"192022062222001491231433402953","buyerId":"2088612998991235","buyerLogonId":"sun***@163.com","nonceStr":"fba32d45251940f1b4acbfe5112aa7f6","procedureFee":0,"payerInfo":{"cardType":"D","fundChannel":"ALIPAYACCOUNT"},"outTradeNo":"YPL202206212246385110016927164"}', true);
  882. Db::startTrans();
  883. try {
  884. if ($res['payState'] != '00') {
  885. echo "0000";
  886. die();
  887. }
  888. $pay_info = Db::name('payment')->where('out_trade_no', $res['outTradeNo'])->lock(true)->find();
  889. // if (Db::name('thirdpay_back')->where('out_order_no')->find()){
  890. // echo "0000";
  891. // die();
  892. // }
  893. Db::name("thirdpay_back")->insert([
  894. 'out_order_no' => $res['outTradeNo'],
  895. 'content' => json_encode($res),
  896. 'create_time' => sr_getcurtime(time()),
  897. 'type' => 3,
  898. 'uid' => $pay_info['uid']
  899. ]);
  900. Db::name('payment')->where('id', $pay_info['id'])->update(['state' => 6, 'pay_at' => date('Y-m-d H:i:s')]); // 更改订单状态
  901. switch ($pay_info['order_type']) {
  902. case 1: // 充值
  903. break;
  904. case 3:
  905. // 充值会员
  906. //
  907. break;
  908. case 4: //购买商品
  909. // $order = Order::where(['order_sn' => explode(',', $pay_info['remarks'])])->select()->toArray();
  910. // Order::payDoneOrderCallback($order, 3, $pay_info['uid']);
  911. $m_goods = new ShopGoodsModel();
  912. $m_user = new UserModel();
  913. $m_shoporder = new ShopOrderModel();
  914. // 更改订单状态
  915. $order = ShopOrderModel::where('order_sn', $pay_info['remarks'])->find();
  916. $nowTime = date('Y-m-d H:i:s', time());
  917. Db::name('shop_order')->where(['order_sn' => $pay_info['remarks']])
  918. ->update(['status' => 1, 'pay_type' => 8, 'updated_time' => $nowTime]);
  919. // 增加销量
  920. $orderGoods = OrderGoods::where(['order_id' => $order['order_id']])->select()->toArray();
  921. foreach ($orderGoods as $k => $v) {
  922. ShopGoodsModel::where(['goods_id' => $v['goods_id']])->inc('sales_volume', $v['num'])->inc('real_sales_volume', $v['num'])->update();
  923. }
  924. $user = $m_user->where('id', $pay_info['uid'])->find();
  925. // if ($user['pid'] > 0){
  926. // if (Db::name('user')->where('id', $user['pid'])->where('is_auth', 1)->find()){
  927. // edit_user_score(15, $user['pid'], number_format($pay_info['total_fee']/100, 4, '.', ''));
  928. // }
  929. //
  930. // }
  931. // 送积分
  932. edit_user_score(5, $order['user_id'], $order['rebate_score']);
  933. edit_user_redscore(1, $order['user_id'], $order['rebate_lock_score']);
  934. // 释放用户福利积分或者锁定积分到余额
  935. $sf_money = intval(intval($pay_info['total_fee']) / 100) * 5;
  936. if ($sf_money > 0) {
  937. $is_sf = false;
  938. if ($user['score_away'] > $sf_money && !$is_sf) {
  939. if ($user['score_away'] <= $sf_money) {
  940. $sf_money = intval($user['score_away']);
  941. }
  942. edit_user_score(24, $pay_info['uid'], $sf_money);
  943. edit_user_scoreaway(8, $pay_info['uid'], $sf_money);
  944. $is_sf = true;
  945. }
  946. if ($user['score_lock'] > $sf_money && !$is_sf) {
  947. edit_user_score(25, $pay_info['uid'], $sf_money);
  948. edit_user_lock_score(2, $pay_info['uid'], $sf_money);
  949. $is_sf = true;
  950. }
  951. }
  952. break;
  953. }
  954. Db::commit();
  955. } catch (\Exception $e) {
  956. Db::rollback();
  957. sr_log('ypl报错:' . $e->getMessage());
  958. echo "0000";
  959. die();
  960. }
  961. echo "0000";
  962. die();
  963. }
  964. public function ZfbResultHF(Request $request)
  965. {
  966. /**
  967. * 判断支付异步回调业务处理
  968. * User: shuaishuai.niu
  969. * Date: 2020/11/16
  970. * Time: 14:01
  971. */
  972. // $res = file_get_contents('php://input');
  973. // $post_data = json_decode($_POST['data'],1);
  974. sr_log('----------------------汇付回调-------------------------');
  975. sr_log($_POST['data']);
  976. sr_log('----------------------汇付回调-------------------------');
  977. $params = $_POST['data'];
  978. # 加载SDK需要的文件
  979. include_once "../extend/thirdpay/AdapaySdk/init.php";
  980. # 加载商户的配置文件
  981. include_once "../extend/thirdpay/config.php";
  982. $adapay_tools = new \AdaPaySdk\AdapayTools();
  983. # POST 接收的数据的key
  984. # create_time, data, prod_mode, sign, id, type,app_id
  985. # array(
  986. # 'app_id' => 'app_fe1ec54d-e7cd-432a-a994-c12c3d8295f8',
  987. # 'created_time' => '20201115182858',
  988. # 'end_time' => '20201115182904',
  989. # 'expend' => [
  990. # 'bank_type' => 'OTHERS',
  991. # 'open_id' => '1123213123123',
  992. # 'sub_open_id'=> '36323333333'
  993. # ],
  994. # 'id' => '002112020111518285710173995928213929984',
  995. # 'order_no' => 'SH20201115182857625624',
  996. # 'out_trans_id' => '4200000839202011155051561044',
  997. # 'party_order_id' => '02212011156653808201465',
  998. # 'pay_amt' => '02212011156653808201465',
  999. # 'pay_channel' => '02212011156653808201465',
  1000. # 'status' => 'succeeded'
  1001. # )
  1002. $post_data = json_decode($_POST['data'], 1);
  1003. // $post_data = json_decode('{"app_id":"app_4f8d1f05-bcfd-4e9e-b093-b60c43036f2d","created_time":"1662776991","description":"\u8d2d\u4e70\u5546\u54c1","expend":{"pay_info":"https:\/\/qr.alipay.com\/bax04520xxibramp0fkm30ac"},"id":"002112022091010295110414500898441043968","object":"payment","order_no":"HFPAY202209101029485308739531608","party_order_id":"02212209103779136200665","pay_amt":"0.19","pay_channel":"alipay","prod_mode":"true","query_url":"https:\/\/api.adapay.tech\/v1\/expire\/payments\/1\/fae1cfb9d8fd3b44cf5645dab40603a4","status":"succeeded"}', true);
  1004. $post_data_str = json_encode($post_data, JSON_UNESCAPED_UNICODE);
  1005. $post_sign_str = isset($_POST['sign']) ? $_POST['sign'] : '';
  1006. // 此处只是个示例 需要测试请去掉注释
  1007. //$post_data_str = "{\"app_id\":\"app_fe1ec54d-e7cd-432a-a994-c12c3d8295f8\",\"created_time\":\"20201115182858\",\"end_time\":\"20201115182904\",\"expend\":{\"bank_type\":\"OTHERS\",\"open_id\":\"o8jhotwaUEffs1fyWE5O3N4HWvbk\",\"sub_open_id\":\"o4WGIxA59TYBzEKdwz_s6actNIYY\"},\"id\":\"002112020111518285710173995928213929984\",\"order_no\":\"SH20201115182857625624\",\"out_trans_id\":\"4200000839202011155051561044\",\"party_order_id\":\"02212011156653808201465\",\"pay_amt\":\"0.01\",\"pay_channel\":\"wx_pub\",\"status\":\"succeeded\"}";
  1008. //
  1009. //$sign_flag = $adapay_tools->verifySign($post_data_str,"YXOWP5pyL38cZvXbVTyr4Lp9tpr2IzYmc5+EXuNofMTPPlCMfgXX4aBHT8QhxmKMYe95TBklWrM6IAdSLqIBXyc7CYnEYh0o54QHH4H\/yKy5yiOqFCbcHAHPhtJPU28rj+dHbG7YG\/4Qk5psFoBuOTP99ACizLy\/uiILYY3UhJk=");
  1010. # 先校验签名和返回的数据的签名的数据是否一致
  1011. $sign_flag = $adapay_tools->verifySign($post_data_str, $post_sign_str);
  1012. // sr_log('汇付支付宝回调:'.json_encode($post_data));
  1013. // sr_log('$post_data_str:'.$post_data_str);
  1014. if ($sign_flag) {
  1015. // sr_log("签名验证通过");
  1016. # 业务方自己的逻辑
  1017. // $res = {"app_id":"app_4f8d1f05-bcfd-4e9e-b093-b60c43036f2d","created_time":"1662713634","description":"\u8d2d\u4e70\u5546\u54c1","expend":{"pay_info":"https:\/\/qr.alipay.com\/bax08139bwvehcew1b3t30c8"},"id":"002112022090916535410414235160744284160","object":"payment","order_no":"HFPAY20220909165205254560022948","party_order_id":"02212209096083454601956","pay_amt":"0.19","pay_channel":"alipay","prod_mode":"true","query_url":"https:\/\/api.adapay.tech\/v1\/expire\/payments\/1\/380d6a9c3aa72e53eeb65e04ec062043","status":"succeeded"}
  1018. Db::startTrans();
  1019. try {
  1020. if ($post_data['status'] != 'succeeded') {
  1021. sr_throw('成功1');
  1022. }
  1023. $pay_info = Db::name('payment')->where('out_trade_no', $post_data['order_no'])->lock(true)->find();
  1024. if ($pay_info['state'] != 7) {
  1025. sr_throw('成功1');
  1026. }
  1027. $service = new ThirdPayServices();
  1028. $service->payBack($post_data['order_no'], 0, 14, json_encode($params));
  1029. Db::commit();
  1030. } catch (\Exception $e) {
  1031. Db::rollback();
  1032. sr_log('汇付支付宝回调报错:' . $e->getMessage());
  1033. return api_succ_return('成功2' . $e->getMessage());
  1034. die();
  1035. }
  1036. return api_succ_return('成功');
  1037. die();
  1038. } else {
  1039. sr_log('签名不通过:[' . $post_sign_str . ']' . 'post_data_str--[' . $post_data_str . ']');
  1040. return api_succ_return('成功1');
  1041. die();
  1042. }
  1043. }
  1044. /**
  1045. * 微信支付回调
  1046. * @param Request $request
  1047. * @return mixed
  1048. */
  1049. public function wxResult(Request $request)
  1050. {
  1051. file_put_contents('/www/wwwroot/lxzn.lebogyl.com/wechat.txt', var_export(file_get_contents('php://input'), true) . '--------' . date('H:i:s') . PHP_EOL, FILE_APPEND);
  1052. file_put_contents('/www/wwwroot/lxzn.lebogyl.com/wechat1.txt', var_export($request->header(), true) . '--------' . date('H:i:s') . PHP_EOL, FILE_APPEND);
  1053. // $data['body'] = '{"id":"d7d3eeff-7dc7-525b-99ea-fe362afc0ce8","create_time":"2022-03-31T21:20:42+08:00","resource_type":"encrypt-resource","event_type":"TRANSACTION.SUCCESS","summary":"支付成功","resource":{"original_type":"transaction","algorithm":"AEAD_AES_256_GCM","ciphertext":"y5G7RcAN27Nc42W/Ciw97A+Ts8SeRx/72EDgdDbr2Jc4zK00rCW4T2h8Fp/ny+9Hefii4EhrwRD4g76QMKW81kA44x9j9/uH/jmjR0wCglnDuwaoePPDACgYpBL1gj+O9zxqtzcvpRTyQtzEpbtxG9aVp3muNVfh52le9qZbtNaDjMJfCjZRj6a4qJ1XHxjwS3AC5I3E5q9n3a2nyhMiEsgiwbTR5m+fUY3FTxE1WGO7DY+xfYoz3GDiGdGi+gsDeLBxX/w3U1ieajUTUCtBlf9XAaa08fAuj05F6/SicntJc9SnRxNGBVqmX7LrWWKI6jpRdmSOHYfUuoz4+e1FzPBAtAY+9BjYcRP+XdRf659YpuWlUuzvTPQ+gdiADPo4Aszt8jHqtYADxLoeO7KwZraVme5oH5RPogiGd/30Pqn6y3PkhDmkpnvYmL9xDYB2PQMxbNeZX9n3mtDE41ZqoYUULPJSGhxc/fAtFrLV/C5Vj/NVPhomQhRBZgQx8myfUA4yRrJF/Xs0oVIbkUknoXacRBm02qaTNmxv+dLv+YrIQ9xt/3KP3VoaHvTqVAkEza65kGDijEyNdRQJYw==","associated_data":"transaction","nonce":"hZrJycCZANaX"}}';
  1054. // $data['header'] =array (
  1055. // 'host' => 'lbktza.lebogyl.com',
  1056. // 'content-length' => '923',
  1057. // 'user-agent' => 'Mozilla/4.0',
  1058. // 'pragma' => 'no-cache',
  1059. // 'wechatpay-timestamp' => '1648733686',
  1060. // 'wechatpay-signature' => 'bkSmqJCBL4PpkhvReywNR1e6RCUfKLJmKpKTp0EkVYWMU6MSOeA8pI4BaKCPHmqene3cr5vM3+I0T9hcr0NpxlWiau87S97L+amCRT6UBpLy6Rzf6+jewMJccJCxN/SnjUXKA08N7gdw5YLFdeW1XMpQDSftBWpAPiVylf2XtrfWvhzq/D/xQINDPMb9HMbWXVRdcj9FKMr3uzGzLnM2SB4OzIXifW5MsYxbuSS1GRjKaSRM0q41e9oAeTegJ6MlY1QN+WuXByhexO64/CWcSthektvoj9RYPNbftGUj0nOQizNPWjIzzJouQmuyJ6uTKOi8VU5t8F3HXEI42RKW1A==',
  1061. // 'connection' => 'Keep-Alive',
  1062. // 'content-type' => 'application/json',
  1063. // 'wechatpay-serial' => '3266CA67E9DE559412849E0E65845FC22BABA399',
  1064. // 'wechatpay-nonce' => 'XGjZGY2a0zqxYecblrRAX8N3ASFuDCcb',
  1065. // 'wechatpay-signature-type' => 'WECHATPAY2-SHA256-RSA2048',
  1066. // 'accept' => '*/*',
  1067. // );
  1068. $data['body'] = file_get_contents('php://input');
  1069. $data['header'] = $request->header();
  1070. return \app\api\services\WxPayServices::instance()->data($data)->getNotifyInfo()->afterPay();
  1071. }
  1072. // 绑定支付宝账号
  1073. public function bindAlipay(Request $request, UserDataModel $model)
  1074. {
  1075. $re_data = $request->data;
  1076. if (isset($re_data['real_name']) || isset($re_data['alipay'])) {
  1077. return api_error_return('参数错误--算出sign_str不要传real_name跟alipay');
  1078. }
  1079. [$sign_str] = $request->getMore([
  1080. ['sign_str', '']
  1081. ], true);
  1082. if (empty($sign_str))
  1083. return api_error_return('参数错误');
  1084. $data = json_decode(AESjiemi($sign_str));
  1085. if (empty($data))
  1086. return api_error_return('参数错误');
  1087. $data = object_array($data);
  1088. try {
  1089. return api_succ_return(['msg' => '绑定成功', 'data' => $model->bindAlipay($data, $request->uid)]);
  1090. } catch (\Exception $e) {
  1091. return api_error_return('绑定失败');
  1092. }
  1093. }
  1094. // 解绑支付宝
  1095. public function unbindAlipay(Request $request, UserDataModel $model)
  1096. {
  1097. try {
  1098. return api_succ_return(['msg' => '解绑成功', 'data' => $model->unbindAlipay($request)]);
  1099. } catch (\Exception $e) {
  1100. return api_error_return('解绑失败');
  1101. }
  1102. }
  1103. public function thirdPaySqzBack(Request $request)
  1104. {
  1105. // 协议绑卡
  1106. // {"orderid":"SYL202209280158007492161561569","opstate":"0","ovalue":"0.26","systime":"2022\/09\/28 02:25:47","sysorderid":"22092802252822020418","completiontime":"2022\/09\/28 02:25:47","attach":"","msg":"","sign":"aa9b11c9ea303c43424ec7d762fca0da"}
  1107. sr_log('----------------------thirdPaySqzBack支付三方sqz回调-------------------------');
  1108. sr_log($request->param());
  1109. sr_log('----------------------支付三方sqz回调-------------------------');
  1110. $params = $request->param();
  1111. if (isset($params['orderid']) && isset($params['opstate']) && isset($params['ovalue'])) {
  1112. // 校验签名
  1113. if (isset($params['sign'])) {
  1114. $sign = md5('orderid=' . $params['orderid'] . '&opstate=' . $params['opstate'] . '&ovalue=' . $params['ovalue'] . env('PAYSQZ.SIGNKEY'));
  1115. if ($sign === $params['sign']) {
  1116. if ($params['opstate'] == 0) {
  1117. Db::startTrans();
  1118. try {
  1119. $service = new ThirdPayServices();
  1120. $service->payBack($params['orderid'], $params['ovalue'], 15, json_encode($params));
  1121. Db::commit();
  1122. } catch (\Exception $e) {
  1123. Db::rollback();
  1124. sr_log($e->getMessage());
  1125. return 'opstate=0' . $e->getMessage();
  1126. }
  1127. } else {
  1128. return 'opstate=01';
  1129. }
  1130. } else {
  1131. sr_log('协议绑卡签名不通过');
  1132. return 'opstate=0';
  1133. }
  1134. }
  1135. }
  1136. return 'opstate=0';
  1137. }
  1138. public function thirdPaySqzAliBack(Request $request)
  1139. {
  1140. // {"orderid":"SYL202209280158007492161561569","opstate":"0","ovalue":"0.26","systime":"2022\/09\/28 02:25:47","sysorderid":"22092802252822020418","completiontime":"2022\/09\/28 02:25:47","attach":"","msg":"","sign":"aa9b11c9ea303c43424ec7d762fca0da"}
  1141. sr_log('----------------------三方支付宝sqz回调-------------------------');
  1142. sr_log($request->param());
  1143. sr_log('----------------------三方支付宝sqz回调-------------------------');
  1144. $params = $request->param();
  1145. if (isset($params['orderid']) && isset($params['opstate']) && isset($params['ovalue'])) {
  1146. // 校验签名
  1147. if (isset($params['sign'])) {
  1148. $sign = md5('orderid=' . $params['orderid'] . '&opstate=' . $params['opstate'] . '&ovalue=' . $params['ovalue'] . env('PAYSQZ.SIGNKEY'));
  1149. if ($sign === $params['sign']) {
  1150. if ($params['opstate'] == 0) {
  1151. Db::startTrans();
  1152. try {
  1153. $service = new ThirdPayServices();
  1154. $service->payBack($params['orderid'], $params['ovalue'], 16, json_encode($params));
  1155. Db::commit();
  1156. } catch (\Exception $e) {
  1157. Db::rollback();
  1158. sr_log($e->getMessage());
  1159. return 'opstate=0' . $e->getMessage();
  1160. }
  1161. } else {
  1162. return 'opstate=01';
  1163. }
  1164. } else {
  1165. return 'opstate=0';
  1166. }
  1167. }
  1168. }
  1169. return 'opstate=0';
  1170. }
  1171. public function thirdPayZfbNewBack(Request $request)
  1172. {
  1173. // {"pay":"true","appId":"dianke","amount":"28","orderId":"20230206160818959664875","version":"1.0","transactionId":"2023020622001491231429909739","sign":"D9560AEACD28FD948D979AF098C06451"}
  1174. sr_log('----------------------三方支付宝电科回调-------------------------');
  1175. sr_log($request->param());
  1176. sr_log('----------------------三方支付宝电科回调-------------------------');
  1177. $params = $request->param();
  1178. // $params = json_decode('{"pay":"true","appId":"dianke","amount":"23","orderId":"20230211051634709607926","version":"1.0","transactionId":"2023021122001411311446728675","sign":"CE5B60938178B3F383E332D652A9EFB9"}', true);
  1179. $service = new ThirdPayServices();
  1180. if (isset($params['orderId']) && isset($params['amount']) && isset($params['pay']) && $params['pay'] == 'true') {
  1181. // 校验签名
  1182. if (isset($params['sign'])) {
  1183. $back_sign = $params['sign'];
  1184. unset($params['sign']);
  1185. $sign = $service->diankesign($params);
  1186. if ($sign == $back_sign) {
  1187. Db::startTrans();
  1188. try {
  1189. $service->payBack($params['orderId'], $params['amount'], 22, json_encode($params));
  1190. Db::commit();
  1191. } catch (\Exception $e) {
  1192. Db::rollback();
  1193. sr_log('电科报错' . $e->getMessage());
  1194. return 'success';
  1195. }
  1196. } else {
  1197. return 'success';
  1198. }
  1199. }
  1200. }
  1201. return 'success';
  1202. }
  1203. // 代付回调
  1204. public function thirdPayZfbNewBackdf(Request $request)
  1205. {
  1206. // {"status":"1","appId":"diankef","amount":"120","orderId":"WD51565253559","version":"1.0","sign":"90B754A2099D32097399A103A9451DE2"}
  1207. sr_log('----------------------三方支付宝代付电科回调-------------------------1');
  1208. sr_log($request->param());
  1209. sr_log('----------------------三方支付宝代付电科回调-------------------------2');
  1210. $params = $request->param();
  1211. // $params = json_decode('{"status":"1","appId":"diankef","amount":"120","orderId":"WD51565253559","version":"1.0","sign":"90B754A2099D32097399A103A9451DE2"}', true);
  1212. $service = new ThirdPayServices();
  1213. if (isset($params['orderId']) && isset($params['amount'])) {
  1214. // 校验签名
  1215. if (isset($params['sign'])) {
  1216. $back_sign = $params['sign'];
  1217. unset($params['sign']);
  1218. $sign = $service->diankesigndf($params);
  1219. if ($sign == $back_sign) {
  1220. // Db::startTrans();
  1221. // try {
  1222. try {
  1223. $service->payDfBack($params['orderId'], $params['amount'], $params, json_encode($params));
  1224. } catch (Exception $e) {
  1225. sr_log('电科报错' . $e->getMessage());
  1226. return 'success';
  1227. }
  1228. // Db::commit();
  1229. // }catch (\Exception $e){
  1230. // Db::rollback();
  1231. // sr_log('电科报错'.$e->getMessage());
  1232. // return 'success';
  1233. // return $e->getMessage();
  1234. // }
  1235. } else {
  1236. return 'success';
  1237. }
  1238. }
  1239. }
  1240. return 'success';
  1241. }
  1242. public function thirdPaySqzWeixinBack(Request $request)
  1243. {
  1244. // {"orderid":"SYL202209280158007492161561569","opstate":"0","ovalue":"0.26","systime":"2022\/09\/28 02:25:47","sysorderid":"22092802252822020418","completiontime":"2022\/09\/28 02:25:47","attach":"","msg":"","sign":"aa9b11c9ea303c43424ec7d762fca0da"}
  1245. sr_log('----------------------三方微信sqz回调-------------------------');
  1246. sr_log($request->param());
  1247. sr_log('----------------------三方微信sqz回调-------------------------');
  1248. $params = $request->param();
  1249. if (isset($params['orderid']) && isset($params['opstate']) && isset($params['ovalue'])) {
  1250. // 校验签名
  1251. if (isset($params['sign'])) {
  1252. $sign = md5('orderid=' . $params['orderid'] . '&opstate=' . $params['opstate'] . '&ovalue=' . $params['ovalue'] . env('PAYSQZ.SIGNKEY'));
  1253. if ($sign === $params['sign']) {
  1254. if ($params['opstate'] == 0) {
  1255. Db::startTrans();
  1256. try {
  1257. $service = new ThirdPayServices();
  1258. $service->payBack($params['orderid'], $params['ovalue'], 17, json_encode($params));
  1259. Db::commit();
  1260. } catch (\Exception $e) {
  1261. Db::rollback();
  1262. sr_log($e->getMessage());
  1263. return 'opstate=0' . $e->getMessage();
  1264. }
  1265. } else {
  1266. return 'opstate=01';
  1267. }
  1268. } else {
  1269. return 'opstate=0';
  1270. }
  1271. }
  1272. }
  1273. return 'opstate=0';
  1274. }
  1275. public function thirdPaySqzKuaiBack(Request $request)
  1276. {
  1277. // {"orderid":"SK202210082016332330018423433","opstate":"0","ovalue":"0.21","systime":"2022\/10\/08 20:17:39","sysorderid":"22100820163428020468","completiontime":"2022\/10\/08 20:17:39","attach":"","msg":"","sign":"a969e851d73444f5d8c34d7782e4d9f3"}
  1278. sr_log('----------------------三方银行快捷sqz回调-------------------------');
  1279. sr_log($request->param());
  1280. sr_log('----------------------三方银行快捷sqz回调-------------------------');
  1281. $params = $request->param();
  1282. // $params['orderid'] = 'SK202210082016332330018423433';
  1283. // $params['opstate'] = 0;
  1284. // $params['ovalue'] = 0.21;
  1285. // $params['systime'] = "2022\/10\/08 20:17:39";
  1286. // $params['sysorderid'] = "22100820163428020468";
  1287. // $params['completiontime'] = "22100820163428020468";
  1288. // $params['sign'] = "a969e851d73444f5d8c34d7782e4d9f3";
  1289. if (isset($params['orderid']) && isset($params['opstate']) && isset($params['ovalue'])) {
  1290. // 校验签名
  1291. if (isset($params['sign'])) {
  1292. $sign = md5('orderid=' . $params['orderid'] . '&opstate=' . $params['opstate'] . '&ovalue=' . $params['ovalue'] . env('PAYSQZ.SXY_SIGNKEY'));
  1293. if ($sign === $params['sign']) {
  1294. if ($params['opstate'] == 0) {
  1295. Db::startTrans();
  1296. try {
  1297. $service = new ThirdPayServices();
  1298. $service->payBack($params['orderid'], $params['ovalue'], 18, json_encode($params));
  1299. Db::commit();
  1300. } catch (\Exception $e) {
  1301. Db::rollback();
  1302. sr_log($e->getMessage());
  1303. return 'opstate=0' . $e->getMessage();
  1304. }
  1305. } else {
  1306. return 'opstate=01';
  1307. }
  1308. } else {
  1309. sr_log('yinsheng快捷银行签名有问题');
  1310. return 'opstate=01';
  1311. }
  1312. }
  1313. }
  1314. return 'opstate=0';
  1315. }
  1316. /**
  1317. * Ys银盛第三方支付回调
  1318. * @param Request $request
  1319. * @return string
  1320. */
  1321. public function thirdPayYsBack(Request $request)
  1322. {
  1323. $params = $request->post();
  1324. $res = $this->sign_verify($params);
  1325. $date = date('Y-m-d H:i:s');
  1326. $outTradeNo = isset($params['out_trade_no'])? $params['out_trade_no'] : '0';
  1327. $cacheKey = "caches:payment:ysBack:{$outTradeNo}";
  1328. RedisCache::set($cacheKey.'_param', ['params'=> $params,'sign'=> $res,'date'=> $date], 7200);
  1329. if ($res) {
  1330. Db::startTrans();
  1331. try {
  1332. $service = new ThirdPayServices();
  1333. $service->payBack($params['out_trade_no'], $params['settlement_amount'], 20, json_encode($params), $cacheKey);
  1334. Db::commit();
  1335. } catch (\Exception $e) {
  1336. Db::rollback();
  1337. RedisCache::set($cacheKey.'_fail', ['error'=>'银盛回调报错:'.$e->getMessage(),'params'=> $params,'sign'=> $res,'date'=> $date], 7200);
  1338. return 'success';
  1339. }
  1340. } else {
  1341. RedisCache::set($cacheKey.'_signFail', ['error'=>'银盛签名有问题','params'=> $params,'sign'=> $res,'date'=> $date], 7200);
  1342. return 'success';
  1343. }
  1344. return 'success';
  1345. }
  1346. /**
  1347. * 验签转明码
  1348. * @param input check
  1349. * @param input msg
  1350. * @return data
  1351. * @return success
  1352. */
  1353. public function sign_check($sign, $data)
  1354. {
  1355. $publickeyFile = env('ZLYS.CER_PATH'); //公钥
  1356. $certificateCAcerContent = file_get_contents($publickeyFile);
  1357. $certificateCApemContent = '-----BEGIN CERTIFICATE-----' . PHP_EOL . chunk_split(base64_encode($certificateCAcerContent), 64, PHP_EOL) . '-----END CERTIFICATE-----' . PHP_EOL;
  1358. // 签名验证
  1359. $success = openssl_verify($data, base64_decode($sign), openssl_get_publickey($certificateCApemContent), OPENSSL_ALGO_SHA1);
  1360. return $success;
  1361. }
  1362. /**
  1363. * 签名验证
  1364. * @param $data
  1365. * @return bool
  1366. */
  1367. public function sign_verify($data)
  1368. {
  1369. //返回的数据处理
  1370. $sign = trim($data['sign']);
  1371. unset($data['sign']);
  1372. ksort($data);
  1373. $url = "";
  1374. foreach ($data as $key => $val) {
  1375. /* 验证签名 */
  1376. if ($val) $url .= $key . '=' . $val . '&';
  1377. }
  1378. $str = trim($url, '&');
  1379. if ($this->sign_check($sign, $str) != true) {
  1380. return false;
  1381. } else {
  1382. return true;
  1383. }
  1384. }
  1385. /**
  1386. * @param Request $request
  1387. * @return string
  1388. * @throws \think\db\exception\DataNotFoundException
  1389. * @throws \think\db\exception\DbException
  1390. * @throws \think\db\exception\ModelNotFoundException
  1391. */
  1392. public function userSignBank(Request $request)
  1393. {
  1394. $para = $request->param();
  1395. $date = date('Y-m-d H:i:s');
  1396. $cacheKey = "caches:userBankSign:callback:";
  1397. RedisCache::set($cacheKey . 'param', ['msg' => '支付三方签约sqz回调', 'params' => $para, 'date' => $date], 7200);
  1398. if (isset($para['userno']) && $para['userno']) {
  1399. // 校验签名
  1400. if (isset($para['orderid']) && isset($para['opstate']) && isset($para['userno']) && isset($para['sign'])) {
  1401. $sign = md5('orderid=' . $para['orderid'] . '&opstate=' . $para['opstate'] . '&userno=' . $para['userno'] . env('PAYSQZ.SIGNKEY'));
  1402. if ($sign === $para['sign']) {
  1403. if (UserBankSignService::make()->checkHasBySignOrderId($para['orderid'])) {
  1404. // 获取userno 然后保存
  1405. Db::name('user_bank_sign')->where('signorder_id', $para['orderid'])->save([
  1406. 'userno' => $para['userno'],
  1407. 'status' => 2
  1408. ]);
  1409. }
  1410. return 'success';
  1411. } else {
  1412. return 'error';
  1413. }
  1414. }
  1415. }
  1416. return 'error';
  1417. }
  1418. /**
  1419. * 支付请求
  1420. * @param Request $request
  1421. * @return \think\Response
  1422. */
  1423. public function sylSurePay(Request $request)
  1424. {
  1425. Db::startTrans();
  1426. try {
  1427. $third_pay = new ThirdPayServices();
  1428. $third_pay->sylSurePay($request->uid, $request->post());
  1429. Db::commit();
  1430. } catch (\Exception $e) {
  1431. Db::rollback();
  1432. return api_error_return($e->getMessage());
  1433. }
  1434. return api_succ_return('支付订单提交成功,稍后请关注订单列表');
  1435. }
  1436. /**
  1437. * 用户绑定银行卡
  1438. * @param Request $request
  1439. * @return \think\Response
  1440. */
  1441. public function userToSignBank(Request $request)
  1442. {
  1443. Db::startTrans();
  1444. try {
  1445. $third_pay = new ThirdPayServices();
  1446. $sign_url = $third_pay->userBankSign($request->uid, $request->post());
  1447. Db::commit();
  1448. } catch (\Exception $e) {
  1449. Db::rollback();
  1450. return api_error_return($e->getMessage());
  1451. }
  1452. return api_succ_return(['msg' => '成功', 'data' => ['sign_url' => $sign_url]]);
  1453. }
  1454. /**
  1455. * 用户解绑银行卡
  1456. * @param Request $request
  1457. * @return \think\Response
  1458. */
  1459. public function userToUnSignBank(Request $request)
  1460. {
  1461. Db::startTrans();
  1462. try {
  1463. $third_pay = new ThirdPayServices();
  1464. $third_pay->userUnBankSign($request->uid, $request->post());
  1465. Db::commit();
  1466. } catch (\Exception $e) {
  1467. Db::rollback();
  1468. return api_error_return($e->getMessage());
  1469. }
  1470. return api_succ_return('成功');
  1471. }
  1472. /**
  1473. * 用户绑定银行卡签名
  1474. * @param Request $request
  1475. * @return \think\Response
  1476. * @throws \think\db\exception\DataNotFoundException
  1477. * @throws \think\db\exception\DbException
  1478. * @throws \think\db\exception\ModelNotFoundException
  1479. */
  1480. public function myBankSignList(Request $request)
  1481. {
  1482. $list = Db::name('user_bank_sign')->where('uid', $request->uid)
  1483. ->where('status', 2)
  1484. ->field('id,name,bank_card,phone')
  1485. ->withAttr('bank_card', function ($val, $data) {
  1486. $len = strlen($val);
  1487. return substr($val, 0, 4) . '****' . substr($val, $len - 5, $len - 1);
  1488. })->select()->toArray();
  1489. return api_succ_return(['msg' => '成功', 'data' => $list]);
  1490. }
  1491. /**
  1492. * 支持的银行卡
  1493. * @param Request $request
  1494. * @return \think\Response
  1495. */
  1496. public function ylBindCanSignList(Request $request)
  1497. {
  1498. return api_succ_return(['msg' => '成功', 'data' => [
  1499. 'chuxuka' => ['中国银行', '建设银行', '工商银行', '浦发银行', '光大银行', '华夏银行', '民生银行', '平安银行', '上海银行', '交通银行', '邮政储蓄银行', '中信银行', '浙商银行', '广东省农村信用社', '山西省农村信用社', '内蒙古自治区农村信用社', '吉林农村信用社', '河南省农村信用社', '黄河农村商业银行', '深圳农村商业银行', '天津滨海农村商业银行股份有限公司', '大连农村商业银行', '鄞州银行', '天津农商银行', '辽宁省农村信用社', '湖北农信', '云南省农村信用社联合社', '陕西省农村信用社', '青海省农村信用社联合社', '湖南省农村信用社', '黑龙江省农村信用社', '广西农村信用社', '苏州银行', '四川省农村信用社', '甘肃省农村信用社', '山东省农村信用社联合社', '广西北部湾银行', '抚顺银行股份有限公司', '辽阳银行股份有限公司', '贵州银行', '晋中银行股份有限公司', '西藏银行股份有限公司', '新疆汇和银行股份有限公司', '江苏江阴农村商业银行股份有限公司', '大连银行', '阜新银行', '吉林银行', '宁夏银行', '嘉兴银行', '常熟农商银行', '江苏江南农村商业银行股份公司', '江苏长江商行', '台州银行', '温州银行', '浙江稠州商业银行', '绍兴银行', '宁波通商银行股份有限公司', '温州民商银行', '浙江民泰商业银行', '浙江泰隆商业银行', '金华银行股份有限公司', '南洋商业银行', '贵阳银行', '韩亚银行', '宜宾商业银行', '自贡市商业银行', '顺德农村商业银行', '桂林银行股份有限公司', '承德银行', '富滇银行', '昆仑银行', '新韩银行中国', '邢台银行', '张家口市商业银行', '沧州银行', '兰州银行', '友利银行', '焦作中旅银行', '泉州银行', '厦门国际银行', '营口银行', '朝阳银行股份有限公司', '广东华兴银行', '长沙银行', '锦州银行', '九江银行', '石嘴山银行股份有限公司', '哈尔滨银行', '龙江银行', '江西银行', '攀枝花市商业银行', '重庆三峡银行', '广州银行', '晋城银行', '上饶银行', '赣州银行', '长城华西银行', '盛京银行', '甘肃银行', '中原银行', '湖北银行', '郑州银行', '富邦华一银行有限公司', '星展银行', '乐山市商业银行股份有限公司', '长治银行', '上海华瑞银行', '湖南三湘银行', '海南银行', '福建海峡银行', '北京农商银行', '河北省农村信用社', '上海农村商业银行', '江苏省农村信用社联合社', '浙江农信', '安徽省农村信用社联合社', '福建省农村信用社联合社', '江西省农村信用社', '海南省农村信用社', '重庆农村商业银行', '贵州省农村信用社', '新疆自治区农村信用社', '武汉农村商业银行', '成都农商银行', '张家港农村商业银行', '江苏紫金农村商业银行', '无锡农村商业银行', '太仓农村商业银行', '昆山农村商业银行', '广东南海农村商业银行', '浙江长兴农村商业银行'],
  1500. 'xinyongka' => ['招商银行', '中国银行', '中信银行', '民生银行', '浦发银行', '平安银行', '光大银行', '广东发展银行', '上海银行', '华夏银行', '工商银行', '建设银行', '交通银行', '邮政储蓄银行', '浙商银行', '北京银行']
  1501. ]]);
  1502. }
  1503. /**
  1504. * 之前对接的支付备份
  1505. * @param Request $request
  1506. * @return \think\Response
  1507. */
  1508. private function payOldAction(Request $request)
  1509. {
  1510. $setting = [];
  1511. $appresource = $request->post('app_sources', '');
  1512. $order_type = $request->post('order_type');
  1513. if (empty($order_type)) {
  1514. return api_error_return('参数错误');
  1515. }
  1516. // 商城购买
  1517. if ($order_type == 4) {
  1518. if ($appresource == 'android') {
  1519. // 石学长 银联支付
  1520. array_push($setting, ['is_open' => 1, 'channel' => 15, 'title' => '银联(协议绑卡)', 'icon' => getWebUrl() . '/static/img/payconfig/ic_yinlian_pay.png']);
  1521. }
  1522. if ($appresource == 'ios') {
  1523. // 石学长 银联支付
  1524. array_push($setting, ['is_open' => 1, 'channel' => 15, 'title' => '银联', 'icon' => getWebUrl() . '/static/img/payconfig/ic_yinlian_pay.png']);
  1525. }
  1526. }
  1527. // 购买服务商
  1528. if ($order_type == 6) {
  1529. if ($appresource == 'android') {
  1530. // 石学长 银联支付
  1531. array_push($setting, ['is_open' => 1, 'channel' => 15, 'title' => '银联(协议绑卡)', 'icon' => getWebUrl() . '/static/img/payconfig/ic_yinlian_pay.png']);
  1532. // 无卡快捷支付 直连银盛
  1533. array_push($setting, ['is_open' => 1, 'channel' => 20, 'title' => '无卡快捷银联支付(支持信用卡)', 'icon' => getWebUrl() . '/static/img/payconfig/ic_yinlian_pay.png']);
  1534. }
  1535. if ($appresource == 'ios') {
  1536. // 石学长 银联支付
  1537. array_push($setting, ['is_open' => 1, 'channel' => 15, 'title' => '银联(协议绑卡)', 'icon' => getWebUrl() . '/static/img/payconfig/ic_yinlian_pay.png']);
  1538. // 无卡快捷支付
  1539. array_push($setting, ['is_open' => 1, 'channel' => 20, 'title' => '无卡快捷银联支付(支持信用卡)', 'icon' => getWebUrl() . '/static/img/payconfig/ic_yinlian_pay.png']);
  1540. }
  1541. }
  1542. }
  1543. }