ThirdPayServices.php 117 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926
  1. <?php
  2. /**
  3. * 支付宝支付
  4. */
  5. namespace app\api\services;
  6. use AlibabaCloud\SDK\OSS\OSS\GetObjectRequest\header;
  7. use app\common\model\PaymentModel;
  8. use app\common\model\RechargeOrderModel;
  9. use app\common\model\ServicesOrderModel;
  10. use app\common\model\ShopGoodsModel;
  11. use app\common\model\ShopOrderGoodsModel as OrderGoods;
  12. use app\common\model\ShopOrderModel;
  13. use app\common\model\ShopOrderModel as Order;
  14. use app\common\model\UserModel;
  15. use app\common\model\WithDrawLogModel;
  16. use Rsa\RsaClient;
  17. use Symfony\Component\Translation\Dumper\IniFileDumper;
  18. use think\Exception;
  19. use think\facade\Db;
  20. use function Composer\Autoload\includeFile;
  21. class ThirdPayServices extends BasePayServices
  22. {
  23. //多乐宝支付宝支付
  24. public function getPayInfo($uid, $params){
  25. // return $params;
  26. list($body, $total_amount, $order_type, $remarks, $trade_type, $pay_way, $voucher_img) = $this->_payConf($uid, $params);
  27. $out_trade_no1 = rand(1000000000, 9999999999) . (string)date('ymdhis', time()) . (int)microtime(true); // 订单号
  28. $params = [
  29. 'appid'=>'9d5e3cb9a4946cf28a42b99f4f8bf978',
  30. 'method'=>'payment.wxjsapp',
  31. 'merchant'=>'220951176399985946',
  32. 'body'=>'购买商品',
  33. 'external_order_no'=>$out_trade_no1, // 我们自己的订单号
  34. 'total_amount'=>$total_amount,
  35. // 'notify_url'=>'http://api.meikangjw.com/api/aliResult'
  36. 'notify_url'=>'http://zy.suncorex.com:2080/api/aliResultDLB'
  37. ];
  38. $sign = thirdPayGetSign($params, '897d9ea909093173b24dd89c772181e4');
  39. $params['sign'] = $sign;
  40. // return $params;
  41. $res = _curlrequest('http://openpay.duolaibei.com/api/gateway', $params, 'post');
  42. // sr_log(sr_getcurtime(time()).$res);
  43. // {"code":200,"msg":"success","content":{"order_no":"DLB1649853909589099089998901OP","external_order_no":"12365847092204130845091649853909","total_amount":11970,"body":"\u8d2d\u4e70\u5546\u54c1","trans_type":"AL_JSAPP","JSAPPID":"2021002148663267","url":"alipays:\/\/platformapi\/startapp?appId=2021002148663267&page=pages\/open-pay\/open-pay&query=order_no%3DDLB1649853909589099089998901OP","sign":"FA06F884C143DA40E505950918D4AD45"}}
  44. $res = json_decode($res);
  45. if ($res && isset($res->code) && $res->code == 200){
  46. $out_trade_no = $res->content->order_no;
  47. $this->setPaymentOrder(compact('body', 'out_trade_no','out_trade_no1', 'total_amount', 'remarks', 'uid', 'trade_type', 'order_type', 'pay_way', 'voucher_img'), 5);
  48. // return api_succ_return(['msg'=>'请求成功', 'data'=>['thirdpaydlbalipay'=>['url'=>$res->content->url]]]);
  49. return api_succ_return(['msg'=>'请求成功', 'data'=>['thirdpaydlbwx'=>['url'=>$res->content->url, 'jsappid'=>$res->content->JSAPPID]]]);
  50. }else{
  51. return api_error_return('获取失败');
  52. }
  53. }
  54. //多乐宝微信支付
  55. public function getWxPayInfo($uid, $params){
  56. // return $params;
  57. list($body, $total_amount, $order_type, $remarks, $trade_type, $pay_way, $voucher_img) = $this->_payConf($uid, $params);
  58. // 这是测试 线要干掉
  59. // $total_amount = floatval('0.'.mt_rand(1, 3).mt_rand(1, 9));
  60. $out_trade_no1 = rand(1000000000, 9999999999) . (string)date('ymdhis', time()) . (int)microtime(true); // 订单号
  61. $params = [
  62. 'appid'=>'9d5e3cb9a4946cf28a42b99f4f8bf978',
  63. 'method'=>'payment.wxjsapp',
  64. 'merchant'=>'220951176399985946',
  65. 'body'=>'购买商品',
  66. 'external_order_no'=>$out_trade_no1, // 我们自己的订单号
  67. 'total_amount'=>$total_amount,
  68. // 'notify_url'=>'http://api.meikangjw.com/api/aliResult'
  69. 'notify_url'=>'http://zy.suncorex.com:2080/api/wechatResultDLB'
  70. ];
  71. $sign = thirdPayGetSign($params, '897d9ea909093173b24dd89c772181e4');
  72. $params['sign'] = $sign;
  73. // return $params;
  74. $res = _curlrequest('http://openpay.duolaibei.com/api/gateway', $params, 'post');
  75. // sr_log(sr_getcurtime(time()).$res);
  76. // {"code":200,"msg":"success","content":{"order_no":"DLB1649853909589099089998901OP","external_order_no":"12365847092204130845091649853909","total_amount":11970,"body":"\u8d2d\u4e70\u5546\u54c1","trans_type":"AL_JSAPP","JSAPPID":"2021002148663267","url":"alipays:\/\/platformapi\/startapp?appId=2021002148663267&page=pages\/open-pay\/open-pay&query=order_no%3DDLB1649853909589099089998901OP","sign":"FA06F884C143DA40E505950918D4AD45"}}
  77. $res = json_decode($res);
  78. if ($res && isset($res->code) && $res->code == 200){
  79. $out_trade_no = $res->content->order_no;
  80. $this->setPaymentOrder(compact('body', 'out_trade_no','out_trade_no1', 'total_amount', 'remarks', 'uid', 'trade_type', 'order_type', 'pay_way', 'voucher_img'), 5);
  81. // return api_succ_return(['msg'=>'请求成功', 'data'=>['thirdpaydlbalipay'=>['url'=>$res->content->url]]]);
  82. return api_succ_return(['msg'=>'请求成功', 'data'=>['thirdpaydlbwx'=>['url'=>$res->content->url, 'jsappid'=>$res->content->JSAPPID]]]);
  83. }else{
  84. return api_error_return('获取失败');
  85. }
  86. }
  87. // 畅联微信支付
  88. public function getWxPayInfoCL($uid, $params){
  89. // return $params;
  90. list($body, $total_amount, $order_type, $remarks, $trade_type, $pay_way, $voucher_img) = $this->_payConf($uid, $params);
  91. // 这是测试 线要干掉
  92. // $total_amount = floatval('0.'.mt_rand(1, 3).mt_rand(1, 9));
  93. $out_trade_no = 'CL'.rand(1000000000, 9999999999) . (string)date('ymdhis', time()) . (int)microtime(true); // 订单号
  94. $success_url = getWebUrl().'/api/thirdPayClSuccess';
  95. $error_url = getWebUrl().'/api/thirdPayClError';
  96. $params = [
  97. 'appid'=>'1059174',
  98. 'pay_type'=>'partnerJs',
  99. 'amount'=>sprintf("%.2f",$total_amount),
  100. 'callback_url'=> getWebUrl().'/api/wechatResultCL',
  101. 'success_url'=>$success_url,
  102. 'error_url'=>$error_url,
  103. 'extend'=>'{"body":"购买商品"}',
  104. 'out_trade_no'=>$out_trade_no
  105. ];
  106. // sr_log(json_encode($params));
  107. $sign = thirdPayGetSignCL('XMLfjHMPOGexsSaadIWSVCNG0XJBClZZ', $params);
  108. $params['sign'] = $sign;
  109. // sr_log(json_encode($params));
  110. // return $params;
  111. $res = _curlrequest('https://api.payunk.com/index/unifiedorder?format=json', $params, 'post');
  112. sr_log(sr_getcurtime(time()).$res);
  113. $res = json_decode($res);
  114. if ($res && isset($res->code) && $res->code == 200){
  115. $this->setPaymentOrder(compact('body', 'out_trade_no','total_amount', 'remarks', 'uid', 'trade_type', 'order_type', 'pay_way', 'voucher_img'), 7);
  116. return api_succ_return(['msg'=>'请求成功', 'data'=>['thirdpayclwx'=>['url'=>$res->url,'success_url'=>$success_url, 'error_url'=>$error_url]]]);
  117. }else{
  118. return api_error_return('获取失败');
  119. }
  120. }
  121. // 畅联支付宝支付 type aban(A版本) h5ban(h5版本) dban(D版本)
  122. public function getAliPayInfoCL($uid, $params, $type){
  123. list($body, $total_amount, $order_type, $remarks, $trade_type, $pay_way, $voucher_img) = $this->_payConf($uid, $params);
  124. // 这是测试 线要干掉
  125. // $total_amount = floatval('0.'.mt_rand(1, 3).mt_rand(1, 9));
  126. // $total_amount = 0.01;
  127. $out_trade_no = 'CL'.rand(1000000000, 9999999999) . (string)date('ymdhis', time()) . (int)microtime(true); // 订单号
  128. $success_url = getWebUrl().'/api/thirdPayClSuccess';
  129. $error_url = getWebUrl().'/api/thirdPayClError';
  130. $type_arr = [
  131. 'aban'=>'alipayApp',
  132. 'h5ban'=>'adapayH5',
  133. 'dban'=>'alipayPrecreate'
  134. ];
  135. $params = [
  136. 'appid'=>'1059174',
  137. 'pay_type'=>$type_arr[$type],
  138. 'amount'=>sprintf("%.2f",$total_amount),
  139. 'callback_url'=> getWebUrl().'/api/AliResultCL',
  140. 'success_url'=>$success_url,
  141. 'error_url'=>$error_url,
  142. 'extend'=>'{"body":"购买商品","subject":"购买商品"}',
  143. 'out_trade_no'=>$out_trade_no
  144. ];
  145. // sr_log(json_encode($params));
  146. $sign = thirdPayGetSignCL('XMLfjHMPOGexsSaadIWSVCNG0XJBClZZ', $params);
  147. $params['sign'] = $sign;
  148. // sr_log(json_encode($params));
  149. // return $params;
  150. $res = _curlrequest('https://api2.payunk.com/index/unifiedorder?format=json', $params, 'post');
  151. // sr_log(sr_getcurtime(time()).$res);
  152. $res = json_decode($res);
  153. if ($res && isset($res->code) && $res->code == 200){
  154. $this->setPaymentOrder(compact('body', 'out_trade_no','total_amount', 'remarks', 'uid', 'trade_type', 'order_type', 'pay_way', 'voucher_img'), ($type=='aban'?10:8));
  155. return api_succ_return(['msg'=>'请求成功', 'data'=>['thirdpayclali'=>['url'=>$res->url,'success_url'=>$success_url, 'error_url'=>$error_url]]]);
  156. }else{
  157. return api_error_return('获取失败');
  158. }
  159. }
  160. // mo宝 富有 银联支付
  161. public function getBankPayInfoFY($uid, $paramscon){
  162. list($body, $total_amount, $order_type, $remarks, $trade_type, $pay_way, $voucher_img) = $this->_payConf($uid, $paramscon);
  163. // 这是测试 线要干掉
  164. // $total_amount = floatval('0.'.'1'.mt_rand(1, 9));
  165. // $total_amount = 0.01;
  166. // 商户号
  167. $mchnt_cd = env('api.PAY_FUYOU_MCHNT_id');
  168. $time = time();
  169. $time_end = time() + 2*60*60;
  170. $order_date = sr_getcurtime($time, 'Ymd');
  171. $order_timestart = sr_getcurtime($time, 'YmdHis');
  172. $order_timeend = sr_getcurtime($time_end, 'YmdHis');
  173. $order_id = $paramscon['order_id'];
  174. $out_trade_no = 'FYYL'.$order_id;
  175. $mess_arr = ['mchnt_cd'=>$mchnt_cd, 'order_date'=>$order_date, 'order_id'=>$paramscon['order_id'], 'ver'=>'1.0.0'];
  176. // sr_log('message_json'.json_encode($mess_arr));
  177. $params = ['mchnt_cd'=>$mchnt_cd, 'message'=>RSA_openssl(json_encode($mess_arr))];
  178. // 测试
  179. // $url = 'https://aggapp-test.fuioupay.com/token.fuiou';
  180. // 正式
  181. $url = 'https://aggapp.fuioupay.com/token.fuiou';
  182. $ch = curl_init();
  183. curl_setopt($ch, CURLOPT_URL, $url);
  184. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  185. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  186. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
  187. $headers = ['Content-type: application/json'];
  188. curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  189. // POST数据
  190. curl_setopt($ch, CURLOPT_POST, 1);
  191. // curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
  192. // 把post的变量加上
  193. $data = json_encode($params);
  194. curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  195. $output = curl_exec($ch);
  196. curl_close($ch);
  197. // sr_log('ccc'.$output);
  198. $rsares = json_decode($output);
  199. $res_decode = json_decode(RSA_openssl($rsares->message, 'decode'));
  200. sr_log('ccc'.json_encode($res_decode));
  201. if (isset($res_decode->order_date) && isset($res_decode->order_token) && isset($res_decode->mchnt_cd) && isset($res_decode->order_id)){
  202. if ($res_decode->mchnt_cd == $mchnt_cd && $res_decode->order_id == $order_id ){
  203. $bank_params = [
  204. 'mchnt_cd'=>$mchnt_cd,
  205. 'order_date'=>$order_date,
  206. 'order_amt'=>bcmul($total_amount, 100, 0),
  207. 'order_id'=>$order_id,
  208. 'page_notifyurl'=>($paramscon['app_sources'] =='ios'?getWebUrl().'/api/thirdPayClSuccess':AESjiami(getWebUrl().'/api/thirdPayClSuccess')),
  209. 'back_notifyurl'=>($paramscon['app_sources'] =='ios'?getWebUrl().'/api/BankResultFY':AESjiami(getWebUrl().'/api/BankResultFY')),
  210. 'order_timestart'=>$order_timestart,
  211. 'order_timeend'=>$order_timeend,
  212. 'order_token'=>$res_decode->order_token
  213. ];
  214. $this->setPaymentOrder(compact('body', 'out_trade_no','total_amount', 'remarks', 'uid', 'trade_type', 'order_type', 'pay_way', 'voucher_img'), 9);
  215. return api_succ_return(['msg'=>'成功', 'data'=>['thirdpayflyl'=>$bank_params]]);
  216. }else{
  217. return api_error_return('获取失败,订单校验失败1');
  218. }
  219. }else{
  220. return api_error_return('获取失败,订单校验失败');
  221. }
  222. return api_error_return('获取失败');
  223. }
  224. // 易票联 支付宝支付
  225. public function getZfbPayInfoYPL($uid, $params){
  226. list($body, $total_amount, $order_type, $remarks, $trade_type, $pay_way, $voucher_img) = $this->_payConf($uid, $params);
  227. // 这是测试 线要干掉
  228. // $total_amount = floatval('0.'.'1'.mt_rand(1, 9));
  229. // $total_amount = 0.01;
  230. // 商户号
  231. $mchnt_cd = env('api.PAY_FUYOU_MCHNT_id');
  232. $time = time();
  233. $time_end = time() + 2*60*60;
  234. $order_date = sr_getcurtime($time, 'Ymd');
  235. $order_timestart = sr_getcurtime($time, 'YmdHis');
  236. $order_timeend = sr_getcurtime($time_end, 'YmdHis');
  237. $order_id = $params['order_id'];
  238. $out_trade_no = 'YPL'.$order_id.mt_rand(1, 10000);
  239. // $mess_arr = ['mchnt_cd'=>$mchnt_cd, 'order_date'=>$order_date, 'order_id'=>$params['order_id'], 'ver'=>'1.0.0'];
  240. //// sr_log('message_json'.json_encode($mess_arr));
  241. // $params = ['mchnt_cd'=>$mchnt_cd, 'message'=>RSA_openssl(json_encode($mess_arr))];
  242. $success_url = getWebUrl().'/api/thirdPayClSuccess';
  243. $error_url = getWebUrl().'/api/thirdPayClError';
  244. $notify_url = getWebUrl().'/api/ZfbResultYPL';
  245. // 商品订单信息
  246. // {"businessType":"100007","goodsList":[{"amount":1,"name":"商品名称","number":"1箱"}],"id":"id34535"}
  247. $orderInfo=array();
  248. $orderInfo['Id'] = 'id34535';
  249. $orderInfo['businessType'] = '130001';
  250. $orderInfo['goodsList'] = array(array('name'=>'pay','number'=>'one','amount'=>1));
  251. // $order_timestart = sr_getcurtime($time, 'YmdHis');
  252. $params = [
  253. 'areaInfo'=>'440106',
  254. 'attachData'=>'attachData',
  255. 'clientIp'=>request()->ip(),
  256. 'customerCode'=>'562012003860535',
  257. 'nonceStr'=>nonce_str(32),
  258. 'notifyUrl'=>$notify_url,
  259. 'orderInfo'=>$orderInfo,
  260. 'outTradeNo'=>$out_trade_no,
  261. 'payAmount'=>bcmul($total_amount, 100, 0),
  262. 'payCurrency'=>'CNY',
  263. 'payMethod'=>'7',
  264. 'redirectUrl'=>$success_url,
  265. 'transactionStartTime'=>date('YmdHis'),
  266. 'version'=>'3.0'
  267. ];
  268. sr_log(json_encode($params));
  269. // 测试
  270. // $url = 'http://test-efps.epaylinks.cn';
  271. // 正式
  272. $url = 'https://efps.epaylinks.cn';
  273. $url = $url . '/api/txs/pay/NativePayment';
  274. // $ch = curl_init();
  275. // curl_setopt($ch, CURLOPT_POST, 1);
  276. // curl_setopt($ch, CURLOPT_URL, $url);
  277. //
  278. // curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  279. // curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过检查
  280. // curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 跳过检查
  281. //curl_setopt($ch, CURLOPT_HEADER, true);
  282. // curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonStr);
  283. $sign = $this->YPLsign(json_encode($params));
  284. $headers = [
  285. // 'Content-type: application/json',
  286. 'x-efps-sign-no'=>'562012003860535001',
  287. 'x-efps-sign-type'=>'SHA256withRSA',
  288. 'x-efps-sign'=>$sign,
  289. 'x-efps-timestamp'=>date('YmdHis')
  290. ];
  291. sr_log(json_encode('header'.json_encode($headers)));
  292. // J+08ZMVCkZnMq0roi3JikP//ODGsy9UvYBM09b921RvU0/3Z+4opOwAFQGPBLrKRGhkZzVhHRJwVDZHA9Iu/wWX13SJyowRYkr8zVsYivNQhYKyt3uPScdN/BVfLM3d5OuA9o2ypIqVuoinorYDsrqXixyYg7LEA4pWTDZc9dtuSRWFF+DFvLTW4UODyiwhBCq7bFaa+MOVmWuiahZMM79MhKxiTqsfFQLptsnlc2crlYuok2Bp2TAbEDM7FZhlLIGiidux0kaLhC3dK31tRc6Y72NlukXJc3sN4HVLqj0GAiw+9jzmGf0NwhvxdHvBC6/7uOp2ShCMxSXUA/qPbLmA7Vh/Zv0njHbxJ0j3oylrhjCjUKGPTKf//GD/vgnVQz2m3KXW6+60PBfWRYwQYkSPFRHj2lRALBYe97q4w0kWa9xO/2yRrIW2lNBqt7ZKSmSstsA+NgiOU4u/LCBmIoxMqk9HzygfDPLhQ9oimOuM/7d//qjP0z6mPD4SbhdVKjfgsp9yqN7h9jR3BJJxDGRAtzJJpDA6/YIcTbkDnJIvHwIx4Fkcf22tBYW436W7f +0GeMLxBp5mAr8qlDJt0R3GoPD4hZ5Omh/FxYhOjN9RKG8QcqSykZSQgYgVAKsGeFWVeXes2XNo2AB1F7MlGuZSypOTv73BL5iE75xJVjRupk6qplmOo2YHLKs8USDSX3Y+QprbAC8irxQ5QtK4ayGbLZ8BDHuKnGLLA1/ID++2ccYJsnfA+9cqvSTm8lo19W1btBl9iZQC8Wfv94rfDsIAe2pc3Gd+LJv47i1mwzK03SQ5c6W8LBxgtStinz/f8Rm5oVn6hTgoRfV93F8ZGRVj5K+KYva5qIjBSyweYToPoXCirUO0UdA96PmU7+oVVOVu4pDcqBJjuSxPXIzRLXbSQUlFHecKjedx2DuOlHPdVMhn2XRjpdd+Ka70Grbw0dro76EvaBzHC2x/rN7g8nIe7ReG4LS2ya07bIXrbHyk6b45XfrneBGHnKDpIX6ymlDKZ2NAWyfXkBEPhiQrsT3AVGrokFjMTRVqubXqRW29Q8if2C5MYduen34s3QtmVHaVUZ24N6cX5FIvCwZYIyBvpFrTCfQZztRz3QngjhclbngGGyBv040WFfQ/sqzkWgdO8XP7cIUWlKmD0xANVq9dQqQiwwcvYpWFzMTpQcw9daGYWltwfzKfRveVnXHyfxaq6XVeHlZCboTDv4Fg5/nVW+s4JCmTXNPedU53ZYcDkrrZcHbygFXgPPOM8KMlowq8KnA9lXUYunHATpa2Q9vKnTED8Ro9gn6IGFpGRdZIeuYOJ+vKMA9sy55AIQiJVUMit7iw2M0ZehPwm4k5Dpi6RMzgC/5+OZc1u+Rt13Borvd3/7EuyqaNwhUkITp7Kl0dv75PQkK0Btcsg+PLVs+2h+GadNurWhl3Bvo6y++5HbkcEfymSFV/phDaAZBTYQFyzjAJhwJizMUBp1HFOetOiLEZSs4iMPj/gwps0BSwqCCRFZXJj3ifLo+fi/bE3rU+/nHcTBo9Dhzw/EVE2KLF1QbZw3fGLnhHqCK+PyOv4i7NwEQKqsA==
  293. $response = $this->http_post_json($url, json_encode($params), $sign);
  294. sr_log($response);
  295. if($response && $response[0] == 200){
  296. $re_data = json_decode($response[1],true);
  297. if($re_data['returnCode'] == '0000') {
  298. $payurl = $re_data['codeUrl'];
  299. $this->setPaymentOrder(compact('body', 'out_trade_no','total_amount', 'remarks', 'uid', 'trade_type', 'order_type', 'pay_way', 'voucher_img'), 12);
  300. return api_succ_return(['msg'=>'成功', 'data'=>['thirdpayYPL'=>['pay_url'=>$payurl]]]);
  301. // return api_succ_return(['msg'=>'成功', 'data'=>['thirdpay'=>['url'=>$payurl]]]);
  302. //
  303. }
  304. }else{
  305. return api_error_return('获取失败,请联系客服');
  306. }
  307. return api_error_return('获取失败,请联系客服');
  308. // if (isset($res_decode->order_date) && isset($res_decode->order_token) && isset($res_decode->mchnt_cd) && isset($res_decode->order_id)){
  309. // if ($res_decode->mchnt_cd == $mchnt_cd && $res_decode->order_id == $order_id ){
  310. // $bank_params = [
  311. // 'mchnt_cd'=>$mchnt_cd,
  312. // 'order_date'=>$order_date,
  313. // 'order_amt'=>bcmul($total_amount, 100, 0),
  314. // 'order_id'=>$order_id,
  315. // 'page_notifyurl'=>AESjiami(getWebUrl().'/api/thirdPayClSuccess'),
  316. // 'back_notifyurl'=>AESjiami(getWebUrl().'/api/BankResultFY'),
  317. // 'order_timestart'=>$order_timestart,
  318. // 'order_timeend'=>$order_timeend,
  319. // 'order_token'=>$res_decode->order_token
  320. // ];
  321. //
  322. // $this->setPaymentOrder(compact('body', 'out_trade_no','total_amount', 'remarks', 'uid', 'trade_type', 'order_type', 'pay_way', 'voucher_img'), 9);
  323. // return api_succ_return(['msg'=>'成功', 'data'=>['thirdpayflyl'=>$bank_params]]);
  324. // }else{
  325. // return api_error_return('获取失败,订单校验失败1');
  326. // }
  327. // }else{
  328. // return api_error_return('获取失败,订单校验失败');
  329. // }
  330. return api_error_return('获取失败');
  331. }
  332. // 易票联云闪付
  333. public function getYsfPayInfoYPL($uid, $params){
  334. list($body, $total_amount, $order_type, $remarks, $trade_type, $pay_way, $voucher_img) = $this->_payConf($uid, $params);
  335. // 这是测试 线要干掉
  336. // $total_amount = floatval('0.'.'1'.mt_rand(1, 9));
  337. // $total_amount = 0.01;
  338. // 商户号
  339. $mchnt_cd = env('api.PAY_FUYOU_MCHNT_id');
  340. $time = time();
  341. $time_end = time() + 2*60*60;
  342. $order_date = sr_getcurtime($time, 'Ymd');
  343. $order_timestart = sr_getcurtime($time, 'YmdHis');
  344. $order_timeend = sr_getcurtime($time_end, 'YmdHis');
  345. $order_id = $params['order_id'];
  346. $out_trade_no = 'YPL'.$order_id.mt_rand(1, 10000);
  347. // $mess_arr = ['mchnt_cd'=>$mchnt_cd, 'order_date'=>$order_date, 'order_id'=>$params['order_id'], 'ver'=>'1.0.0'];
  348. //// sr_log('message_json'.json_encode($mess_arr));
  349. // $params = ['mchnt_cd'=>$mchnt_cd, 'message'=>RSA_openssl(json_encode($mess_arr))];
  350. $success_url = getWebUrl().'/api/thirdPayClSuccess';
  351. $error_url = getWebUrl().'/api/thirdPayClError';
  352. $notify_url = getWebUrl().'/api/ZfbResultYPL';
  353. // 商品订单信息
  354. // {"businessType":"100007","goodsList":[{"amount":1,"name":"商品名称","number":"1箱"}],"id":"id34535"}
  355. $orderInfo=array();
  356. $orderInfo['Id'] = 'id34535';
  357. $orderInfo['businessType'] = '130001';
  358. $orderInfo['goodsList'] = array(array('name'=>'pay','number'=>'one','amount'=>1));
  359. // $order_timestart = sr_getcurtime($time, 'YmdHis');
  360. $params = [
  361. 'areaInfo'=>'440106',
  362. 'attachData'=>'attachData',
  363. 'clientIp'=>request()->ip(),
  364. 'customerCode'=>'562012003860535',
  365. 'nonceStr'=>nonce_str(32),
  366. 'notifyUrl'=>$notify_url,
  367. 'orderInfo'=>$orderInfo,
  368. 'outTradeNo'=>$out_trade_no,
  369. 'payAmount'=>bcmul($total_amount, 100, 0),
  370. 'payCurrency'=>'CNY',
  371. // 'payMethod'=>'7',
  372. 'redirectUrl'=>$success_url,
  373. 'transactionStartTime'=>date('YmdHis'),
  374. 'version'=>'3.0'
  375. ];
  376. sr_log('ypl'.json_encode($params));
  377. // 测试
  378. // $url = 'http://test-efps.epaylinks.cn';
  379. // 正式
  380. $url = 'https://efps.epaylinks.cn';
  381. $url = $url . '/api/txs/pay/UnionAppPayment';
  382. // $url = $url . 'api/txs/pay/UnifiedPayment';
  383. sr_log('yplurl:'.$url);
  384. // $ch = curl_init();
  385. // curl_setopt($ch, CURLOPT_POST, 1);
  386. // curl_setopt($ch, CURLOPT_URL, $url);
  387. //
  388. // curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  389. // curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过检查
  390. // curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 跳过检查
  391. //curl_setopt($ch, CURLOPT_HEADER, true);
  392. // curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonStr);
  393. $sign = $this->YPLsign(json_encode($params));
  394. $headers = [
  395. // 'Content-type: application/json',
  396. 'x-efps-sign-no'=>'562012003860535001',
  397. 'x-efps-sign-type'=>'SHA256withRSA',
  398. 'x-efps-sign'=>$sign,
  399. 'x-efps-timestamp'=>date('YmdHis')
  400. ];
  401. sr_log('yplheader'.json_encode($headers));
  402. // J+08ZMVCkZnMq0roi3JikP//ODGsy9UvYBM09b921RvU0/3Z+4opOwAFQGPBLrKRGhkZzVhHRJwVDZHA9Iu/wWX13SJyowRYkr8zVsYivNQhYKyt3uPScdN/BVfLM3d5OuA9o2ypIqVuoinorYDsrqXixyYg7LEA4pWTDZc9dtuSRWFF+DFvLTW4UODyiwhBCq7bFaa+MOVmWuiahZMM79MhKxiTqsfFQLptsnlc2crlYuok2Bp2TAbEDM7FZhlLIGiidux0kaLhC3dK31tRc6Y72NlukXJc3sN4HVLqj0GAiw+9jzmGf0NwhvxdHvBC6/7uOp2ShCMxSXUA/qPbLmA7Vh/Zv0njHbxJ0j3oylrhjCjUKGPTKf//GD/vgnVQz2m3KXW6+60PBfWRYwQYkSPFRHj2lRALBYe97q4w0kWa9xO/2yRrIW2lNBqt7ZKSmSstsA+NgiOU4u/LCBmIoxMqk9HzygfDPLhQ9oimOuM/7d//qjP0z6mPD4SbhdVKjfgsp9yqN7h9jR3BJJxDGRAtzJJpDA6/YIcTbkDnJIvHwIx4Fkcf22tBYW436W7f +0GeMLxBp5mAr8qlDJt0R3GoPD4hZ5Omh/FxYhOjN9RKG8QcqSykZSQgYgVAKsGeFWVeXes2XNo2AB1F7MlGuZSypOTv73BL5iE75xJVjRupk6qplmOo2YHLKs8USDSX3Y+QprbAC8irxQ5QtK4ayGbLZ8BDHuKnGLLA1/ID++2ccYJsnfA+9cqvSTm8lo19W1btBl9iZQC8Wfv94rfDsIAe2pc3Gd+LJv47i1mwzK03SQ5c6W8LBxgtStinz/f8Rm5oVn6hTgoRfV93F8ZGRVj5K+KYva5qIjBSyweYToPoXCirUO0UdA96PmU7+oVVOVu4pDcqBJjuSxPXIzRLXbSQUlFHecKjedx2DuOlHPdVMhn2XRjpdd+Ka70Grbw0dro76EvaBzHC2x/rN7g8nIe7ReG4LS2ya07bIXrbHyk6b45XfrneBGHnKDpIX6ymlDKZ2NAWyfXkBEPhiQrsT3AVGrokFjMTRVqubXqRW29Q8if2C5MYduen34s3QtmVHaVUZ24N6cX5FIvCwZYIyBvpFrTCfQZztRz3QngjhclbngGGyBv040WFfQ/sqzkWgdO8XP7cIUWlKmD0xANVq9dQqQiwwcvYpWFzMTpQcw9daGYWltwfzKfRveVnXHyfxaq6XVeHlZCboTDv4Fg5/nVW+s4JCmTXNPedU53ZYcDkrrZcHbygFXgPPOM8KMlowq8KnA9lXUYunHATpa2Q9vKnTED8Ro9gn6IGFpGRdZIeuYOJ+vKMA9sy55AIQiJVUMit7iw2M0ZehPwm4k5Dpi6RMzgC/5+OZc1u+Rt13Borvd3/7EuyqaNwhUkITp7Kl0dv75PQkK0Btcsg+PLVs+2h+GadNurWhl3Bvo6y++5HbkcEfymSFV/phDaAZBTYQFyzjAJhwJizMUBp1HFOetOiLEZSs4iMPj/gwps0BSwqCCRFZXJj3ifLo+fi/bE3rU+/nHcTBo9Dhzw/EVE2KLF1QbZw3fGLnhHqCK+PyOv4i7NwEQKqsA==
  403. $response = $this->http_post_json($url, json_encode($params), $sign);
  404. sr_log('yplresponse'.json_encode($response));
  405. if($response && $response[0] == 200){
  406. $re_data = json_decode($response[1],true);
  407. if($re_data['returnCode'] == '0000') {
  408. $tn = $re_data['tn'];
  409. $this->setPaymentOrder(compact('body', 'out_trade_no','total_amount', 'remarks', 'uid', 'trade_type', 'order_type', 'pay_way', 'voucher_img'), 13);
  410. // return api_succ_return(['msg'=>'成功', 'data'=>['thirdpayYPL'=>['pay_url'=>$payurl]]]);
  411. return api_succ_return(['msg'=>'成功', 'data'=>['thirdpayYPLYsf'=>['tn'=>$tn]]]);
  412. //
  413. }
  414. }else{
  415. return api_error_return('获取失败,请联系客服');
  416. }
  417. return api_error_return('获取失败,请联系客服');
  418. // if (isset($res_decode->order_date) && isset($res_decode->order_token) && isset($res_decode->mchnt_cd) && isset($res_decode->order_id)){
  419. // if ($res_decode->mchnt_cd == $mchnt_cd && $res_decode->order_id == $order_id ){
  420. // $bank_params = [
  421. // 'mchnt_cd'=>$mchnt_cd,
  422. // 'order_date'=>$order_date,
  423. // 'order_amt'=>bcmul($total_amount, 100, 0),
  424. // 'order_id'=>$order_id,
  425. // 'page_notifyurl'=>AESjiami(getWebUrl().'/api/thirdPayClSuccess'),
  426. // 'back_notifyurl'=>AESjiami(getWebUrl().'/api/BankResultFY'),
  427. // 'order_timestart'=>$order_timestart,
  428. // 'order_timeend'=>$order_timeend,
  429. // 'order_token'=>$res_decode->order_token
  430. // ];
  431. //
  432. // $this->setPaymentOrder(compact('body', 'out_trade_no','total_amount', 'remarks', 'uid', 'trade_type', 'order_type', 'pay_way', 'voucher_img'), 9);
  433. // return api_succ_return(['msg'=>'成功', 'data'=>['thirdpayflyl'=>$bank_params]]);
  434. // }else{
  435. // return api_error_return('获取失败,订单校验失败1');
  436. // }
  437. // }else{
  438. // return api_error_return('获取失败,订单校验失败');
  439. // }
  440. return api_error_return('获取失败');
  441. }
  442. // 汇付支付宝支付
  443. public function getHfPayInfoHF($uid, $params){
  444. // 加载基础 adapay 基础类
  445. // SDK 初始化文件加载
  446. // include_once dirname(__FILE__). "/../AdapaySdk/init.php";
  447. include_once "../extend/thirdpay/AdapaySdk/init.php";
  448. // 在文件中设置 DEBUG 为 true 时, 则可以打印日志到指定的日志目录下 LOG_DIR
  449. include_once "../extend/thirdpay/config.php";
  450. list($body, $total_amount, $order_type, $remarks, $trade_type, $pay_way, $voucher_img) = $this->_payConf($uid, $params);
  451. // 这是测试 线要干掉
  452. if (in_array(env('APP.CUR_SYS_PARAMS'), [1, 2])){
  453. // 这是测试 线要干掉
  454. $total_amount = floatval('1.'.mt_rand(1, 3).mt_rand(1, 9));
  455. }
  456. // 商户号
  457. // $mchnt_cd = env('api.PAY_FUYOU_MCHNT_id');
  458. $time = time();
  459. $time_end = time() + 2*60*60;
  460. // $order_date = sr_getcurtime($time, 'Ymd');
  461. $order_timestart = sr_getcurtime($time, 'YmdHis');
  462. $order_timeend = sr_getcurtime($time_end, 'YmdHis');
  463. $order_id = $params['order_id'];
  464. $out_trade_no = 'HFPAY'.$order_id.mt_rand(1, 10000);
  465. // $success_url = getWebUrl().'/api/thirdPayClSuccess';
  466. // $error_url = getWebUrl().'/api/thirdPayClError';
  467. // $notify_url = getWebUrl().'/api/ZfbResultYPL';
  468. // 商品订单信息
  469. // {"businessType":"100007","goodsList":[{"amount":1,"name":"商品名称","number":"1箱"}],"id":"id34535"}
  470. // $orderInfo=array();
  471. // $orderInfo['Id'] = 'id34535';
  472. // $orderInfo['businessType'] = '130001';
  473. // $orderInfo['goodsList'] = array(array('name'=>'pay','number'=>'one','amount'=>1));
  474. // $order_timestart = sr_getcurtime($time, 'YmdHis');
  475. // $params = [
  476. // 'areaInfo'=>'440106',
  477. // 'attachData'=>'attachData',
  478. // 'clientIp'=>request()->ip(),
  479. // 'customerCode'=>'562012003860535',
  480. // 'nonceStr'=>nonce_str(32),
  481. // 'notifyUrl'=>$notify_url,
  482. // 'orderInfo'=>$orderInfo,
  483. // 'outTradeNo'=>$out_trade_no,
  484. // 'payAmount'=>bcmul($total_amount, 100, 0),
  485. // 'payCurrency'=>'CNY',
  486. //// 'payMethod'=>'7',
  487. // 'redirectUrl'=>$success_url,
  488. // 'transactionStartTime'=>date('YmdHis'),
  489. // 'version'=>'3.0'
  490. // ];
  491. // sr_log('ypl'.json_encode($params));
  492. // 测试
  493. // $url = 'http://test-efps.epaylinks.cn';
  494. // 正式
  495. // $url = 'https://efps.epaylinks.cn';
  496. // $url = $url . '/api/txs/pay/UnionAppPayment';
  497. // $url = $url . 'api/txs/pay/UnifiedPayment';
  498. // sr_log('yplurl:'.$url);
  499. // $ch = curl_init();
  500. // curl_setopt($ch, CURLOPT_POST, 1);
  501. // curl_setopt($ch, CURLOPT_URL, $url);
  502. //
  503. // curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  504. // curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过检查
  505. // curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 跳过检查
  506. //curl_setopt($ch, CURLOPT_HEADER, true);
  507. // curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonStr);
  508. // $sign = $this->YPLsign(json_encode($params));
  509. // $headers = [
  510. //// 'Content-type: application/json',
  511. // 'x-efps-sign-no'=>'562012003860535001',
  512. // 'x-efps-sign-type'=>'SHA256withRSA',
  513. // 'x-efps-sign'=>$sign,
  514. // 'x-efps-timestamp'=>date('YmdHis')
  515. // ];
  516. // sr_log('yplheader'.json_encode($headers));
  517. // J+08ZMVCkZnMq0roi3JikP//ODGsy9UvYBM09b921RvU0/3Z+4opOwAFQGPBLrKRGhkZzVhHRJwVDZHA9Iu/wWX13SJyowRYkr8zVsYivNQhYKyt3uPScdN/BVfLM3d5OuA9o2ypIqVuoinorYDsrqXixyYg7LEA4pWTDZc9dtuSRWFF+DFvLTW4UODyiwhBCq7bFaa+MOVmWuiahZMM79MhKxiTqsfFQLptsnlc2crlYuok2Bp2TAbEDM7FZhlLIGiidux0kaLhC3dK31tRc6Y72NlukXJc3sN4HVLqj0GAiw+9jzmGf0NwhvxdHvBC6/7uOp2ShCMxSXUA/qPbLmA7Vh/Zv0njHbxJ0j3oylrhjCjUKGPTKf//GD/vgnVQz2m3KXW6+60PBfWRYwQYkSPFRHj2lRALBYe97q4w0kWa9xO/2yRrIW2lNBqt7ZKSmSstsA+NgiOU4u/LCBmIoxMqk9HzygfDPLhQ9oimOuM/7d//qjP0z6mPD4SbhdVKjfgsp9yqN7h9jR3BJJxDGRAtzJJpDA6/YIcTbkDnJIvHwIx4Fkcf22tBYW436W7f +0GeMLxBp5mAr8qlDJt0R3GoPD4hZ5Omh/FxYhOjN9RKG8QcqSykZSQgYgVAKsGeFWVeXes2XNo2AB1F7MlGuZSypOTv73BL5iE75xJVjRupk6qplmOo2YHLKs8USDSX3Y+QprbAC8irxQ5QtK4ayGbLZ8BDHuKnGLLA1/ID++2ccYJsnfA+9cqvSTm8lo19W1btBl9iZQC8Wfv94rfDsIAe2pc3Gd+LJv47i1mwzK03SQ5c6W8LBxgtStinz/f8Rm5oVn6hTgoRfV93F8ZGRVj5K+KYva5qIjBSyweYToPoXCirUO0UdA96PmU7+oVVOVu4pDcqBJjuSxPXIzRLXbSQUlFHecKjedx2DuOlHPdVMhn2XRjpdd+Ka70Grbw0dro76EvaBzHC2x/rN7g8nIe7ReG4LS2ya07bIXrbHyk6b45XfrneBGHnKDpIX6ymlDKZ2NAWyfXkBEPhiQrsT3AVGrokFjMTRVqubXqRW29Q8if2C5MYduen34s3QtmVHaVUZ24N6cX5FIvCwZYIyBvpFrTCfQZztRz3QngjhclbngGGyBv040WFfQ/sqzkWgdO8XP7cIUWlKmD0xANVq9dQqQiwwcvYpWFzMTpQcw9daGYWltwfzKfRveVnXHyfxaq6XVeHlZCboTDv4Fg5/nVW+s4JCmTXNPedU53ZYcDkrrZcHbygFXgPPOM8KMlowq8KnA9lXUYunHATpa2Q9vKnTED8Ro9gn6IGFpGRdZIeuYOJ+vKMA9sy55AIQiJVUMit7iw2M0ZehPwm4k5Dpi6RMzgC/5+OZc1u+Rt13Borvd3/7EuyqaNwhUkITp7Kl0dv75PQkK0Btcsg+PLVs+2h+GadNurWhl3Bvo6y++5HbkcEfymSFV/phDaAZBTYQFyzjAJhwJizMUBp1HFOetOiLEZSs4iMPj/gwps0BSwqCCRFZXJj3ifLo+fi/bE3rU+/nHcTBo9Dhzw/EVE2KLF1QbZw3fGLnhHqCK+PyOv4i7NwEQKqsA==
  518. // $response = $this->http_post_json($url, json_encode($params), $sign);
  519. # 初始化支付类
  520. $payment = new \AdaPaySdk\Payment();
  521. // sr_log('$total_amount'.$total_amount);
  522. // sr_throw(strval(intval($total_amount)).'.00');
  523. # 支付设置
  524. $payment_params = array(
  525. "app_id"=> "app_3906a188-adf7-4776-a126-fd1996b178d3",
  526. "order_no"=> $out_trade_no,
  527. "pay_channel"=> "alipay",
  528. "time_expire"=> $order_timeend,
  529. "pay_amt"=> strval(intval($total_amount)).'.00',
  530. "goods_title"=> "日用生活用品",
  531. "goods_desc"=> "多宝购买商品",
  532. "description"=> "购买商品",
  533. "notify_url"=>getWebUrl().'/api/ZfbResultHF'
  534. );
  535. sr_log('汇付支付请求参数:'.json_encode($payment_params));
  536. # 发起支付
  537. $payment->create($payment_params);
  538. # 对支付结果进行处理
  539. if ($payment->isError()){
  540. //失败处理
  541. $response = $payment->result;
  542. sr_log('hfresponseerror'.json_encode($response));
  543. return api_error_return('获取失败,请联系客服');
  544. } else {
  545. //成功处理
  546. $response = $payment->result;
  547. $this->setPaymentOrder(compact('body', 'out_trade_no','total_amount', 'remarks', 'uid', 'trade_type', 'order_type', 'pay_way', 'voucher_img'), 14);
  548. // sr_log('hfresponsesuccess'.json_encode($response));
  549. // $info= json_decode($payment->result['expend']);
  550. // $payinfo = $info->pay_info;
  551. $bank_params = [
  552. 'url'=>$response['expend']['pay_info']
  553. ];
  554. return api_succ_return(['msg'=>'成功', 'data'=>['thirdpayhf'=>$bank_params]]);
  555. }
  556. return api_error_return('获取失败,请联系客服');
  557. // if($response && $response[0] == 200){
  558. // $re_data = json_decode($response[1],true);
  559. // if($re_data['returnCode'] == '0000') {
  560. // $tn = $re_data['tn'];
  561. // $this->setPaymentOrder(compact('body', 'out_trade_no','total_amount', 'remarks', 'uid', 'trade_type', 'order_type', 'pay_way', 'voucher_img'), 13);
  562. //// return api_succ_return(['msg'=>'成功', 'data'=>['thirdpayYPL'=>['pay_url'=>$payurl]]]);
  563. // return api_succ_return(['msg'=>'成功', 'data'=>['thirdpayYPLYsf'=>['tn'=>$tn]]]);
  564. ////
  565. // }
  566. //
  567. // }else{
  568. // return api_error_return('获取失败,请联系客服');
  569. // }
  570. //
  571. // return api_error_return('获取失败,请联系客服');
  572. // if (isset($res_decode->order_date) && isset($res_decode->order_token) && isset($res_decode->mchnt_cd) && isset($res_decode->order_id)){
  573. // if ($res_decode->mchnt_cd == $mchnt_cd && $res_decode->order_id == $order_id ){
  574. // $bank_params = [
  575. // 'mchnt_cd'=>$mchnt_cd,
  576. // 'order_date'=>$order_date,
  577. // 'order_amt'=>bcmul($total_amount, 100, 0),
  578. // 'order_id'=>$order_id,
  579. // 'page_notifyurl'=>AESjiami(getWebUrl().'/api/thirdPayClSuccess'),
  580. // 'back_notifyurl'=>AESjiami(getWebUrl().'/api/BankResultFY'),
  581. // 'order_timestart'=>$order_timestart,
  582. // 'order_timeend'=>$order_timeend,
  583. // 'order_token'=>$res_decode->order_token
  584. // ];
  585. //
  586. // $this->setPaymentOrder(compact('body', 'out_trade_no','total_amount', 'remarks', 'uid', 'trade_type', 'order_type', 'pay_way', 'voucher_img'), 9);
  587. // return api_succ_return(['msg'=>'成功', 'data'=>['thirdpayflyl'=>$bank_params]]);
  588. // }else{
  589. // return api_error_return('获取失败,订单校验失败1');
  590. // }
  591. // }else{
  592. // return api_error_return('获取失败,订单校验失败');
  593. // }
  594. return api_error_return('获取失败');
  595. }
  596. // 易票联统一支付
  597. public function getYsfPayInfoTY($uid, $params){
  598. list($body, $total_amount, $order_type, $remarks, $trade_type, $pay_way, $voucher_img) = $this->_payConf($uid, $params);
  599. // 这是测试 线要干掉
  600. // $total_amount = floatval('0.'.'1'.mt_rand(1, 9));
  601. // $total_amount = 0.01;
  602. // 商户号
  603. $mchnt_cd = env('api.PAY_FUYOU_MCHNT_id');
  604. $time = time();
  605. $time_end = time() + 2*60*60;
  606. $order_date = sr_getcurtime($time, 'Ymd');
  607. $order_timestart = sr_getcurtime($time, 'YmdHis');
  608. $order_timeend = sr_getcurtime($time_end, 'YmdHis');
  609. $order_id = $params['order_id'];
  610. $out_trade_no = 'YPL'.$order_id.mt_rand(1, 10000);
  611. // $mess_arr = ['mchnt_cd'=>$mchnt_cd, 'order_date'=>$order_date, 'order_id'=>$params['order_id'], 'ver'=>'1.0.0'];
  612. //// sr_log('message_json'.json_encode($mess_arr));
  613. // $params = ['mchnt_cd'=>$mchnt_cd, 'message'=>RSA_openssl(json_encode($mess_arr))];
  614. $success_url = getWebUrl().'/api/thirdPayClSuccess';
  615. $error_url = getWebUrl().'/api/thirdPayClError';
  616. $notify_url = getWebUrl().'/api/ZfbResultYPL';
  617. // 商品订单信息
  618. // {"businessType":"100007","goodsList":[{"amount":1,"name":"商品名称","number":"1箱"}],"id":"id34535"}
  619. $orderInfo=array();
  620. $orderInfo['Id'] = 'id34535';
  621. $orderInfo['businessType'] = '130001';
  622. $orderInfo['goodsList'] = array(array('name'=>'pay','number'=>'one','amount'=>1));
  623. // $order_timestart = sr_getcurtime($time, 'YmdHis');
  624. $params = [
  625. 'areaInfo'=>'440106',
  626. 'attachData'=>'attachData',
  627. 'clientIp'=>request()->ip(),
  628. 'customerCode'=>'562012003860535',
  629. 'nonceStr'=>nonce_str(32),
  630. 'notifyUrl'=>$notify_url,
  631. 'orderInfo'=>$orderInfo,
  632. 'outTradeNo'=>$out_trade_no,
  633. 'payAmount'=>bcmul($total_amount, 100, 0),
  634. 'payCurrency'=>'CNY',
  635. // 'payMethod'=>'7',
  636. 'redirectUrl'=>$success_url,
  637. 'transactionStartTime'=>date('YmdHis'),
  638. 'version'=>'3.0'
  639. ];
  640. sr_log('ypl'.json_encode($params));
  641. // 测试
  642. // $url = 'http://test-efps.epaylinks.cn';
  643. // 正式
  644. $url = 'https://efps.epaylinks.cn';
  645. $url = $url . '/api/txs/pay/UnifiedPayment';
  646. // $url = $url . 'api/txs/pay/UnifiedPayment';
  647. sr_log('yplurl:'.$url);
  648. // $ch = curl_init();
  649. // curl_setopt($ch, CURLOPT_POST, 1);
  650. // curl_setopt($ch, CURLOPT_URL, $url);
  651. //
  652. // curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  653. // curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过检查
  654. // curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 跳过检查
  655. //curl_setopt($ch, CURLOPT_HEADER, true);
  656. // curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonStr);
  657. // $sign = $this->YPLsign(json_encode($params));
  658. $sign = '333';
  659. $headers = [
  660. // 'Content-type: application/json',
  661. 'x-efps-sign-no'=>'562012003860535001',
  662. 'x-efps-sign-type'=>'SHA256withRSA',
  663. 'x-efps-sign'=>$sign,
  664. 'x-efps-timestamp'=>date('YmdHis')
  665. ];
  666. sr_log('yplheader'.json_encode($headers));
  667. // J+08ZMVCkZnMq0roi3JikP//ODGsy9UvYBM09b921RvU0/3Z+4opOwAFQGPBLrKRGhkZzVhHRJwVDZHA9Iu/wWX13SJyowRYkr8zVsYivNQhYKyt3uPScdN/BVfLM3d5OuA9o2ypIqVuoinorYDsrqXixyYg7LEA4pWTDZc9dtuSRWFF+DFvLTW4UODyiwhBCq7bFaa+MOVmWuiahZMM79MhKxiTqsfFQLptsnlc2crlYuok2Bp2TAbEDM7FZhlLIGiidux0kaLhC3dK31tRc6Y72NlukXJc3sN4HVLqj0GAiw+9jzmGf0NwhvxdHvBC6/7uOp2ShCMxSXUA/qPbLmA7Vh/Zv0njHbxJ0j3oylrhjCjUKGPTKf//GD/vgnVQz2m3KXW6+60PBfWRYwQYkSPFRHj2lRALBYe97q4w0kWa9xO/2yRrIW2lNBqt7ZKSmSstsA+NgiOU4u/LCBmIoxMqk9HzygfDPLhQ9oimOuM/7d//qjP0z6mPD4SbhdVKjfgsp9yqN7h9jR3BJJxDGRAtzJJpDA6/YIcTbkDnJIvHwIx4Fkcf22tBYW436W7f +0GeMLxBp5mAr8qlDJt0R3GoPD4hZ5Omh/FxYhOjN9RKG8QcqSykZSQgYgVAKsGeFWVeXes2XNo2AB1F7MlGuZSypOTv73BL5iE75xJVjRupk6qplmOo2YHLKs8USDSX3Y+QprbAC8irxQ5QtK4ayGbLZ8BDHuKnGLLA1/ID++2ccYJsnfA+9cqvSTm8lo19W1btBl9iZQC8Wfv94rfDsIAe2pc3Gd+LJv47i1mwzK03SQ5c6W8LBxgtStinz/f8Rm5oVn6hTgoRfV93F8ZGRVj5K+KYva5qIjBSyweYToPoXCirUO0UdA96PmU7+oVVOVu4pDcqBJjuSxPXIzRLXbSQUlFHecKjedx2DuOlHPdVMhn2XRjpdd+Ka70Grbw0dro76EvaBzHC2x/rN7g8nIe7ReG4LS2ya07bIXrbHyk6b45XfrneBGHnKDpIX6ymlDKZ2NAWyfXkBEPhiQrsT3AVGrokFjMTRVqubXqRW29Q8if2C5MYduen34s3QtmVHaVUZ24N6cX5FIvCwZYIyBvpFrTCfQZztRz3QngjhclbngGGyBv040WFfQ/sqzkWgdO8XP7cIUWlKmD0xANVq9dQqQiwwcvYpWFzMTpQcw9daGYWltwfzKfRveVnXHyfxaq6XVeHlZCboTDv4Fg5/nVW+s4JCmTXNPedU53ZYcDkrrZcHbygFXgPPOM8KMlowq8KnA9lXUYunHATpa2Q9vKnTED8Ro9gn6IGFpGRdZIeuYOJ+vKMA9sy55AIQiJVUMit7iw2M0ZehPwm4k5Dpi6RMzgC/5+OZc1u+Rt13Borvd3/7EuyqaNwhUkITp7Kl0dv75PQkK0Btcsg+PLVs+2h+GadNurWhl3Bvo6y++5HbkcEfymSFV/phDaAZBTYQFyzjAJhwJizMUBp1HFOetOiLEZSs4iMPj/gwps0BSwqCCRFZXJj3ifLo+fi/bE3rU+/nHcTBo9Dhzw/EVE2KLF1QbZw3fGLnhHqCK+PyOv4i7NwEQKqsA==
  668. // $response = $this->http_post_json($url, json_encode($params), $sign);
  669. // sr_log('yplresponse'.json_encode($response));
  670. // if($response && $response[0] == 200){
  671. // $re_data = json_decode($response[1],true);
  672. // if($re_data['returnCode'] == '0000') {
  673. // $tn = $re_data['tn'];
  674. $tn = 'aaaa';
  675. $this->setPaymentOrder(compact('body', 'out_trade_no','total_amount', 'remarks', 'uid', 'trade_type', 'order_type', 'pay_way', 'voucher_img'), 13);
  676. // return api_succ_return(['msg'=>'成功', 'data'=>['thirdpayYPL'=>['pay_url'=>$payurl]]]);
  677. // return api_succ_return(['msg'=>'成功', 'data'=>['thirdpayYPLYsf'=>['tn'=>$tn]]]);
  678. return api_succ_return(['msg'=>'成功', 'data'=>['thirdpayYPLYsf'=>['tn'=>$out_trade_no]]]);
  679. //
  680. //
  681. // }
  682. // }else{
  683. // return api_error_return('获取失败,请联系客服');
  684. // }
  685. return api_error_return('获取失败,请联系客服');
  686. // if (isset($res_decode->order_date) && isset($res_decode->order_token) && isset($res_decode->mchnt_cd) && isset($res_decode->order_id)){
  687. // if ($res_decode->mchnt_cd == $mchnt_cd && $res_decode->order_id == $order_id ){
  688. // $bank_params = [
  689. // 'mchnt_cd'=>$mchnt_cd,
  690. // 'order_date'=>$order_date,
  691. // 'order_amt'=>bcmul($total_amount, 100, 0),
  692. // 'order_id'=>$order_id,
  693. // 'page_notifyurl'=>AESjiami(getWebUrl().'/api/thirdPayClSuccess'),
  694. // 'back_notifyurl'=>AESjiami(getWebUrl().'/api/BankResultFY'),
  695. // 'order_timestart'=>$order_timestart,
  696. // 'order_timeend'=>$order_timeend,
  697. // 'order_token'=>$res_decode->order_token
  698. // ];
  699. //
  700. // $this->setPaymentOrder(compact('body', 'out_trade_no','total_amount', 'remarks', 'uid', 'trade_type', 'order_type', 'pay_way', 'voucher_img'), 9);
  701. // return api_succ_return(['msg'=>'成功', 'data'=>['thirdpayflyl'=>$bank_params]]);
  702. // }else{
  703. // return api_error_return('获取失败,订单校验失败1');
  704. // }
  705. // }else{
  706. // return api_error_return('获取失败,订单校验失败');
  707. // }
  708. return api_error_return('获取失败');
  709. }
  710. // 易票联进件申请
  711. public function getYsfPayJJSubmit($uid, $params){
  712. // list($body, $total_amount, $order_type, $remarks, $trade_type, $pay_way, $voucher_img) = $this->_payConf($uid, $params);
  713. // 这是测试 线要干掉
  714. // $total_amount = floatval('0.'.'1'.mt_rand(1, 9));
  715. // $total_amount = 0.01;
  716. $time = time();
  717. $time_end = time() + 2*60*60;
  718. $order_date = sr_getcurtime($time, 'Ymd');
  719. $order_timestart = sr_getcurtime($time, 'YmdHis');
  720. $order_timeend = sr_getcurtime($time_end, 'YmdHis');
  721. // $order_id = $params['order_id'];
  722. // $out_trade_no = 'YPL'.$order_id.mt_rand(1, 10000);
  723. // $mess_arr = ['mchnt_cd'=>$mchnt_cd, 'order_date'=>$order_date, 'order_id'=>$params['order_id'], 'ver'=>'1.0.0'];
  724. //// sr_log('message_json'.json_encode($mess_arr));
  725. // $params = ['mchnt_cd'=>$mchnt_cd, 'message'=>RSA_openssl(json_encode($mess_arr))];
  726. $success_url = 'https://api.meikangjw.com/api/yplApplyResult';
  727. $error_url = getWebUrl().'/api/thirdPayClError';
  728. $notify_url = getWebUrl().'/api/ZfbResultYPL';
  729. // 商品订单信息
  730. // {"businessType":"100007","goodsList":[{"amount":1,"name":"商品名称","number":"1箱"}],"id":"id34535"}
  731. // $orderInfo=array();
  732. // $orderInfo['Id'] = 'id34535';
  733. // $orderInfo['businessType'] = '130001';
  734. // $orderInfo['goodsList'] = array(array('name'=>'pay','number'=>'one','amount'=>1));
  735. // $order_timestart = sr_getcurtime($time, 'YmdHis');
  736. $paper = array();
  737. //-------------------------------------------------------
  738. // 经营地址
  739. $paper['businessAddress'] = '重庆市渝北区回兴街道宝圣大道209号西政国际学术交流中心1幢';
  740. // 证件人姓名
  741. $paper['certificateName']='胡明冬';
  742. // 证件效期(截止) 无限期填写“长期”
  743. $paper['certificateTo']='20270104';
  744. // 省
  745. $paper['province']='500000';
  746. // 市
  747. $paper['city']='500100';
  748. // 区
  749. $paper['area'] = '500112';
  750. // MCC 码 参考附件商户类别 MCC 码
  751. $paper['mcc']= '5399';
  752. // 联系人姓名
  753. $paper['contactPerson']='胡明冬';
  754. // 联系人手机号码
  755. $paper['contactPhone']='13330218461';
  756. // 邮箱地址
  757. $paper['email']='845313908@qq.com';
  758. // $paper['isCc']='1';
  759. // 证件号码
  760. $paper['lawyerCertNo']='513002199602181213';
  761. //// 证件背面
  762. $paper['lawyerCertPhotoBack']= 'https://api.meikangjw.com/upload/20220707/42b46e4e6b82c81b9bb3c72d1c630c80.jpg';
  763. /// // 证件正面照
  764. $paper['lawyerCertPhotoFront']= 'https://api.meikangjw.com/upload/20220707/5fa0ff6cc891e545c1aa423db7613f63.jpg';
  765. // 0:身份证;1:居住证;2:签证;3:护照;4:户口本;5:军人证;6:团员证;7:党员证;8:港澳通行证;9:台胞证;11:临时身份证;12:回乡证;13:营业执照:14:组织机构代码证;15:驾驶证;99:其他目前仅支持 0:身份证
  766. $paper['lawyerCertType']= '0';
  767. // 开户银行 填写银行名称,参见附件银行
  768. $paper['openBank']='中国工商银行';
  769. // 开户行联行号 settleAccountType 为“1:对公账户”时必填,参见附件支行及联行号 查询不到 看链接查询 https://www.lianhanghao.com/
  770. $paper['openBankCode']='102290010045';
  771. // 开户支行 settleAccountType 为“1:对公账户”时必填
  772. $paper['openSubBank']='中国工商银行股份有限公司上海市闵行支行';
  773. // 客服电话
  774. $paper['serviceTel']='13330218461';
  775. // 结算账户名 ①merchantType=1、2 且 settleAccountType=1 时,需与merchantName 一致; ②merchantType=1、2 且 settleAccountType=2 时,需与lawyerName 一致; ③merchantType=3 时,需与 certificateName 一致。
  776. $paper['settleAccount']='胡明冬';
  777. // 1:个体工商户;2:企业;3:个人(小微);4:政府 事业单位;9:其他组织
  778. $paper['merchantType']='3';
  779. // 结算账户类型 1:对公账户 2:法人账户 3:授权对公 4:授权对私 merchantType=3 时必填 2。
  780. $paper['settleAccountType']='2';
  781. // 银行卡正面照
  782. $paper['bankCardPhotoFront'] = 'https://api.meikangjw.com/upload/20220707/1d80b9edb7773c0d1313270a9b39da6c.jpeg';
  783. // 银行卡背面照
  784. $paper['bankCardPhotoBack'] = 'https://api.meikangjw.com/upload/20220707/aff7377fff22225bff320a51cddaa75d.jpeg';
  785. // 结算账户号
  786. $paper['settleAccountNo']='6222031001022713072';
  787. // 提现方式 1:自动提现;2:手动提现
  788. $paper['settleTarget']='2';
  789. // 商户简称
  790. $paper['shortName']='hmd_xiaowei';
  791. //-------------------------------------------------------
  792. //// 银行卡背面照
  793. // $paper['bankCardPhotoBack']= 'http://api.meikangjw.com/upload/common/bank2.jpeg';
  794. //// 银行卡正面照
  795. // $paper['bankCardPhotoFront']= 'http://api.meikangjw.com/upload/common/bank1.jpeg';
  796. // $paper['businessAddress'] = '四川省成都市天府新区华阳正北中街40号附70号';
  797. // $paper['businessLicenseCode'] = '91510100MA7HGL78XY';
  798. // $paper['businessLicenseFrom']= '20220304';
  799. // $paper['businessLicenseName']= '四川蜀盛锦蓉科技有限公司';
  800. //// 营业执照照片
  801. // $paper['businessLicensePhoto']= 'http://api.meikangjw.com/upload/common/zhizhao.jpeg';
  802. // $paper['businessLicenseTo']='长期';
  803. // $paper['businessScope']='一般项目:技术服务、技术开发、技术咨询、技术交流、技术转让、技术推广:计算机软硬件及辅助设备批发;计算机软硬件网设备销售';
  804. //// $paper['businessScope']='技术服务';
  805. // $paper['certificateFrom']='20160620';
  806. // $paper['lawyerName']='张华贵';
  807. // $paper['licenceAccount']='四川蜀盛锦蓉科技有限公司';
  808. // $paper['licenceAccountNo']='22827401040017379';
  809. // $paper['licenceOpenBank']='中国农业银行';
  810. // $paper['licenceOpenSubBank']='中国农业银行股份有限公司成都华阳支行';
  811. // $paper['openBankReservePhone']='19939960631';
  812. //// 营业执照照片
  813. // $paper['openingLicenseAccountPhoto']='http://api.meikangjw.com/upload/common/zhizhao.jpeg';
  814. // $paper['organizationCode']= '91510100MA7HGL78XY';
  815. // $paper['organizationCodeFrom']='20220304';
  816. //// 组织机构代码照片
  817. // $paper['organizationCodePhoto']='http://api.meikangjw.com/upload/common/zhizhao.jpeg';
  818. // $paper['organizationCodeTo']='长期';
  819. // $paper['otherPhoto']= array('http://api.meikangjw.com/upload/common/store_neibu.jpg', 'http://api.meikangjw.com/upload/common/store_neibu1.jpg');
  820. // $paper['registerAddress']= '四川省成都市天府新区华阳正北中街40号附70号';
  821. // 门店收银台照
  822. // $paper['storeCashierPhoto']='http://api.meikangjw.com/upload/common/store.jpg';
  823. // 门店内景照
  824. $paper['storeHallPhoto']='https://api.meikangjw.com/upload/20220711/a9ed2ef249e919c8432f756bd4b29a0a.jpg';
  825. // 门店门头照
  826. $paper['storeHeadPhoto']='https://api.meikangjw.com/upload/20220711/e3491c28c5096fc20b6c84efff3b003e.jpg';
  827. // 门店外景照
  828. $paper['storeShopPhoto']='https://api.meikangjw.com/upload/20220711/e3491c28c5096fc20b6c84efff3b003e.jpg';
  829. // $paper['unionShortName']='蜀盛锦蓉店铺';
  830. // refundFeeRate 退款手续费费率
  831. // settleCycle 结算周期
  832. // stage 手续费费率
  833. // stage.amountFrom 阶梯起始交易金额
  834. // stage.feePer 单笔收费
  835. // stage.feeRate 按比例收费
  836. // 代付带储蓄卡
  837. $b_withdraw = array('bankStage'=>[],'businessCode'=>'WITHDRAW','creditcardsEnabled'=>0,'refundEnabled'=>1,'refundFeePer'=>0,'refundFeeRate'=>0,'settleCycle'=>'D+0','stage'=>array(array('amountFrom'=>0, 'feePer'=>200)));
  838. // array_push($business, $b_withdraw);
  839. // 支付宝 主扫支付
  840. $b_alinav = array('bankStage'=>[],'businessCode'=>'ALI_NATIVE_PAY','creditcardsEnabled'=>0,'refundEnabled'=>1,'refundFeePer'=>0,'refundFeeRate'=>0,'settleCycle'=>'D+1','stage'=>array(array('amountFrom'=>0, 'feeRate'=>60)));
  841. // array_push($business, $b_alinav);
  842. // 微信 主扫支付
  843. // $b_weichatnav = array('bankStage'=>[],'businessCode'=>'WX_NATIVE_PAY','creditcardsEnabled'=>0,'refundEnabled'=>1,'refundFeePer'=>0,'refundFeeRate'=>0,'settleCycle'=>'D+1','stage'=>array(array('amountFrom'=>0, 'feeRate'=>60)));
  844. // array_push($business, $b_weichatnav);
  845. // 支付宝生活号支付
  846. $b_alinav1 = array('bankStage'=>[],'businessCode'=>'ALI_JSAPI_PAY','creditcardsEnabled'=>0,'refundEnabled'=>1,'refundFeePer'=>0,'refundFeeRate'=>0,'settleCycle'=>'D+1','stage'=>array(array('amountFrom'=>0, 'feeRate'=>60)));
  847. // array_push($business, $b_alinav1);
  848. // $business = array($b_withdraw, $b_alinav, $b_weichatnav, $b_alinav1);
  849. $business = array($b_withdraw, $b_alinav, $b_alinav1);
  850. // $business = array($b_withdraw, $b_alinav);
  851. // sr_log($business);
  852. $params = [
  853. // 是否收单 1 是,0 否
  854. 'acceptOrder'=>'1',
  855. // 平台商户编号
  856. 'acqSpId'=>'562012003860535',
  857. // 支付宝 MCC
  858. // 'alipayMcc'=>'5411',
  859. // 平台商户支付宝渠道商 PID
  860. // 'alipayChannelId'=>'',
  861. // 审核回调地址
  862. 'backUrl'=>$success_url,
  863. 'business'=>$business,
  864. // 填写进件的小微名字
  865. // 个体户名称商户名称的,命名规则,按照银联标准进行 名称(市+地区+行业+姓名+个体户)
  866. // 小微商户名称,命名规则(地区+店铺名称)
  867. 'merchantName'=>'重庆闲食有趣',
  868. // 是否开户
  869. 'openAccount'=>'1',
  870. 'paper'=>json_encode($paper),
  871. // 更换子商户信息必传
  872. 'acqMerId'=>562227003867484
  873. ];
  874. sr_log('yplpaper'.json_encode($paper));
  875. sr_log('ypl'.json_encode($params));
  876. // return api_succ_return('成功');
  877. // 测试
  878. // $url = 'http://test-efps.epaylinks.cn';
  879. // 正式
  880. $url = 'https://efps.epaylinks.cn';
  881. // 商户进件或者补件
  882. $url = $url . '/api/cust/SP/Merchant/apply';
  883. // $url = $url . 'api/txs/pay/UnifiedPayment';
  884. sr_log('yplurl:'.$url);
  885. // $ch = curl_init();
  886. // curl_setopt($ch, CURLOPT_POST, 1);
  887. // curl_setopt($ch, CURLOPT_URL, $url);
  888. //
  889. // curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  890. // curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过检查
  891. // curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 跳过检查
  892. //curl_setopt($ch, CURLOPT_HEADER, true);
  893. // curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonStr);
  894. $sign = $this->YPLsign(json_encode($params));
  895. $headers = [
  896. // 'Content-type: application/json',
  897. 'x-efps-sign-no'=>'562012003860535001',
  898. 'x-efps-sign-type'=>'SHA256withRSA',
  899. 'x-efps-sign'=>$sign,
  900. 'x-efps-timestamp'=>date('YmdHis')
  901. ];
  902. sr_log('yplheader'.json_encode($headers));
  903. // J+08ZMVCkZnMq0roi3JikP//ODGsy9UvYBM09b921RvU0/3Z+4opOwAFQGPBLrKRGhkZzVhHRJwVDZHA9Iu/wWX13SJyowRYkr8zVsYivNQhYKyt3uPScdN/BVfLM3d5OuA9o2ypIqVuoinorYDsrqXixyYg7LEA4pWTDZc9dtuSRWFF+DFvLTW4UODyiwhBCq7bFaa+MOVmWuiahZMM79MhKxiTqsfFQLptsnlc2crlYuok2Bp2TAbEDM7FZhlLIGiidux0kaLhC3dK31tRc6Y72NlukXJc3sN4HVLqj0GAiw+9jzmGf0NwhvxdHvBC6/7uOp2ShCMxSXUA/qPbLmA7Vh/Zv0njHbxJ0j3oylrhjCjUKGPTKf//GD/vgnVQz2m3KXW6+60PBfWRYwQYkSPFRHj2lRALBYe97q4w0kWa9xO/2yRrIW2lNBqt7ZKSmSstsA+NgiOU4u/LCBmIoxMqk9HzygfDPLhQ9oimOuM/7d//qjP0z6mPD4SbhdVKjfgsp9yqN7h9jR3BJJxDGRAtzJJpDA6/YIcTbkDnJIvHwIx4Fkcf22tBYW436W7f +0GeMLxBp5mAr8qlDJt0R3GoPD4hZ5Omh/FxYhOjN9RKG8QcqSykZSQgYgVAKsGeFWVeXes2XNo2AB1F7MlGuZSypOTv73BL5iE75xJVjRupk6qplmOo2YHLKs8USDSX3Y+QprbAC8irxQ5QtK4ayGbLZ8BDHuKnGLLA1/ID++2ccYJsnfA+9cqvSTm8lo19W1btBl9iZQC8Wfv94rfDsIAe2pc3Gd+LJv47i1mwzK03SQ5c6W8LBxgtStinz/f8Rm5oVn6hTgoRfV93F8ZGRVj5K+KYva5qIjBSyweYToPoXCirUO0UdA96PmU7+oVVOVu4pDcqBJjuSxPXIzRLXbSQUlFHecKjedx2DuOlHPdVMhn2XRjpdd+Ka70Grbw0dro76EvaBzHC2x/rN7g8nIe7ReG4LS2ya07bIXrbHyk6b45XfrneBGHnKDpIX6ymlDKZ2NAWyfXkBEPhiQrsT3AVGrokFjMTRVqubXqRW29Q8if2C5MYduen34s3QtmVHaVUZ24N6cX5FIvCwZYIyBvpFrTCfQZztRz3QngjhclbngGGyBv040WFfQ/sqzkWgdO8XP7cIUWlKmD0xANVq9dQqQiwwcvYpWFzMTpQcw9daGYWltwfzKfRveVnXHyfxaq6XVeHlZCboTDv4Fg5/nVW+s4JCmTXNPedU53ZYcDkrrZcHbygFXgPPOM8KMlowq8KnA9lXUYunHATpa2Q9vKnTED8Ro9gn6IGFpGRdZIeuYOJ+vKMA9sy55AIQiJVUMit7iw2M0ZehPwm4k5Dpi6RMzgC/5+OZc1u+Rt13Borvd3/7EuyqaNwhUkITp7Kl0dv75PQkK0Btcsg+PLVs+2h+GadNurWhl3Bvo6y++5HbkcEfymSFV/phDaAZBTYQFyzjAJhwJizMUBp1HFOetOiLEZSs4iMPj/gwps0BSwqCCRFZXJj3ifLo+fi/bE3rU+/nHcTBo9Dhzw/EVE2KLF1QbZw3fGLnhHqCK+PyOv4i7NwEQKqsA==
  904. $response = $this->http_post_json($url, json_encode($params), $sign);
  905. sr_log('yplresponse'.json_encode($response));
  906. if($response && $response[0] == 200){
  907. $re_data = json_decode($response[1],true);
  908. if($re_data['respCode'] == '0000') {
  909. // $tn = $re_data['tn'];
  910. // $this->setPaymentOrder(compact('body', 'out_trade_no','total_amount', 'remarks', 'uid', 'trade_type', 'order_type', 'pay_way', 'voucher_img'), 13);
  911. // return api_succ_return(['msg'=>'成功', 'data'=>['thirdpayYPL'=>['pay_url'=>$payurl]]]);
  912. return api_succ_return('成功');
  913. // return api_succ_return(['msg'=>'成功', 'data'=>['thirdpayYPLYsf'=>['tn'=>$tn]]]);
  914. //
  915. }else{
  916. return api_error_return($re_data['respMsg']);
  917. }
  918. }else{
  919. return api_error_return('获取失败,请联系客服');
  920. }
  921. return api_error_return('获取失败,请联系客服');
  922. return api_error_return('获取失败');
  923. }
  924. protected function http_post_json($url, $jsonStr,$sign)
  925. {
  926. $ch = curl_init();
  927. $headers = array(
  928. 'Content-Type: application/json; charset=utf-8',
  929. 'Content-Length: ' . strlen($jsonStr),
  930. 'x-efps-sign-no:'.'562012003860535001',
  931. 'x-efps-sign-type:SHA256withRSA',
  932. 'x-efps-sign:'.$sign,
  933. 'x-efps-timestamp:'.date('YmdHis'),
  934. );
  935. curl_setopt($ch, CURLOPT_POST, 1);
  936. curl_setopt($ch, CURLOPT_URL, $url);
  937. curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonStr);
  938. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  939. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过检查
  940. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 跳过检查
  941. //curl_setopt($ch, CURLOPT_HEADER, true);
  942. curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  943. $response = curl_exec($ch);
  944. $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  945. return array($httpCode, $response);
  946. }
  947. protected function YPLsign($data) {
  948. $certs = array();
  949. if (env("app.CUR_SYS_PARAMS") == 1){
  950. //其中password为你的证书密码
  951. openssl_pkcs12_read(file_get_contents('/Users/sunriseos/Documents/www/wwwroot/cert/ypl/user-rsa.pfx'), $certs, 'zy2033.');
  952. }else{
  953. openssl_pkcs12_read(file_get_contents('/www/wwwroot/cert/ypl/user-rsa.pfx'), $certs, 'zy2033.'); //其中password为你的证书密码
  954. }
  955. ($certs) or die('您使用的私钥格式错误,请检查RSA私钥配置');
  956. openssl_sign($data, $sign, $certs['pkey'],OPENSSL_ALGO_SHA256);
  957. $sign = base64_encode($sign);
  958. return $sign;
  959. }
  960. /**
  961. * 费用配置
  962. * @param int $uid
  963. * @param array $data
  964. * @param int $type
  965. * @return array
  966. */
  967. public function _payConf(int $uid, array $data, int $type = 1)
  968. {
  969. $body = $total_amount = $remarks = '';
  970. switch ($data['order_type']) {
  971. case 1: // 充值
  972. $body = '充值';
  973. $total_amount = $data['money'];
  974. break;
  975. case 2: // 实名认证
  976. $total_amount = Db::name('user_data')->where('uid', $uid)->value('rz_money');
  977. // if (!$total_amount || $total_amount < 1.5)
  978. // throw new Exception('认证费用不正确');
  979. $body = '实名认证费用';
  980. // $body = '购买商品';
  981. break;
  982. case 3: // 开通会员
  983. $vip_money = env('app.VIP_MONEY', 38);
  984. if (!$vip_money > 0) {
  985. throw new Exception('会员配置不存在');
  986. }
  987. $body = '开通会员';
  988. $total_amount = $vip_money;
  989. $remarks = $data['order_id'];
  990. break;
  991. case 4: //购买商品
  992. $order_sn = $data['order_id'];
  993. // $checkingOrder = Order::checkingOrder($order_sn, $data['money'], $uid);
  994. // new
  995. $checkingOrder = Order::checkingOrder($order_sn, 0, $uid);
  996. if (!$checkingOrder) {
  997. throw new Exception('校验订单失败');
  998. }
  999. if ($checkingOrder['flag'] !== 200) {
  1000. throw new Exception($checkingOrder['msg']);
  1001. }
  1002. $body = '购买商品';
  1003. $total_amount = $checkingOrder['orderPayment'];
  1004. $remarks = $order_sn;
  1005. //更改订单支付状态为线下支付待审核状态
  1006. if ($data['channel'] == 4 && $data['order_type'] == 4) {
  1007. Order::where('order_sn', 'in', $order_sn)->save(['pay_type' => 4, 'status' => 4]);
  1008. }
  1009. break;
  1010. case 5: //余额充值
  1011. {
  1012. if (intval($data['money']) < 0){
  1013. sr_throw('金额填写错误,请填写整数');
  1014. }
  1015. if (!str_is_int($data['money'])){
  1016. sr_throw('充值金额有误,请输入正整数');
  1017. }
  1018. if ($data['money'] > 10000 || $data['money'] < 20){
  1019. sr_throw('请输入20到10000之间金额充值');
  1020. }
  1021. if ($data['channel'] == 19){
  1022. $usdt_price = Db::name('system_config')->where('name', 'usdt_price')->where('group', 'usdt_price')->value('value');
  1023. }
  1024. // 保留两位小数进一
  1025. // ceil($data['money']/$usdt_price * 100)/100
  1026. $charge_sn = createdRechargeOrderSn();
  1027. Db::name('recharge_order')->insertGetId([
  1028. 'recharge_sn'=>$charge_sn,
  1029. 'payment'=>$data['money'],
  1030. 'total_price'=>$data['money'],
  1031. 'usdt_money'=>($data['channel']==19?ceil($data['money']/$usdt_price * 100)/100:0),
  1032. 'user_id'=>$uid,
  1033. 'pay_type'=>$data['channel'],
  1034. 'status'=>1,
  1035. 'expires_time'=>sr_getcurtime(time()+0.5*3600),
  1036. 'created_time'=>sr_getcurtime(time())
  1037. ]);
  1038. $count = Db::name('recharge_order')->where('user_id', $uid)->where('pay_type', $data['channel'])->where('status', 1)->whereTime('created_time', '-2 hours')->count('order_id');
  1039. if ($count > 20){
  1040. sr_throw('未支付订单过多请2小时后在试');
  1041. }
  1042. // $order_sn = $data['order_id'];
  1043. //// $checkingOrder = Order::checkingOrder($order_sn, $data['money'], $uid);
  1044. // // new
  1045. // $checkingOrder = Order::checkingOrder($order_sn, 0, $uid);
  1046. // if (!$checkingOrder) {
  1047. // throw new Exception('校验订单失败');
  1048. // }
  1049. // if ($checkingOrder['flag'] !== 200) {
  1050. // throw new Exception($checkingOrder['msg']);
  1051. // }
  1052. $body = '用户充值';
  1053. $total_amount = $data['money'];
  1054. $remarks = $charge_sn;
  1055. // //更改订单支付状态为线下支付待审核状态
  1056. // if ($data['channel'] == 4 && $data['order_type'] == 4) {
  1057. // Order::where('order_sn', 'in', $order_sn)->save(['pay_type' => 4, 'status' => 4]);
  1058. // }
  1059. }
  1060. break;
  1061. case 6:
  1062. {
  1063. // 保留两位小数进一
  1064. // ceil($data['money']/$usdt_price * 100)/100
  1065. $money = env('boxsetting.SERVICES_STORE_OPEN_PRICE');
  1066. $charge_sn = createdRechargeOrderSn();
  1067. Db::name('services_order')->insertGetId([
  1068. 'recharge_sn'=>$charge_sn,
  1069. 'payment'=>$money,
  1070. 'total_price'=>$money,
  1071. 'usdt_money'=>0,
  1072. 'user_id'=>$uid,
  1073. 'pay_type'=>$data['channel'],
  1074. 'status'=>1,
  1075. 'expires_time'=>sr_getcurtime(time()+0.5*3600),
  1076. 'created_time'=>sr_getcurtime(time())
  1077. ]);
  1078. $count = Db::name('services_order')->where('user_id', $uid)->where('pay_type', $data['channel'])->where('status', 1)->whereTime('created_time', '-2 hours')->count('order_id');
  1079. if ($count > 20){
  1080. sr_throw('未支付订单过多请稍后在试');
  1081. }
  1082. $body = '用户购买服务商服务';
  1083. $total_amount = $money;
  1084. $remarks = $charge_sn;
  1085. }
  1086. break;
  1087. }
  1088. if (!$body || !$total_amount || $total_amount <= 0)
  1089. throw new Exception('配置错误');
  1090. return [$body, $type == 1 ? $total_amount : bcmul($total_amount, 100, 2), $data['order_type'], $remarks, $data['trade_type'], $data['channel'], isset($data['voucher_img']) ? $data['voucher_img'] : ''];
  1091. }
  1092. public function getPayInfoSQZ($uid, $params){
  1093. list($body, $total_amount, $order_type, $remarks, $trade_type, $pay_way, $voucher_img) = $this->_payConf($uid, $params);
  1094. $sign_info = Db::name('user_bank_sign')->where('uid', $uid)->where('id', $params['sign_id'])->find();
  1095. if (!$sign_info){
  1096. sr_throw('参数错误');
  1097. }
  1098. // if ($total_amount>2000){
  1099. // sr_throw('暂时只支持2000以下商品支付');
  1100. // }
  1101. $order_id = '';
  1102. if ($order_type == 4){
  1103. $order_id = $params['order_id'];
  1104. }
  1105. if ($order_type == 5){
  1106. $order_id = $remarks;
  1107. }
  1108. if ($order_type == 6){
  1109. // 如果是购买服务商订单 order_id 就是 services_order 里面的order_id
  1110. $order_id = $remarks;
  1111. }
  1112. $out_trade_no = 'SY'.$order_id.mt_rand(1, 10000);
  1113. // PAYBACK_URL
  1114. $pay_success_backurl = env('PAYSQZ.PAYBACK_URL');
  1115. if (in_array(env('APP.CUR_SYS_PARAMS'), [1, 2])){
  1116. // 这是测试 线要干掉
  1117. $total_amount = floatval('0.'.mt_rand(1, 3).mt_rand(1, 9));
  1118. }
  1119. $parterid = env('PAYSQZ.PARTER');
  1120. $params = [
  1121. 'parter'=>$parterid,
  1122. 'type'=>1000,
  1123. 'value'=>$total_amount,
  1124. 'orderid'=>$out_trade_no,
  1125. 'callbackurl'=>$pay_success_backurl,
  1126. 'payerIp'=>request()->ip(),
  1127. 'userno'=>$sign_info['userno']
  1128. ];
  1129. // 提交确定支付
  1130. // sr_log('确认支付:'.json_encode($params));
  1131. $params['sign'] = md5('parter='.$parterid.'&type='.'1000'.'&value='.$total_amount.'&orderid='.$out_trade_no.'&callbackurl='.$pay_success_backurl.env('PAYSQZ.SIGNKEY'));
  1132. $res = _curlrequest('http://pay.xindonglife.com/chargebank.aspx', $params, 'post');
  1133. // 这是测试 上线要干掉
  1134. // sr_log('确认支付:'.$res);
  1135. // sr_log('sign:'.$res);
  1136. $res = json_decode($res);
  1137. if (isset($res->code) && $res->code == 'SUCCESS'){
  1138. // $this->setPaymentOrder(compact('body', 'out_trade_no','total_amount', 'remarks', 'uid', 'trade_type', 'order_type', 'pay_way', 'voucher_img'), 13);
  1139. $insert = [
  1140. 'total_fee' => $total_amount,
  1141. 'trade_type' => $trade_type,
  1142. 'body' => $body,
  1143. 'state' => 7,
  1144. 'out_trade_no' => $out_trade_no,
  1145. 'pay_way' => $pay_way,
  1146. 'remarks' => $remarks,
  1147. 'order_type' => $order_type,
  1148. 'uid' => $uid,
  1149. 'voucher_img' => $voucher_img,
  1150. 'out_trade_no1'=>$res->orderid,
  1151. 'hy_token_id'=>$res->hy_token_id
  1152. ];
  1153. Db::name('payment')->insert($insert);
  1154. // return api_succ_return(['msg'=>'成功', 'data'=>['thirdpayYPL'=>['pay_url'=>$payurl]]]);
  1155. // return api_succ_return(['msg'=>'成功', 'data'=>['thirdpayYPLYsf'=>['tn'=>$tn]]]);
  1156. return api_succ_return(['msg'=>'成功', 'data'=>['thirdpaySYL'=>['orderid'=>$res->orderid,'mobile'=>$sign_info['phone']]]]);
  1157. }else{
  1158. sr_log('error'.json_encode($res));
  1159. }
  1160. }
  1161. public function getPayInfoSQZAlipay($uid, $params){
  1162. list($body, $total_amount, $order_type, $remarks, $trade_type, $pay_way, $voucher_img) = $this->_payConf($uid, $params);
  1163. // $sign_info = Db::name('user_bank_sign')->where('uid', $uid)->where('id', $params['sign_id'])->find();
  1164. // if (!$sign_info){
  1165. // sr_throw('参数错误');
  1166. // }
  1167. $order_id = '';
  1168. if ($order_type == 4){
  1169. $order_id = $params['order_id'];
  1170. }
  1171. if ($order_type == 5){
  1172. $order_id = $remarks;
  1173. }
  1174. // $out_trade_no = 'SYP'.$order_id.mt_rand(1, 99);
  1175. $out_trade_no = 'SA'.$order_id.mt_rand(1, 10000);
  1176. // $has_get = false;
  1177. // if ($pay_info = Db::name('payment')->where('remarks', $params['order_id'])->where('pay_way', 16)->where('state', 7)->find()){
  1178. // $has_get = true;
  1179. // $out_trade_no = $pay_info['out_trade_no'];
  1180. // }
  1181. // PAYBACK_URL
  1182. $pay_success_backurl = env('PAYSQZ.PAYAliBACK_URL');
  1183. // $total_amount = 1;
  1184. if (in_array(env('APP.CUR_SYS_PARAMS'), [1, 2])){
  1185. // 这是测试 线要干掉
  1186. $total_amount = floatval('0.'.mt_rand(1, 3).mt_rand(1, 9));
  1187. }
  1188. $parterid = env('PAYSQZ.PARTER');
  1189. $params = [
  1190. 'parter'=>$parterid,
  1191. 'type'=>1010,
  1192. 'value'=>$total_amount,
  1193. 'orderid'=>$out_trade_no,
  1194. 'callbackurl'=>$pay_success_backurl,
  1195. 'payerIp'=>request()->ip()
  1196. ];
  1197. // 提交确定支付
  1198. sr_log('确认支付支付宝:'.json_encode($params));
  1199. $params['sign'] = md5('parter='.$parterid.'&type='.'1010'.'&value='.$total_amount.'&orderid='.$out_trade_no.'&callbackurl='.$pay_success_backurl.env('PAYSQZ.SIGNKEY'));
  1200. $url = 'http://pay.xindonglife.com/chargebank.aspx';
  1201. // if (!$has_get){
  1202. $insert = [
  1203. 'total_fee' => $total_amount,
  1204. 'trade_type' => $trade_type,
  1205. 'body' => $body,
  1206. 'state' => 7,
  1207. 'out_trade_no' => $out_trade_no,
  1208. 'pay_way' => $pay_way,
  1209. 'remarks' => $remarks,
  1210. 'order_type' => $order_type,
  1211. 'uid' => $uid,
  1212. 'voucher_img' => $voucher_img,
  1213. 'out_trade_no1'=>'',
  1214. 'hy_token_id'=>''
  1215. ];
  1216. Db::name('payment')->insert($insert);
  1217. // }
  1218. $pay_url = $url . '?' . http_build_query($params);
  1219. sr_log('支付宝支付链接:'.$pay_url);
  1220. return api_succ_return(['msg'=>'成功', 'data'=>['thirdpaySQZAlipay'=>['pay_url'=>$pay_url]]]);
  1221. }
  1222. public function getPayInfoSQZWechat($uid, $params){
  1223. list($body, $total_amount, $order_type, $remarks, $trade_type, $pay_way, $voucher_img) = $this->_payConf($uid, $params);
  1224. // $sign_info = Db::name('user_bank_sign')->where('uid', $uid)->where('id', $params['sign_id'])->find();
  1225. // if (!$sign_info){
  1226. // sr_throw('参数错误');
  1227. // }
  1228. $order_id = '';
  1229. if ($order_type == 4){
  1230. $order_id = $params['order_id'];
  1231. }
  1232. if ($order_type == 5){
  1233. $order_id = $remarks;
  1234. }
  1235. $out_trade_no = 'Sw'.$order_id.mt_rand(1, 10000);
  1236. // $has_get = false;
  1237. // if ($pay_info = Db::name('payment')->where('remarks', $params['order_id'])->where('pay_way', 16)->where('state', 7)->find()){
  1238. // $has_get = true;
  1239. // $out_trade_no = $pay_info['out_trade_no'];
  1240. // }
  1241. // PAYBACK_URL
  1242. $pay_success_backurl = env('PAYSQZ.PAYWeixinBACK_URL');
  1243. // $total_amount = 1;
  1244. if (in_array(env('APP.CUR_SYS_PARAMS'), [1, 2])){
  1245. // 这是测试 线要干掉
  1246. $total_amount = floatval('0.'.mt_rand(1, 3).mt_rand(1, 9));
  1247. }
  1248. $parterid = env('PAYSQZ.PARTER');
  1249. $type = 1004;
  1250. $params = [
  1251. 'parter'=>$parterid,
  1252. 'type'=>$type,
  1253. 'value'=>$total_amount,
  1254. 'orderid'=>$out_trade_no,
  1255. 'callbackurl'=>$pay_success_backurl,
  1256. 'payerIp'=>request()->ip()
  1257. ];
  1258. // 提交确定支付
  1259. sr_log('确认支付:'.json_encode($params));
  1260. $params['sign'] = md5('parter='.$parterid.'&type='.$type.'&value='.$total_amount.'&orderid='.$out_trade_no.'&callbackurl='.$pay_success_backurl.env('PAYSQZ.SIGNKEY'));
  1261. $url = 'http://pay.xindonglife.com/chargebank.aspx';
  1262. // if (!$has_get){
  1263. $insert = [
  1264. 'total_fee' => $total_amount,
  1265. 'trade_type' => $trade_type,
  1266. 'body' => $body,
  1267. 'state' => 7,
  1268. 'out_trade_no' => $out_trade_no,
  1269. 'pay_way' => $pay_way,
  1270. 'remarks' => $remarks,
  1271. 'order_type' => $order_type,
  1272. 'uid' => $uid,
  1273. 'voucher_img' => $voucher_img,
  1274. 'out_trade_no1'=>'',
  1275. 'hy_token_id'=>''
  1276. ];
  1277. Db::name('payment')->insert($insert);
  1278. // }
  1279. return api_succ_return(['msg'=>'成功', 'data'=>['thirdpaySQZ'=>['pay_url'=>$url . '?' . http_build_query($params)]]]);
  1280. }
  1281. public function getPayInfoSQZBankkuai($uid, $params){
  1282. list($body, $total_amount, $order_type, $remarks, $trade_type, $pay_way, $voucher_img) = $this->_payConf($uid, $params);
  1283. // $sign_info = Db::name('user_bank_sign')->where('uid', $uid)->where('id', $params['sign_id'])->find();
  1284. // if (!$sign_info){
  1285. // sr_throw('参数错误');
  1286. // }
  1287. $order_id = '';
  1288. if ($order_type == 4){
  1289. $order_id = $params['order_id'];
  1290. }
  1291. if ($order_type == 5){
  1292. $order_id = $remarks;
  1293. }
  1294. $out_trade_no = 'SK'.$order_id.mt_rand(1, 10000);
  1295. // $has_get = false;
  1296. // if ($pay_info = Db::name('payment')->where('remarks', $params['order_id'])->where('pay_way', 16)->where('state', 7)->find()){
  1297. // $has_get = true;
  1298. // $out_trade_no = $pay_info['out_trade_no'];
  1299. // }
  1300. // PAYBACK_URL
  1301. $pay_success_backurl = env('PAYSQZ.PAYKUAIJIEBACK_URL');
  1302. // $total_amount = 1;
  1303. if (in_array(env('APP.CUR_SYS_PARAMS'), [1, 2])){
  1304. // 这是测试 线要干掉
  1305. $total_amount = floatval('0.'.mt_rand(1, 3).mt_rand(1, 9));
  1306. }
  1307. $parterid = env('PAYSQZ.SXY_PARTER');
  1308. $type = 967;
  1309. $params = [
  1310. 'parter'=>$parterid,
  1311. 'type'=>$type,
  1312. 'value'=>$total_amount,
  1313. 'orderid'=>$out_trade_no,
  1314. 'callbackurl'=>$pay_success_backurl,
  1315. 'payerIp'=>request()->ip()
  1316. ];
  1317. // 提交确定支付
  1318. sr_log('确认支付:'.json_encode($params));
  1319. $params['sign'] = md5('parter='.$parterid.'&type='.$type.'&value='.$total_amount.'&orderid='.$out_trade_no.'&callbackurl='.$pay_success_backurl.env('PAYSQZ.SXY_SIGNKEY'));
  1320. $url = 'http://pay.xindonglife.com/chargebank.aspx';
  1321. // if (!$has_get){
  1322. $insert = [
  1323. 'total_fee' => $total_amount,
  1324. 'trade_type' => $trade_type,
  1325. 'body' => $body,
  1326. 'state' => 7,
  1327. 'out_trade_no' => $out_trade_no,
  1328. 'pay_way' => $pay_way,
  1329. 'remarks' => $remarks,
  1330. 'order_type' => $order_type,
  1331. 'uid' => $uid,
  1332. 'voucher_img' => $voucher_img,
  1333. 'out_trade_no1'=>'',
  1334. 'hy_token_id'=>''
  1335. ];
  1336. Db::name('payment')->insert($insert);
  1337. // }
  1338. return api_succ_return(['msg'=>'成功', 'data'=>['thirdpaySQZ'=>['pay_url'=>$url . '?' . http_build_query($params)]]]);
  1339. }
  1340. // 银盛快捷无卡
  1341. public function getPayInfoYSwk($uid, $params){
  1342. if (empty($params['cer_no']) || empty($params['cer_name'] || empty($params['bank_id']) || empty($params['bank_type']) || empty($params['bank_no']) || empty($params['mobile']))){
  1343. return api_error_return("参数错误");
  1344. }
  1345. if ($params['bank_type'] == 2){
  1346. if (empty($params['card_expr_time']) || empty($params['security_code'])){
  1347. return api_error_return('信用卡类型必须填写信用卡上面的三位安全码跟过期时间');
  1348. }
  1349. }
  1350. $bank_info = Db::name('ys_banklist')->where('id', $params['bank_id'])->find();
  1351. if (!$bank_info){
  1352. return api_error_return('参数错误');
  1353. }
  1354. $buy_mobilee = $params['mobile'];
  1355. list($body, $total_amount, $order_type, $remarks, $trade_type, $pay_way, $voucher_img) = $this->_payConf($uid, $params);
  1356. $interface_url = 'https://openapi.ysepay.com/gateway.do'; //正式
  1357. $order_id = '';
  1358. if ($order_type == 4){
  1359. $order_id = $params['order_id'];
  1360. }
  1361. if ($order_type == 5){
  1362. $order_id = $remarks;
  1363. }
  1364. $out_trade_no = $order_id.'_yswk'.mt_rand(1, 10000);
  1365. // PAYBACK_URL
  1366. $pay_success_backurl = env('PAYSQZ.PAYKUAIJIEBACK_URL');
  1367. // $total_amount = 1;
  1368. if (in_array(env('APP.CUR_SYS_PARAMS'), [1, 2])){
  1369. // 这是测试 线要干掉
  1370. $total_amount = floatval('0'.'.'.mt_rand(1, 2).mt_rand(1, 9));
  1371. }
  1372. $parterid = env('ZLYS.PARTER_ID');
  1373. $cur_time = sr_getcurtime(time());
  1374. $biz_content = array();
  1375. $biz_content['out_trade_no'] = $out_trade_no;
  1376. $biz_content['shopdate']= sr_getcurtime(time(), 'Ymd');
  1377. $biz_content['subject']='购买商品';
  1378. // $biz_content['total_amount'] = $total_amount;
  1379. $biz_content['total_amount'] = $total_amount;
  1380. $biz_content['timeout_express'] = '1h';
  1381. $biz_content['currency'] = 'CNY';
  1382. $biz_content['business_code'] = '3010002';
  1383. $biz_content['seller_id'] = $parterid;
  1384. $biz_content['bank_type'] = $bank_info['bank_value'];
  1385. $biz_content['buyer_name'] = $params['cer_name'];
  1386. $biz_content['buyer_card_number'] = $params['bank_no'];
  1387. $biz_content['buyer_mobile'] = $params['mobile'];
  1388. $number = trim($this->ECBEncrypt($params['cer_no'], 'Scf10981'));
  1389. // 银行卡类型 debit 借记卡 credit信用卡
  1390. $biz_content['support_card_type'] = intval($params['bank_type']) == 1?'debit':'credit';
  1391. if ($params['bank_type'] == 2){
  1392. $biz_content['cardCvn2'] = $this->ECBEncrypt($params['security_code'], 'Scf10981');
  1393. $biz_content['cardExprDt'] = $this->ECBEncrypt($params['card_expr_time'], 'Scf10981');
  1394. }
  1395. $biz_content['bank_name'] = $bank_info['bank_name'];
  1396. $biz_content['pyerIDNo'] = $number;
  1397. $biz_content['pyerIDTp'] = $this->ECBEncrypt('01', 'Scf10981');;
  1398. $biz_content['bank_account_type'] = 'personal';
  1399. $params = [
  1400. 'method'=>'ysepay.online.fastpay',
  1401. 'partner_id'=>$parterid,
  1402. 'timestamp'=>$cur_time,
  1403. 'charset'=>'UTF-8',
  1404. 'sign_type'=>'RSA',
  1405. 'notify_url'=>env('ZLYS.PAYBACK_URL'),
  1406. 'version'=>'3.4',
  1407. 'biz_content'=>json_encode($biz_content, JSON_UNESCAPED_UNICODE)
  1408. ];
  1409. ksort($params);
  1410. $params['sign'] = $this->sign($params);
  1411. // 提交确定支付
  1412. sr_log('确认支付:'.json_encode($params));
  1413. $result = curlPost($interface_url, $params);
  1414. sr_log('result:'.$result);
  1415. $res = json_decode($result);
  1416. if (isset($res->ysepay_online_fastpay_response->code) && intval($res->ysepay_online_fastpay_response->code) == 10000 && isset($res->ysepay_online_fastpay_response->msg) && intval($res->ysepay_online_fastpay_response->msg) == 'Success'){
  1417. $trade_no = $res->ysepay_online_fastpay_response->trade_no;
  1418. $insert = [
  1419. 'total_fee' => $total_amount,
  1420. 'trade_type' => $trade_type,
  1421. 'body' => $body,
  1422. 'state' => 7,
  1423. 'out_trade_no' => $out_trade_no,
  1424. 'pay_way' => $pay_way,
  1425. 'remarks' => $remarks,
  1426. 'order_type' => $order_type,
  1427. 'uid' => $uid,
  1428. 'voucher_img' => $voucher_img,
  1429. 'out_trade_no1'=>'',
  1430. 'hy_token_id'=>'',
  1431. 'buyer_mobile'=>$buy_mobilee,
  1432. 'trade_no'=>$trade_no
  1433. ];
  1434. Db::name('payment')->insert($insert);
  1435. return api_succ_return(['msg'=>'成功', 'data'=>['thirdpayYS'=>['trade_no'=>$trade_no]]]);
  1436. }else{
  1437. if (isset($res->ysepay_online_fastpay_response->sub_msg)){
  1438. return api_error_return($res->ysepay_online_fastpay_response->sub_msg);
  1439. }else{
  1440. return api_error_return('支付错误,请联系客服');
  1441. }
  1442. }
  1443. return api_error_return('支付错误,请联系客服1');
  1444. }
  1445. public function getPayInfoDiankeZfb($uid, $params){
  1446. list($body, $total_amount, $order_type, $remarks, $trade_type, $pay_way, $voucher_img) = $this->_payConf($uid, $params);
  1447. $interface_url = 'http://1.14.197.47/proxy/pay/unifiedorder'; //正式
  1448. $order_id = '';
  1449. if ($order_type == 4){
  1450. $order_id = $params['order_id'];
  1451. }
  1452. $out_trade_no = createdOrderSn();
  1453. // $total_amount = 1;
  1454. if (in_array(env('APP.CUR_SYS_PARAMS'), [1, 2])){
  1455. // 这是测试 线要干掉
  1456. $total_amount = floatval('0'.'.'.mt_rand(1, 2).mt_rand(1, 9));
  1457. }
  1458. if ($total_amount > 15000){
  1459. sr_throw('大额不能使用支付宝支付');
  1460. }
  1461. $params = [
  1462. 'appId'=>'dianke',
  1463. 'version'=>'1.0',
  1464. 'nonceStr'=>nonce_str(15),
  1465. 'orderId'=>$out_trade_no,
  1466. 'amount'=>intval($total_amount*100),
  1467. 'payChannel'=>'ALP',
  1468. 'goodsName'=>'牛仔裤',
  1469. 'goodsDesc'=>'牛仔裤',
  1470. 'clientIp'=>'127.0.0.1',
  1471. 'asyncNotifyUrl'=>env('PAYSQZ.PAYBACK_ZFB_NEWURL'),
  1472. 'tradeType'=>'QRCODE'
  1473. ];
  1474. ksort($params);
  1475. $params['sign'] = $this->diankesign($params);
  1476. // 提交确定支付
  1477. sr_log('确认支付:'.json_encode($params));
  1478. $result = curlPost($interface_url, $params);
  1479. sr_log('resultdk:'.$result);
  1480. $res = json_decode($result);
  1481. if (isset($res->data)){
  1482. $insert = [
  1483. 'total_fee' => $total_amount,
  1484. 'trade_type' => $trade_type,
  1485. 'body' => $body,
  1486. 'state' => 7,
  1487. 'out_trade_no' => $out_trade_no,
  1488. 'pay_way' => $pay_way,
  1489. 'remarks' => $remarks,
  1490. 'order_type' => $order_type,
  1491. 'uid' => $uid,
  1492. 'voucher_img' => $voucher_img,
  1493. 'out_trade_no1'=>'',
  1494. 'hy_token_id'=>''
  1495. ];
  1496. Db::name('payment')->insert($insert);
  1497. return api_succ_return(['msg'=>'成功', 'data'=>['pay_url'=>$res->data]]);
  1498. }else{
  1499. return api_error_return('支付错误,请联系客服');
  1500. }
  1501. return api_error_return('支付错误,请联系客服1');
  1502. }
  1503. public function kjPayWithCode($trade_no, $sms_code){
  1504. $payment_info = Db::name('payment')->where('trade_no', $trade_no)->find();
  1505. if (!$payment_info){
  1506. sr_throw('支付订单错误');
  1507. }
  1508. $out_trade_no = $payment_info['out_trade_no'];
  1509. $interface_url = 'https://openapi.ysepay.com/gateway.do'; //正式
  1510. $parterid = env('ZLYS.PARTER_ID');
  1511. $cur_time = sr_getcurtime(time());
  1512. $biz_content = array();
  1513. $biz_content['out_trade_no'] = $out_trade_no;
  1514. $biz_content['buyer_mobile'] = $payment_info['buyer_mobile'];
  1515. $biz_content['mobile_verify_code'] = $sms_code;
  1516. $params = [
  1517. 'method'=>'ysepay.online.fastpay.authorize',
  1518. 'partner_id'=>$parterid,
  1519. 'timestamp'=>$cur_time,
  1520. 'charset'=>'UTF-8',
  1521. 'sign_type'=>'RSA',
  1522. 'notify_url'=>env('ZLYS.PAYBACK_URL'),
  1523. 'version'=>'3.0',
  1524. 'biz_content'=>json_encode($biz_content, JSON_UNESCAPED_UNICODE)
  1525. ];
  1526. ksort($params);
  1527. $params['sign'] = $this->sign($params);
  1528. // 提交确定支付
  1529. sr_log('确认支付提交:'.json_encode($params));
  1530. $result = curlPost($interface_url, $params);
  1531. sr_log('result:'.$result);
  1532. $res = json_decode($result);
  1533. if (isset($res->ysepay_online_fastpay_authorize_response->code) && intval($res->ysepay_online_fastpay_authorize_response->code) == 10000 && isset($res->ysepay_online_fastpay_authorize_response->msg) && intval($res->ysepay_online_fastpay_authorize_response->msg) == 'Success'){
  1534. return api_succ_return('成功');
  1535. }else{
  1536. if (isset($res->ysepay_online_fastpay_authorize_response->sub_msg)){
  1537. return api_error_return($res->ysepay_online_fastpay_authorize_response->sub_msg);
  1538. }else{
  1539. return api_error_return('支付错误,请联系客服');
  1540. }
  1541. }
  1542. return api_error_return('支付错误,请联系客服');
  1543. }
  1544. /**
  1545. * DES加密方法
  1546. * @param $data 传入需要加密的证件号码
  1547. * @param $key key为商户号前八位.不足八位的需在商户号前补空格
  1548. * @return string 返回加密后的字符串
  1549. */
  1550. function ECBEncrypt($data, $key)
  1551. {
  1552. $encrypted = openssl_encrypt($data, 'DES-ECB', $key, 1);
  1553. return base64_encode($encrypted);
  1554. }
  1555. /**
  1556. * DES解密方法
  1557. * @param $data 传入需要解密的字符串
  1558. * @param $key key为商户号前八位.不足八位的需在商户号前补空格
  1559. * @return string 返回解密后的证件号码
  1560. */
  1561. function doECBDecrypt($data, $key)
  1562. {
  1563. $encrypted = base64_decode($data);
  1564. $decrypted = openssl_decrypt($encrypted, 'DES-ECB', $key, 1);
  1565. return $decrypted;
  1566. }
  1567. /**
  1568. * 签名加密
  1569. * @param input data
  1570. * @return success
  1571. * @return check
  1572. * @return msg
  1573. */
  1574. public function sign_encrypt($input)
  1575. {
  1576. $return = [
  1577. 'success' => 0,
  1578. 'msg' => '',
  1579. 'check' => ''
  1580. ];
  1581. $pkcs12 = file_get_contents(env('ZLYS.PFX_PATH')); //私钥
  1582. if (openssl_pkcs12_read($pkcs12, $certs, env('ZLYS.PSSSWORD'))) {
  1583. $privateKey = $certs['pkey'];
  1584. $publicKey = $certs['cert'];
  1585. $signedMsg = "";
  1586. if (openssl_sign($input['data'], $signedMsg, $privateKey, OPENSSL_ALGO_SHA1)) {
  1587. $return['success'] = 1;
  1588. $return['check'] = base64_encode($signedMsg);
  1589. $return['msg'] = base64_encode($input['data']);
  1590. }
  1591. }
  1592. return $return;
  1593. }
  1594. //签名
  1595. public function sign($data)
  1596. {
  1597. ksort($data);
  1598. $signStr = "";
  1599. foreach ($data as $key => $val) {
  1600. $signStr .= $key . '=' . $val . '&';
  1601. }
  1602. $signStr = trim($signStr, '&');
  1603. $sign = $this->sign_encrypt(array('data' => $signStr));
  1604. return trim($sign['check']);
  1605. }
  1606. //签名
  1607. public function diankesign($data)
  1608. {
  1609. ksort($data);
  1610. $signStr = "";
  1611. foreach ($data as $key => $val) {
  1612. $signStr .= $key . '=' . $val . '&';
  1613. }
  1614. $stringSignTemp = $signStr.'key=a05fd6fc1f924b74b83dfd519ce93c28';
  1615. $signtemp = \md5($stringSignTemp);
  1616. return strtoupper($signtemp);
  1617. }
  1618. //签名
  1619. public function diankesigndf($data)
  1620. {
  1621. ksort($data);
  1622. $signStr = "";
  1623. foreach ($data as $key => $val) {
  1624. $signStr .= $key . '=' . $val . '&';
  1625. }
  1626. $stringSignTemp = $signStr.'key=b91f3a72fe074e39a6add7382de813bc';
  1627. $signtemp = \md5($stringSignTemp);
  1628. return strtoupper($signtemp);
  1629. }
  1630. public function getPayInfoUsdt($uid, $params){
  1631. list($body, $total_amount, $order_type, $remarks, $trade_type, $pay_way, $voucher_img) = $this->_payConf($uid, $params);
  1632. // $order_id = $remarks;
  1633. //
  1634. // $out_trade_no = 'SK'.$order_id.mt_rand(1, 10000);
  1635. //
  1636. // $insert = [
  1637. // 'total_fee' => $total_amount,
  1638. // 'trade_type' => $trade_type,
  1639. // 'body' => $body,
  1640. // 'state' => 7,
  1641. // 'out_trade_no' => $out_trade_no,
  1642. // 'pay_way' => $pay_way,
  1643. // 'remarks' => $remarks,
  1644. // 'order_type' => $order_type,
  1645. // 'uid' => $uid,
  1646. // 'voucher_img' => $voucher_img,
  1647. // 'out_trade_no1'=>'',
  1648. // 'hy_token_id'=>''
  1649. // ];
  1650. // Db::name('payment')->insert($insert);
  1651. return api_succ_return('成功');
  1652. }
  1653. // 签约银行卡
  1654. public function userBankSign($uid, $post){
  1655. $pay_success_backurl = env('PAYSQZ.USER_SIGN_BANK');
  1656. //
  1657. // $sign
  1658. $parterid = env('PAYSQZ.PARTER');
  1659. $phone = $post['phone'];
  1660. $bank_card = $post['bank_card'];
  1661. $name = $post['name'];
  1662. $id_card = $post['id_card'];
  1663. $order_id = creatBankSignOrderSn($uid);
  1664. if ($info = Db::name('user_bank_sign')->where('bank_card', $bank_card)->where('uid', $uid)->where('status', 4)->find()){
  1665. Db::name('user_bank_sign')->where('id', $info['id'])->save([
  1666. 'status'=>1,
  1667. 'signorder_id'=>$order_id
  1668. ]);
  1669. }else{
  1670. Db::name('user_bank_sign')->insert([
  1671. 'uid'=>$uid,
  1672. 'phone'=>$phone,
  1673. 'bank_card'=>$bank_card,
  1674. 'name'=>$name,
  1675. 'id_card'=>$id_card,
  1676. 'create_time'=>sr_getcurtime(time()),
  1677. 'signorder_id'=>$order_id
  1678. ]);
  1679. }
  1680. $param = [
  1681. 'parter'=>$parterid,
  1682. 'userid'=>$uid,
  1683. 'phone'=>$phone,
  1684. 'bankCard'=>$bank_card,
  1685. 'name'=>$name,
  1686. 'idCard'=>$id_card,
  1687. 'orderid'=>$order_id,
  1688. 'callBack'=>$pay_success_backurl
  1689. ];
  1690. sr_log($param);
  1691. $keystring = 'parter='.$parterid.'&userid='.$uid.'&phone='.$phone.'&bankCard='.$bank_card.'&name='.$name.'&idCard='.$id_card.'&orderid='.$order_id.env('PAYSQZ.SIGNKEY');
  1692. $param['sign'] = md5($keystring);
  1693. $res = _curlrequest('http://pay.xindonglife.com/PageSign.aspx', $param, 'post');
  1694. sr_log('sign:'.$res);
  1695. $result = json_decode($res);
  1696. // sr_log(json_encode($res));
  1697. if (isset($result->code) && $result->code == 'SUCCESS'){
  1698. return $result->sign_url;
  1699. }else{
  1700. if (is_string($res)){
  1701. sr_throw($res);
  1702. }else{
  1703. sr_throw('请稍后再试');
  1704. }
  1705. }
  1706. }
  1707. // 解绑银行卡
  1708. public function userUnBankSign($uid, $post){
  1709. $pay_success_backurl = env('PAYSQZ.USER_SIGN_BANK');
  1710. //
  1711. // $sign
  1712. $bang_info = Db::name('user_bank_sign')->where('id', $post['record_id'])->find();
  1713. if (!$bang_info){
  1714. sr_throw('参数错误');
  1715. }
  1716. // $bang_info['userno'] = '8cd6342193ef6796daac2571af414e33';
  1717. $parterid = env('PAYSQZ.PARTER');
  1718. $order_id = creatBankSignOrderSn($uid);
  1719. $param = [
  1720. 'parter'=>$parterid,
  1721. 'hy_auth_uid'=>$bang_info['userno'],
  1722. 'orderId'=>$order_id
  1723. ];
  1724. // sr_log($param);
  1725. $keystring = 'parter='.$parterid.'&hy_auth_uid='.$bang_info['userno'].env('PAYSQZ.SIGNKEY');
  1726. $param['sign'] = md5($keystring);
  1727. $res = _curlrequest('http://pay.xindonglife.com/CardUnbinding.aspx', $param, 'post');
  1728. sr_log('sign:'.$res);
  1729. $res = json_decode($res);
  1730. if (isset($res->code) && $res->code == 'SUCCESS'){
  1731. Db::name('user_bank_sign')->where('id', $post['record_id'])->save(['signorder_u_id'=>$order_id, 'status'=>4]);
  1732. }else{
  1733. sr_log('解绑失败:'.json_encode($res));
  1734. sr_throw('解绑失败');
  1735. }
  1736. }
  1737. public function sylSurePay($uid, $params){
  1738. if (empty($params['sms_code'])){
  1739. sr_throw('参数错误');
  1740. }
  1741. $payment_info = Db::name('payment')->where('out_trade_no1', $params['order_id'])->where('state', 7)->where('uid', $uid)->find();
  1742. if (!$payment_info){
  1743. sr_throw('参数错误或者订单错误');
  1744. }
  1745. $parterid = env('PAYSQZ.PARTER');
  1746. $order_id = creatBankSignOrderSn($uid);
  1747. $out_trade_no1 = rand(1000000000, 9999999999) . (string)date('ymdhis', time()) . (int)microtime(true); // 订单号
  1748. $param = [
  1749. 'parter'=>$parterid,
  1750. 'hy_token_id'=>$payment_info['hy_token_id'],
  1751. 'verify_code'=>$params['sms_code'],
  1752. 'orderId'=>$out_trade_no1
  1753. ];
  1754. $keystring = 'parter='.$parterid.'&hy_token_id='.$payment_info['hy_token_id'].'&verify_code='.$params['sms_code'].env('PAYSQZ.SIGNKEY');
  1755. $param['sign'] = md5($keystring);
  1756. $res = _curlrequest('http://pay.xindonglife.com/payMentConfirm.aspx', $param, 'post');
  1757. // sr_log('sign:'.$res);
  1758. $res = json_decode($res);
  1759. // sr_log(json_encode($res));
  1760. if (isset($res->code) && $res->code == 'SUCCESS'){
  1761. Db::name('payment')->where('id', $payment_info['id'])->save(['hy_bill_no'=>$res->hy_bill_no, 'syl_sureorderid'=>$out_trade_no1]);
  1762. }else{
  1763. if (isset($res->message)){
  1764. sr_throw($res->message);
  1765. }
  1766. // {"id":1,"code":"Fail","message":"\u77ed\u4fe1\u9a8c\u8bc1\u7801\u5df2\u8fc7\u671f"}
  1767. // sr_log('确认失败:'.json_encode($res));
  1768. }
  1769. }
  1770. // pay_money 支付订单的金额
  1771. public function payBack($out_trade_no, $pay_money, $pay_type, $content){
  1772. $paymodel = new PaymentModel();
  1773. $shopordermodel = new ShopOrderModel();
  1774. $services_ordermodel = new ServicesOrderModel();
  1775. $usermodel = new UserModel();
  1776. $pay_info = $paymodel->where('out_trade_no', $out_trade_no)->where('state', 7)->find();
  1777. if (!$pay_info){
  1778. sr_throw('outtradeno已经回调支付:'.$out_trade_no);
  1779. }
  1780. // if ($pay_type != 14){
  1781. // if ($pay_info['total_fee'] < $pay_money){
  1782. // sr_throw('支付金额错误'.$out_trade_no);
  1783. // }
  1784. // }
  1785. $user_info = $usermodel->where('id', $pay_info['uid'])->find();
  1786. if ($pay_info['order_type'] == 6){
  1787. $nowTime = date('Y-m-d H:i:s', time());
  1788. $date = sr_getcurtime(time(), 'Y-m-d');
  1789. $expire_day = date('Y-m-d',strtotime("$date +1 month"));
  1790. $pay_info->save(['state'=>6, 'pay_at'=>$nowTime]);
  1791. //
  1792. //
  1793. $services_orderinfo = $services_ordermodel->where('recharge_sn', $pay_info['remarks'])->find();
  1794. if ($services_orderinfo){
  1795. $services_orderinfo->save(['status'=>2, 'pay_type'=>$pay_type,'updated_time' => $nowTime]);
  1796. }
  1797. Db::name('user')->where('id', $services_orderinfo['user_id'])->save([
  1798. 'store_type'=>1,
  1799. 'store_expire_time'=>$expire_day
  1800. ]);
  1801. //
  1802. // edit_user_money(12, $pay_info['uid'], $charget_orderinfo['payment']);
  1803. }elseif ($pay_info['order_type'] == 4){
  1804. $nowTime = date('Y-m-d H:i:s', time());
  1805. $pay_info->save(['state'=>6, 'pay_at'=>$nowTime]);
  1806. $order_info = $shopordermodel->where('order_sn', $pay_info['remarks'])->find();
  1807. Db::name('user')->whereIn('id', $user_info['path'])->inc('total_team_income', $pay_info['total_fee'])->update();
  1808. Db::name('user')->whereIn('id', $user_info['id'])->inc('total_team_income', $pay_info['total_fee'])->update();
  1809. Db::name('user')->where('id', $user_info['id'])->inc('total_income', $pay_info['total_fee'])->update();
  1810. // if (!$order_info){
  1811. // sr_throw('错误');
  1812. // }
  1813. $order_info->save(['status'=>1, 'pay_type'=>$pay_type,'updated_time' => $nowTime]);
  1814. // 增加销量
  1815. $orderGoods = OrderGoods::where(['order_id' => $order_info['order_id']])->select()->toArray();
  1816. foreach ($orderGoods as $k => $v) {
  1817. ShopGoodsModel::where(['goods_id' => $v['goods_id']])->inc('sales_volume', $v['num'])->inc('real_sales_volume', $v['num'])->update();
  1818. }
  1819. $uid = $pay_info['uid'];
  1820. Db::name('thirdpay_back')->insert([
  1821. 'out_order_no'=>$out_trade_no,
  1822. 'content'=>$content,
  1823. 'create_time'=>sr_getcurtime(time()),
  1824. 'type'=>$pay_type,
  1825. 'uid'=>$uid,
  1826. 'money'=>$pay_money
  1827. ]);
  1828. // 赠送积分
  1829. // edit_user_score(1, $uid, $order_info['rebate_score']);
  1830. // $usermodel->where('id', $uid)->inc('total_score', $order_info['rebate_score'])->update();
  1831. edit_user_score(3, $uid, $order_info['rebate_score'], 0, $pay_info['id']);
  1832. // 给用户添加业绩
  1833. // $this->update_user_yeji($uid, $user_info, $order_info, $pay_info);
  1834. // $this->update_user_free($uid, $pay_info, $nowTime);
  1835. }
  1836. }
  1837. // pay_money 代付回调金额
  1838. public function payDfBack($out_trade_no, $pay_money, $params, $content){
  1839. if (isset($params['status'])){
  1840. $model = new WithDrawLogModel();
  1841. $info = $model->where('out_biz_no', $out_trade_no)->find();
  1842. if (!$info) {
  1843. return;
  1844. }
  1845. if ($info && $info['status'] == 4){
  1846. if ($params['status'] == 1){
  1847. // 代付成功
  1848. $info->save(['status'=>1]);
  1849. }else{
  1850. // Db::name('')
  1851. Db::startTrans();
  1852. try {
  1853. Db::startTrans();//开启事务
  1854. $info = $model->where('out_biz_no', $out_trade_no)->find();
  1855. $user_info = Db::name('user')->where('id', $info['uid'])->lock(true)->find();
  1856. $res = edit_user_money(10, $info['uid'], $info['apply_money']);
  1857. Db::name('action_liangb')->insert([
  1858. 'create_time'=>sr_getcurtime(time()),
  1859. 'wd_id'=>$out_trade_no
  1860. ]);
  1861. // 代付失败
  1862. $info->save(['zfb_error'=>$content, 'status'=>3]);
  1863. Db::commit();
  1864. }catch (\Exception $e){
  1865. Db::rollback();
  1866. sr_log('代付回调报错');
  1867. }
  1868. // if (!$res){
  1869. // Db::rollback();
  1870. // sr_log('代付回调报错');
  1871. // }else{
  1872. //
  1873. //
  1874. // Db::commit();
  1875. // }
  1876. }
  1877. }
  1878. }
  1879. }
  1880. public function scaleAgentMoney($uid, $pay_info, $yeji){
  1881. $is_privince_get = false;
  1882. $is_city_get = false;
  1883. $money = intval($pay_info['total_fee']/100) * 100;
  1884. $user_info = Db::name('user')->where('id', $uid)->find();
  1885. $path = $user_info['path'];
  1886. // sr_log('path:'.$path);
  1887. $arr = explode(',', $path);
  1888. $arr = array_reverse($arr);
  1889. $ids = $arr;
  1890. $ids = implode(',',$ids);
  1891. $order= 'field(id,'.$ids.')';
  1892. $users = Db::name('user')->where('id','in' ,$arr)->field('id,level,agent_type')->order(Db::raw($order))->select()->toArray();
  1893. // sr_log('users:'.json_encode($users));
  1894. foreach ($users as $key=>$val){
  1895. if ($val['agent_type'] == 1){
  1896. if (!$is_privince_get){
  1897. if ($is_city_get){
  1898. edit_user_money(17, $val['id'],$money*0.5/100, 0,$pay_info['remarks']);
  1899. }else{
  1900. edit_user_money(17, $val['id'], $money/100, 0, $pay_info['remarks']);
  1901. }
  1902. $is_privince_get = true;
  1903. }
  1904. }
  1905. if ($val['agent_type'] == 2){
  1906. if (!$is_privince_get){
  1907. edit_user_money(18, $val['id'],$money*0.5/100, 0,$pay_info['remarks']);
  1908. }
  1909. $is_city_get = true;
  1910. }
  1911. }
  1912. }
  1913. public function update_user_yeji($uid, $user_info, $order_info, $pay_info){
  1914. // 计算用户的yeji
  1915. $yeji = 0;
  1916. // 根据所送的积分算业绩
  1917. if ($user_info['performance_me'] < 10000){
  1918. if (($user_info['performance_me'] + $order_info['rebate_score']) > 10000){
  1919. $yeji = 10000-$user_info['performance_me'];
  1920. incUserPerformance($uid, $yeji);
  1921. }else{
  1922. $yeji = $order_info['rebate_score'];
  1923. incUserPerformance($uid, $yeji);
  1924. }
  1925. }
  1926. if ($yeji > 0){
  1927. // 如果增加的业绩大于0 计算省代跟市代
  1928. //
  1929. $this->scaleAgentMoney($order_info['user_id'], $pay_info, $yeji);
  1930. }
  1931. }
  1932. // type:如果是线上支付就是1,余额支付就是 2
  1933. public function update_user_free($uid, $pay_info, $nowTime, $type = 1){
  1934. return;
  1935. $paymodel = new PaymentModel();
  1936. $usermodel = new UserModel();
  1937. $model_order = new ShopOrderModel();
  1938. $user_info = Db::name('user')->where('id', $uid)->find();
  1939. if ($user_info['performance_me'] > 10000){
  1940. return ;
  1941. }
  1942. // 500 1.3
  1943. // 2000 1.6
  1944. // 5000 2
  1945. // 10000 2.5
  1946. // 找到最后一次降级的时间
  1947. $logmax_id = Db::name('user_freelevellog')->where('uid', $uid)->where('type', 1)->max('id');
  1948. $lastless_info = Db::name('user_freelevellog')->where('id', $logmax_id)->find();
  1949. // 距离上次时间的总送的积分
  1950. $total_backscore = $model_order->where('user_id', $uid)->where('status', 'in', [1, 2, 4])->where('order_type', 1)->where('created_time', '>', (isset($lastless_info['create_time'])?$lastless_info['create_time']:sr_getcurtime(0)))->sum('rebate_score');
  1951. Db::name('user')->where('id', $uid)->inc('total_pay', floatval($pay_info['total_fee']))->update();
  1952. Db::name('user')->where('id', $uid)->save(['total_score'=>$total_backscore]);
  1953. if ($user_info['user_team'] == 1){
  1954. // 是否要升级
  1955. $is_updatelevel = false;
  1956. // 当前释放档位
  1957. $new_freelevel = $user_info['free_level'];
  1958. $level = ['500'=>500, '2000'=>2000, '5000'=>5000, '10000'=>10000];
  1959. $scale = 1;
  1960. $scale_arr = ['500'=>1.3, '2000'=>1.6, '5000'=>2, '10000'=>2.5];
  1961. if ($total_backscore >= $level['500']){
  1962. if ($total_backscore >= $new_freelevel){
  1963. foreach ($level as $key=>$val){
  1964. // if ($val== 10000 ){
  1965. // if ($total_paymoney >=$val-10){
  1966. // $is_updatelevel = true;
  1967. // $new_freelevel = $val;
  1968. // $scale = $scale_arr[$val];
  1969. // }
  1970. // }elseif ($val == 20000){
  1971. // if ($total_paymoney >=$val-30){
  1972. // $is_updatelevel = true;
  1973. // $new_freelevel = $val;
  1974. // $scale = $scale_arr[$val];
  1975. // }
  1976. // }
  1977. // else{
  1978. // 支付金额大于档位 档位大于当前用户的档位
  1979. if ($total_backscore >= $val && $val>$user_info['free_level']){
  1980. $is_updatelevel = true;
  1981. $new_freelevel = $val;
  1982. $scale = $scale_arr[$val];
  1983. }
  1984. // }
  1985. }
  1986. }
  1987. }
  1988. if ($is_updatelevel){
  1989. // 新的档位赠送的积分
  1990. $new_totalscore = $scale*$new_freelevel;
  1991. // 如果升级的话就要重新计算他的所有积分
  1992. $log_id = Db::name('user_freelevellog')->where('channel', 1)->where('uid', $uid)->where('type', 'in', [1,2])->max('id');
  1993. // $output->writeln('key'.$log_id);
  1994. $last_info = Db::name('user_freelevellog')->where('id', $log_id)->find();
  1995. // 距离上次档位变化总共释放出来的 余额
  1996. $free_score = Db::name('score_log')->where('uid', $uid)->where('type', 'in', [2,5,6,7])->whereTime('create_at', '>', isset($lastless_info['create_time'])?$lastless_info['create_time']:sr_getcurtime(0))->sum('score');
  1997. // 刷新积分
  1998. // $output->writeln('key'.$free_score);
  1999. $user_info = $usermodel->where('id', $uid)->find();
  2000. $cur_score = $user_info['score'];
  2001. // 新的所得积分
  2002. $new_userscore = $new_totalscore - $free_score;
  2003. // $output->writeln('key'.$cur_score);
  2004. // $output->writeln('key'.$new_userscore);
  2005. if ($cur_score > $new_userscore){
  2006. edit_user_score(4, $uid, $cur_score-$new_userscore);
  2007. }
  2008. if ($cur_score < $new_userscore){
  2009. edit_user_score(3, $uid, $new_userscore - $cur_score);
  2010. }
  2011. // 记录档位升级记录
  2012. $data = [
  2013. 'free_level'=>$new_freelevel,
  2014. 're_level'=>$user_info['free_level'],
  2015. 'uid'=>$uid,
  2016. 'create_time'=>$nowTime,
  2017. 'type'=>2,
  2018. 'channel'=>1,
  2019. 'score'=>$new_freelevel*$scale,
  2020. 're_score'=>($user_info['free_level']==0?$user_info['score']:$user_info['free_level']*$scale_arr[$user_info['free_level']])
  2021. ];
  2022. // $output->writeln('key'.json_encode($data));
  2023. //
  2024. // sr_throw();
  2025. Db::name('user_freelevellog')->insert($data);
  2026. // 刷新用户档位
  2027. $user_info->save(['free_level'=>$new_freelevel]);
  2028. }
  2029. }
  2030. return ;
  2031. // 找到最后一次降级的时间
  2032. $logmax_id = Db::name('user_freelevellog')->where('uid', $uid)->where('type', 1)->max('id');
  2033. $lastless_info = Db::name('user_freelevellog')->where('id', $logmax_id)->find();
  2034. // 距离上次时间的总充值量
  2035. $total_paymoney = $paymodel->where('uid', $uid)->where('state', 6)->where('order_type', 4)->where('pay_at', '>', (isset($lastless_info['create_time'])?$lastless_info['create_time']:sr_getcurtime(0)))->sum('total_fee');
  2036. if ($type == 1){
  2037. Db::name('user')->where('id', $uid)->inc('total_pay', floatval($pay_info['total_fee']))->update();
  2038. }else{
  2039. Db::name('user')->where('id', $uid)->inc('total_pay', floatval($pay_info['payment']))->update();
  2040. }
  2041. Db::name('user')->where('id', $uid)->save(['total_pay_level'=>$total_paymoney]);
  2042. if ($user_info['user_team'] == 1){
  2043. // 是否要升级
  2044. $is_updatelevel = false;
  2045. // 当前释放档位
  2046. $new_freelevel = $user_info['free_level'];
  2047. $level = ['2000'=>2000, '5000'=>5000, '10000'=>10000, '20000'=>20000];
  2048. $scale = 1;
  2049. $scale_arr = ['2000'=>1.5, '5000'=>2, '10000'=>2.5, '20000'=>3];
  2050. if ($total_paymoney >= $level['2000']){
  2051. if ($total_paymoney >= $new_freelevel){
  2052. foreach ($level as $key=>$val){
  2053. if ($val== 10000 ){
  2054. if ($total_paymoney >=$val-10){
  2055. $is_updatelevel = true;
  2056. $new_freelevel = $val;
  2057. $scale = $scale_arr[$val];
  2058. }
  2059. }elseif ($val == 20000){
  2060. if ($total_paymoney >=$val-30){
  2061. $is_updatelevel = true;
  2062. $new_freelevel = $val;
  2063. $scale = $scale_arr[$val];
  2064. }
  2065. }
  2066. else{
  2067. // 支付金额大于档位 档位大于当前用户的档位
  2068. if ($total_paymoney >= $val && $val>$user_info['free_level']){
  2069. $is_updatelevel = true;
  2070. $new_freelevel = $val;
  2071. $scale = $scale_arr[$val];
  2072. }
  2073. }
  2074. }
  2075. }
  2076. }
  2077. if ($is_updatelevel){
  2078. // 新的档位赠送的积分
  2079. $new_totalscore = $scale*$new_freelevel;
  2080. // 如果升级的话就要重新计算他的所有积分
  2081. $log_id = Db::name('user_freelevellog')->where('channel', 1)->where('uid', $uid)->where('type', 'in', [1,2])->max('id');
  2082. // $output->writeln('key'.$log_id);
  2083. $last_info = Db::name('user_freelevellog')->where('id', $log_id)->find();
  2084. // 距离上次档位变化总共释放出来的 余额
  2085. $free_score = Db::name('score_log')->where('uid', $uid)->where('type', 2)->whereTime('create_at', '>', isset($last_info['create_time'])?$last_info['create_time']:sr_getcurtime(0))->sum('score');
  2086. // 刷新积分
  2087. // $output->writeln('key'.$free_score);
  2088. $user_info = $usermodel->where('id', $uid)->find();
  2089. $cur_score = $user_info['score'];
  2090. // 新的所得积分
  2091. $new_userscore = $new_totalscore - $free_score;
  2092. // $output->writeln('key'.$cur_score);
  2093. // $output->writeln('key'.$new_userscore);
  2094. if ($cur_score > $new_userscore){
  2095. edit_user_score(4, $uid, $cur_score-$new_userscore);
  2096. }
  2097. if ($cur_score < $new_userscore){
  2098. edit_user_score(3, $uid, $new_userscore - $cur_score);
  2099. }
  2100. // 记录档位升级记录
  2101. $data = [
  2102. 'free_level'=>$new_freelevel,
  2103. 're_level'=>$user_info['free_level'],
  2104. 'uid'=>$uid,
  2105. 'create_time'=>$nowTime,
  2106. 'type'=>2,
  2107. 'channel'=>1,
  2108. 'score'=>$new_freelevel*$scale,
  2109. 're_score'=>($user_info['free_level']==0?$user_info['score']:$user_info['free_level']*$scale_arr[$user_info['free_level']])
  2110. ];
  2111. // $output->writeln('key'.json_encode($data));
  2112. //
  2113. // sr_throw();
  2114. Db::name('user_freelevellog')->insert($data);
  2115. // 刷新用户档位
  2116. $user_info->save(['free_level'=>$new_freelevel]);
  2117. }
  2118. }
  2119. // 线上
  2120. if ($user_info['user_team'] == 2){
  2121. // 是否要升级
  2122. $is_updatelevel = false;
  2123. // 当前释放档位
  2124. $new_freelevel = $user_info['free_level'];
  2125. $level = ['399'=>399, '999'=>999, '2000'=>2000, '5000'=>5000];
  2126. $scale = 1;
  2127. $scale_arr = ['399'=>1.5, '999'=>2, '2000'=>2.5, '5000'=>3];
  2128. if ($total_paymoney >= $level['399']){
  2129. if ($total_paymoney >= $new_freelevel){
  2130. foreach ($level as $key=>$val){
  2131. // if ($val== 10000 ){
  2132. // if ($total_paymoney >=$val-10){
  2133. // $is_updatelevel = true;
  2134. // $new_freelevel = $val;
  2135. // $scale = $scale_arr[$val];
  2136. // }
  2137. // }elseif ($val == 20000){
  2138. // if ($total_paymoney >=$val-30){
  2139. // $is_updatelevel = true;
  2140. // $new_freelevel = $val;
  2141. // $scale = $scale_arr[$val];
  2142. // }
  2143. // }
  2144. // else{
  2145. // 支付金额大于档位 档位大于当前用户的档位
  2146. if ($total_paymoney >= $val && $val>$user_info['free_level']){
  2147. $is_updatelevel = true;
  2148. $new_freelevel = $val;
  2149. $scale = $scale_arr[$val];
  2150. }
  2151. // }
  2152. }
  2153. }
  2154. }
  2155. if ($is_updatelevel){
  2156. // 新的档位赠送的积分
  2157. $new_totalscore = $scale*$new_freelevel;
  2158. // 如果升级的话就要重新计算他的所有积分
  2159. $log_id = Db::name('user_freelevellog')->where('channel', 2)->where('uid', $uid)->where('type', 'in', [1,2])->max('id');
  2160. // $output->writeln('key'.$log_id);
  2161. $last_info = Db::name('user_freelevellog')->where('id', $log_id)->find();
  2162. // 距离上次档位变化总共释放出来的 余额
  2163. $free_score = Db::name('score_log')->where('uid', $uid)->where('type', 2)->whereTime('create_at', '>', isset($last_info['create_time'])?$last_info['create_time']:sr_getcurtime(0))->sum('score');
  2164. // 刷新积分
  2165. // $output->writeln('key'.$free_score);
  2166. $user_info = $usermodel->where('id', $uid)->find();
  2167. $cur_score = $user_info['score'];
  2168. // 新的所得积分
  2169. $new_userscore = $new_totalscore - $free_score;
  2170. // $output->writeln('key'.$cur_score);
  2171. // $output->writeln('key'.$new_userscore);
  2172. if ($cur_score > $new_userscore){
  2173. edit_user_score(4, $uid, $cur_score-$new_userscore);
  2174. }
  2175. if ($cur_score < $new_userscore){
  2176. edit_user_score(3, $uid, $new_userscore - $cur_score);
  2177. }
  2178. // 记录档位升级记录
  2179. $data = [
  2180. 'free_level'=>$new_freelevel,
  2181. 're_level'=>$user_info['free_level'],
  2182. 'uid'=>$uid,
  2183. 'create_time'=>$nowTime,
  2184. 'type'=>2,
  2185. 'channel'=>2,
  2186. 'score'=>$new_freelevel*$scale,
  2187. 're_score'=>($user_info['free_level']==0?$user_info['score']:$user_info['free_level']*$scale_arr[$user_info['free_level']])
  2188. ];
  2189. // $output->writeln('key'.json_encode($data));
  2190. //
  2191. // sr_throw();
  2192. Db::name('user_freelevellog')->insert($data);
  2193. // 刷新用户档位
  2194. $user_info->save(['free_level'=>$new_freelevel]);
  2195. }
  2196. }
  2197. }
  2198. // pay_money 余额支付订单的金额
  2199. public function payBalanceDown($order_sn, $pay_type, $content){
  2200. $paymodel = new PaymentModel();
  2201. $shopordermodel = new ShopOrderModel();
  2202. $usermodel = new UserModel();
  2203. $order_info = $shopordermodel->where('order_sn', $order_sn)->find();
  2204. // $pay_info = $paymodel->where('out_trade_no', $out_trade_no)->where('state', 7)->find();
  2205. // if (!$pay_info){
  2206. // sr_throw('outtradeno已经回调支付:'.$out_trade_no);
  2207. // }
  2208. // if ($pay_info['total_fee'] < $pay_money){
  2209. // sr_throw('支付金额错误'.$out_trade_no);
  2210. // }
  2211. $nowTime = date('Y-m-d H:i:s', time());
  2212. $user_info = $usermodel->where('id', $order_info['user_id'])->find();
  2213. // $pay_info->save(['state'=>6, 'pay_at'=>$nowTime]);
  2214. // $order_info = $shopordermodel->where('order_sn', $pay_info['remarks'])->find();
  2215. $order_info->save(['status'=>1, 'pay_type'=>$pay_type,'updated_time' => $nowTime]);
  2216. // 增加销量
  2217. $orderGoods = OrderGoods::where(['order_id' => $order_info['order_id']])->select()->toArray();
  2218. foreach ($orderGoods as $k => $v) {
  2219. ShopGoodsModel::where(['goods_id' => $v['goods_id']])->inc('sales_volume', $v['num'])->inc('real_sales_volume', $v['num'])->update();
  2220. }
  2221. $uid = $order_info['user_id'];
  2222. Db::name('thirdpay_back')->insert([
  2223. 'out_order_no'=>'',
  2224. 'content'=>$content,
  2225. 'create_time'=>sr_getcurtime(time()),
  2226. 'type'=>$pay_type,
  2227. 'uid'=>$uid,
  2228. 'money'=>$order_info['payment']
  2229. ]);
  2230. // 给用户添加业绩
  2231. // incUserPerformance($uid, $order_info['payment']);
  2232. $pay_info = $paymodel->where('remarks', $order_sn)->where('state', 6)->find();
  2233. // 赠送积分
  2234. edit_user_score(1, $uid, $order_info['rebate_score']);
  2235. $this->update_user_yeji($uid, $user_info, $order_info, $pay_info);
  2236. $this->update_user_free($uid, $order_info, $nowTime, 2);
  2237. }
  2238. }