MediaPayonenineController.class.php 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913
  1. <?php
  2. namespace bibidd\Controller;
  3. use Bibidd\Controller\CommonBaseController;
  4. use Think\Exception;
  5. class MediaPayonenineController extends CommonBaseController
  6. {
  7. /**
  8. * 测试功能
  9. * @param $templateid []
  10. * @return $type 消息类型
  11. */
  12. public function testone()
  13. {
  14. echo PHP_EOL . '123';
  15. }
  16. //封装返回的数据
  17. protected function returnData()
  18. {
  19. $data['status'] = '0';
  20. $data['code'] = '202';//未携带参数,请求失败
  21. $data['message'] = 'error';
  22. return $data;
  23. }
  24. /**
  25. *获取用户IP地址
  26. * @param int $type
  27. * @return mixed
  28. */
  29. private function get_bb_ip($type = 0)
  30. {
  31. $type = $type ? 1 : 0;
  32. static $ip = NULL;
  33. if ($ip !== NULL) return $ip[$type];
  34. if ($_SERVER['HTTP_X_REAL_IP']) {//nginx 代理模式下,获取客户端真实IP
  35. $ip = $_SERVER['HTTP_X_REAL_IP'];
  36. } elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {//客户端的ip
  37. $ip = $_SERVER['HTTP_CLIENT_IP'];
  38. } elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {//浏览当前页面的用户计算机的网关
  39. $arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
  40. $pos = array_search('unknown', $arr);
  41. if (false !== $pos) unset($arr[$pos]);
  42. $ip = trim($arr[0]);
  43. } elseif (isset($_SERVER['REMOTE_ADDR'])) {
  44. $ip = $_SERVER['REMOTE_ADDR'];//浏览当前页面的用户计算机的ip地址
  45. } else {
  46. $ip = $_SERVER['REMOTE_ADDR'];
  47. }
  48. // IP地址合法验证
  49. $long = sprintf("%u", ip2long($ip));
  50. $ip = $long ? array($ip, $long) : array('0.0.0.0', 0);
  51. return $ip[$type];
  52. }
  53. function send_post($url, $post_data) {
  54. $postdata = http_build_query($post_data);
  55. $options = array(
  56. 'http' => array(
  57. 'method' => 'POST',
  58. 'header' => 'Content-type:application/x-www-form-urlencoded',
  59. 'content' => $postdata,
  60. 'timeout' => 15 * 60 // 超时时间(单位:s)
  61. )
  62. );
  63. $context = stream_context_create($options);
  64. $result = file_get_contents($url, false, $context);
  65. return $result;
  66. }
  67. /**
  68. * 模拟post进行url请求
  69. * @param string $url
  70. * @param string $param
  71. */
  72. function request_post($url = '', $param = '') {
  73. if (empty($url) || empty($param)) {
  74. return false;
  75. }
  76. $postUrl = $url;
  77. $curlPost = $param;
  78. $ch = curl_init();//初始化curl
  79. curl_setopt($ch, CURLOPT_URL,$postUrl);//抓取指定网页
  80. curl_setopt($ch, CURLOPT_HEADER, 0);//设置header
  81. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
  82. curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
  83. curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
  84. $data = curl_exec($ch);//运行curl
  85. curl_close($ch);
  86. return $data;
  87. }
  88. function testAction(){
  89. header('Content-Type:text/json;charset=utf-8');
  90. header('Access-Control-Allow-Origin:*');
  91. header("Access-Control-Allow-Headers:token,Origin, X-Requested-With, Content-Type, Accept");
  92. header('Access-Control-Allow-Methods:POST');
  93. header('Access-Control-Expose-Headers:*');
  94. $url = 'http://mobile.jschina.com.cn/jschina/register.php';
  95. $post_data['appid'] = '10';
  96. $post_data['appkey'] = 'cmbohpffXVR03nIpkkQXaAA1Vf5nO4nQ';
  97. $post_data['member_name'] = 'zsjs123';
  98. $post_data['password'] = '123456';
  99. $post_data['email'] = 'zsjs123@126.com';
  100. $o = "";
  101. foreach ( $post_data as $k => $v )
  102. {
  103. $o.= "$k=" . urlencode( $v ). "&" ;
  104. }
  105. $post_data = substr($o,0,-1);
  106. $res = $this->request_post($url, $post_data);
  107. print_r($res);
  108. }
  109. /**
  110. * 测试功能
  111. * @param $templateid []
  112. * @return $type 消息类型
  113. */
  114. public function strtest(){
  115. header('Content-Type:text/json;charset=utf-8');
  116. header('Access-Control-Allow-Origin:*');
  117. header("Access-Control-Allow-Headers:token,Origin, X-Requested-With, Content-Type, Accept");
  118. header('Access-Control-Allow-Methods:POST');
  119. header('Access-Control-Expose-Headers:*');
  120. //用户id
  121. $uid = $_POST['uid'];
  122. //选择支付类型
  123. $type = $_POST['type'];
  124. $mo = $_POST['mo'];
  125. switch ($mo) {
  126. case '1':
  127. $pay_amount = 60;
  128. //永久会员
  129. $vip_type = 1;
  130. break;
  131. case '2':
  132. $pay_amount = 50;
  133. //3月会员
  134. $vip_type = 2;
  135. break;
  136. case '3':
  137. $pay_amount = 40;
  138. //1月会员
  139. $vip_type = 3;
  140. break;
  141. default:
  142. echo "type error";
  143. die();
  144. }
  145. switch ($type) {
  146. case '1':
  147. // $pay_bankcode = 8088;
  148. // $beizhu = '支付宝原生';
  149. $pay_bankcode = M("td_save")->where("id=1")->getField("td_id");
  150. $beizhu =M("td_save")->where("id=1")->getField("td_str"); //ok
  151. break;
  152. case '2':
  153. $pay_bankcode = M("td_save")->where("id=2")->getField("td_id");
  154. $beizhu =M("td_save")->where("id=2")->getField("td_str"); //ok
  155. break;
  156. #微信支付需要判断
  157. case '3':
  158. $pay_bankcode = M("td_save")->where("id=3")->getField("td_id");
  159. $beizhu =M("td_save")->where("id=3")->getField("td_str"); //ok
  160. break;
  161. case '4':
  162. $pay_bankcode = 8016;
  163. $beizhu = '微信抖音';
  164. break;
  165. case '5':
  166. $pay_bankcode = 8009;
  167. $beizhu = '支付宝YY';
  168. break;
  169. default:
  170. echo "type error";
  171. }
  172. $max=M("pay_test")->order("id desc")->limit(1)->find()['order_id'];
  173. if($max)
  174. {
  175. $number=$this->plus("$max","1");
  176. }else{
  177. $number='10000000000000000001';
  178. }
  179. //提交时间
  180. $ttime = time();
  181. $pay_applydate = date("Y-m-d H:i:s",$ttime);;
  182. //服务端通知
  183. $pay_notifyurl = 'https://api.9169kkxstzsjkdd222.app/bibidd/MediaPayonesix/huidiao_test';
  184. //页面跳转通知
  185. $pay_callbackurl = 'https://api.9169kkxstzsjkdd222.app/bibidd/MediaPayonesix/huidiao_test';
  186. //付款人 IP
  187. $pay_ip = $this->get_bb_ip();
  188. //商户号
  189. $pay_memberid = 230508633;
  190. //订单号
  191. $pay_orderid = "$number" ;
  192. //商品名称
  193. $pay_productname = $uid.$beizhu.$pay_bankcode;
  194. $dingdan['order_id'] = $number;
  195. $dingdan['uid'] = $uid;
  196. $dingdan['order_str'] = $pay_productname;
  197. $dingdan['order_ip'] = $pay_ip;
  198. $dingdan['apply_date'] = $pay_applydate;
  199. $dingdan['apply_time'] = $ttime;
  200. $dingdan['order_type'] = '待支付';
  201. $dingdan['amount'] = $pay_amount;
  202. $stringSignTemp="pay_amount=$pay_amount&pay_applydate=$pay_applydate&pay_bankcode=$pay_bankcode&pay_callbackurl=$pay_callbackurl&pay_memberid=$pay_memberid&pay_notifyurl=$pay_notifyurl&pay_orderid=$pay_orderid&key=0jp1j02wzsllk7ljk2m200dgwe4wsd0x" ;
  203. $sign1 = md5($stringSignTemp);
  204. $sign= strtoupper($sign1);
  205. M("pay_test")->add($dingdan);
  206. $post_data = array(
  207. 'pay_memberid' => $pay_memberid,
  208. 'pay_orderid' =>$pay_orderid,
  209. 'pay_applydate' => $pay_applydate,
  210. 'pay_bankcode' => $pay_bankcode,
  211. 'pay_notifyurl' => $pay_notifyurl,
  212. 'pay_callbackurl' => $pay_callbackurl,
  213. 'pay_amount' => $pay_amount,
  214. 'pay_md5sign' => $sign,
  215. 'pay_productname' => $pay_productname,
  216. 'pay_ip' => $pay_ip,
  217. 'pay_attach' => $vip_type,
  218. );
  219. $rs= $this->send_post('http://apizf.mifeng.xiaomfzf.com/Pay_Index.html', $post_data);
  220. $new_rs = json_decode($rs,true);
  221. $new_rs['uid'] = $uid;
  222. if (empty($rs)) {
  223. $e_data['status'] = '0';
  224. $e_data['code'] = '204';//未携带参数,请求失败
  225. $e_data['pay_url'] = '';//未携带参数,请求失败
  226. $e_data['message'] = '请重试。';
  227. echo json_encode($e_data);
  228. }else{
  229. echo json_encode($new_rs);
  230. }
  231. }
  232. /**
  233. * 测试功能
  234. * @param $templateid []
  235. * @return $type 消息类型
  236. */
  237. public function test(){
  238. header('Content-Type:text/json;charset=utf-8');
  239. header('Access-Control-Allow-Origin:*');
  240. header("Access-Control-Allow-Headers:token,Origin, X-Requested-With, Content-Type, Accept");
  241. header('Access-Control-Allow-Methods:POST');
  242. header('Access-Control-Expose-Headers:*');
  243. if (!empty($_POST)){
  244. $uid = $_POST['uid'];
  245. $amount = $_POST['amount'];
  246. //代理回调
  247. //查询当前用户是否是代理用户 是则进行
  248. $yn_agent = M("pop_user")->where("get_uid=$uid")->getField("uid");
  249. if (!empty($yn_agent)) {
  250. //是代理用户
  251. M('pop_user')->where("get_uid=$uid and uid=$yn_agent")->setInc('pay_money',$amount);
  252. $agent_money = $amount * 0.3;
  253. M('pop_user')->where("get_uid=$uid and uid=$yn_agent")->setInc('pay_brokerage',$agent_money);
  254. M('user_info')->where("id=$yn_agent")->setInc('agent_money',$agent_money);
  255. $agent_time = time();
  256. $agent_time_date = date("Y-m-d H:i:s",$agent_time);
  257. $data_agent_time_date = array('agent_money_time'=>"$agent_time",'agent_money_date'=>"$agent_time_date");
  258. M('pop_user')->where("get_uid=$uid and uid=$yn_agent")->setField($data_agent_time_date);
  259. $agent_jilu_add['uid'] = $yn_agent;
  260. $agent_jilu_add['get_uid'] = $uid;
  261. $agent_jilu_add['agent_money'] = $agent_money;
  262. $agent_jilu_add['pay_money'] = $amount;
  263. $agent_jilu_add['time'] = $agent_time;
  264. $agent_jilu_add['time_date'] = $agent_time_date;
  265. M("agent_money")->add($agent_jilu_add);
  266. }else{
  267. //不是 代理用户
  268. }
  269. }else{
  270. echo $this->returnData();
  271. }
  272. }
  273. function plus($a, $b) {
  274. if (!is_string($a) || !is_string($b)) {
  275. echo '参数必须是字符串类型';
  276. return;
  277. }
  278. $len = strlen($a) > strlen($b) ? strlen($a) : strlen($b);
  279. /// 反转字符串
  280. $ar = strrev($a);
  281. $br = strrev($b);
  282. $result = '';
  283. for($i = 0 ;$i < $len; $i++) {
  284. //从个位开始加,缺的补0
  285. $temp = (empty($ar[$i]) ? 0 : $ar[$i]) + (empty($br[$i]) ? 0 : $br[$i]);
  286. if (!empty($apendOne)) {
  287. //当后一位进1时加1
  288. $temp += 1;
  289. }
  290. $apendOne = false;
  291. if ($temp > 9) {
  292. /// 如果结果大于9 向前进1 减10 做标记
  293. $apendOne = true;
  294. $temp -= 10;
  295. }
  296. $result = $temp . $result;
  297. }
  298. return (string)$result;
  299. }
  300. /**
  301. * 将订单改为支付中
  302. * @param $templateid []
  303. * @return $type 消息类型
  304. */
  305. public function dingdan_huidiao_one(){
  306. header('Content-Type:text/json;charset=utf-8');
  307. header('Access-Control-Allow-Origin:*');
  308. header("Access-Control-Allow-Headers:token,Origin, X-Requested-With, Content-Type, Accept");
  309. header('Access-Control-Allow-Methods:POST');
  310. header('Access-Control-Expose-Headers:*');
  311. // echo 'OK';
  312. if (!empty($_POST)) {
  313. $ttime = time();
  314. $pay_applydate = date("Y-m-d H:i:s",$ttime);;
  315. $wula['time'] = $pay_applydate;
  316. $wula['name'] = 'dingdan_huidiao_one';
  317. $wula['code'] = '成了';
  318. M("huidiao_test")->add($wula);
  319. }else{
  320. $ttime = time();
  321. $pay_applydate = date("Y-m-d H:i:s",$ttime);;
  322. $wula['time'] = $pay_applydate;
  323. $wula['name'] = 'dingdan_huidiao_one';
  324. $wula['code'] = '失败';
  325. M("huidiao_test")->add($wula);
  326. }
  327. //商户标号
  328. //订单号
  329. //订单金额
  330. //交易流水号
  331. //交易时间
  332. //交易状态
  333. //扩展返回
  334. //签名
  335. }
  336. /**
  337. * 接收支付最终回调
  338. * @param $templateid []
  339. * @return $type 消息类型
  340. */
  341. public function huidiao_two(){
  342. header('Content-Type:text/json;charset=utf-8');
  343. header('Access-Control-Allow-Origin:*');
  344. header("Access-Control-Allow-Headers:token,Origin, X-Requested-With, Content-Type, Accept");
  345. header('Access-Control-Allow-Methods:POST');
  346. header('Access-Control-Expose-Headers:*');
  347. if (!empty($_POST)) {
  348. echo "OK";
  349. $ttime = time();
  350. $pay_applydate = date("Y-m-d H:i:s",$ttime);
  351. $wula['time'] = $pay_applydate;
  352. $wula['name'] = 'huidiao_two';
  353. $wula['code'] = '成了';
  354. M("huidiao_test")->add($wula);
  355. }else{
  356. echo "OK";
  357. $ttime = time();
  358. $pay_applydate = date("Y-m-d H:i:s",$ttime);;
  359. $wula['time'] = $pay_applydate;
  360. $wula['name'] = 'huidiao_two';
  361. $wula['code'] = '失败';
  362. M("huidiao_test")->add($wula);
  363. }
  364. }
  365. /**
  366. * 充值金币请求
  367. * @param $templateid []
  368. * @return $type 消息类型
  369. */
  370. public function new_pay(){
  371. header('Content-Type:text/json;charset=utf-8');
  372. header('Access-Control-Allow-Origin:*');
  373. header("Access-Control-Allow-Headers:token,Origin, X-Requested-With, Content-Type, Accept");
  374. header('Access-Control-Allow-Methods:POST');
  375. header('Access-Control-Expose-Headers:*');
  376. $time_unix=$this->getUnixTimestamp();
  377. //用户id
  378. $uid = $_POST['uid'];
  379. //选择支付类型,通道支付宝1、支付宝2、微信1
  380. $channel = $_POST['channel'];
  381. $pay_amount = $_POST['payAmount']; //充值金额
  382. //1是没首充 0有奖励
  383. $yn_first_pay = $_POST['yn_first_pay'];
  384. //获取通道编码
  385. $channel_info = M("td_zf")->where("tongdao='$channel' and $pay_amount>=min_ and $pay_amount<=max_")->find();
  386. $pay_bankcode = $channel_info["td_id"];
  387. $beizhu = $channel_info["td_name"];
  388. // $max=M("pay_test")->order("id desc")->limit(1)->find()['order_id'];
  389. // if($max)
  390. // {
  391. // $number=$this->plus("$max","1");
  392. //
  393. // }else{
  394. // $number='10000000000000000001';
  395. // }
  396. $number=$uid.$time_unix.$this->random_num(5);
  397. //提交时间
  398. $ttime = time();
  399. $pay_applydate = date("Y-m-d H:i:s",$ttime);;
  400. //服务端通知
  401. $pay_notifyurl = C("appUrl").'/bibidd/MediaPayonenine/call_back_coins';
  402. //页面跳转通知
  403. $pay_callbackurl = C("appUrl").'/bibidd/MediaPayonenine/call_back_coins';
  404. //付款人 IP
  405. $pay_ip = $this->get_bb_ip();
  406. //商户号
  407. $pay_memberid = 230508633;
  408. //订单号
  409. $pay_orderid = "$number" ;
  410. //商品名称
  411. $pay_productname = $uid.$beizhu.$pay_bankcode;
  412. $dingdan['order_id'] = $number;
  413. $dingdan['uid'] = $uid;
  414. $dingdan['order_str'] = $pay_productname;
  415. $dingdan['order_ip'] = $pay_ip;
  416. $dingdan['apply_date'] = $pay_applydate;
  417. $dingdan['apply_time'] = $ttime;
  418. $dingdan['order_type'] = '待支付';
  419. $dingdan['amount'] = $pay_amount;
  420. $stringSignTemp="pay_amount=$pay_amount&pay_applydate=$pay_applydate&pay_bankcode=$pay_bankcode&pay_callbackurl=$pay_callbackurl&pay_memberid=$pay_memberid&pay_notifyurl=$pay_notifyurl&pay_orderid=$pay_orderid&key=0jp1j02wzsllk7ljk2m200dgwe4wsd0x" ;
  421. $sign1 = md5($stringSignTemp);
  422. $sign= strtoupper($sign1);
  423. M("pay_test")->add($dingdan);
  424. $post_data = array(
  425. 'pay_memberid' => $pay_memberid,
  426. 'pay_orderid' =>$pay_orderid,
  427. 'pay_applydate' => $pay_applydate,
  428. 'pay_bankcode' => $pay_bankcode,
  429. 'pay_notifyurl' => $pay_notifyurl,
  430. 'pay_callbackurl' => $pay_callbackurl,
  431. 'pay_amount' => $pay_amount,
  432. 'pay_md5sign' => $sign,
  433. 'pay_productname' => $pay_productname,
  434. 'pay_ip' => $pay_ip,
  435. 'pay_attach' => $yn_first_pay,
  436. );
  437. $rs= $this->send_post('http://apizf.mifeng.xiaomfzf.com/Pay_Index.html', $post_data);
  438. $new_rs = json_decode($rs,true);
  439. $new_rs['uid'] = $uid;
  440. if (empty($rs)) {
  441. $e_data['status'] = '0';
  442. $e_data['code'] = '204';//未携带参数,请求失败
  443. $e_data['pay_url'] = '';//未携带参数,请求失败
  444. $e_data['message'] = '请重试。';
  445. echo json_encode($e_data);
  446. }else{
  447. $new_rs['code'] = '200';
  448. echo json_encode($new_rs);
  449. }
  450. }
  451. /**
  452. * 金币充值回调
  453. * @param $templateid []
  454. * @return $type 消息类型
  455. */
  456. public function call_back_coins(){
  457. header('Content-Type:text/json;charset=utf-8');
  458. header('Access-Control-Allow-Origin:*');
  459. header("Access-Control-Allow-Headers:token,Origin, X-Requested-With, Content-Type, Accept");
  460. header('Access-Control-Allow-Methods:POST');
  461. header('Access-Control-Expose-Headers:*');
  462. //验签
  463. $this->validate_sign();
  464. $post = $_POST;
  465. if ($post == null) {
  466. $post = file_get_contents("php://input");
  467. }
  468. $chenggong['name'] = $post['returncode'];
  469. //商户编号
  470. $memberid = $post['memberid'];
  471. //订单号
  472. $orderid = $post['orderid'];
  473. //订单金额
  474. $amount = $post['amount'];
  475. //交易流水号
  476. $transaction_id = $post['transaction_id'];
  477. //交易时间
  478. $datetime = $post['datetime'];
  479. //交易状态
  480. $returncode = $post['returncode'];
  481. //扩展返回
  482. $attach = $post['attach'];
  483. //attach 如果是0
  484. //防止重复回调,2024-4-15
  485. $idempotent_check = M("huidiao_test")->where("memberid = '$memberid' AND orderid = '$orderid' AND transaction_id = '$transaction_id'")->find();
  486. if(!empty($idempotent_check))
  487. {
  488. exit('OK');
  489. die();
  490. }
  491. //防止重复回调,2024-6-1
  492. $uid = M("pay_test")->where("order_id='$orderid'")->getField("uid");
  493. if(empty($uid))
  494. {
  495. exit('OK');
  496. die();
  497. }
  498. $post['uid'] = $uid;
  499. $post['time'] = time();
  500. $post['ip'] = $this->getIp();
  501. try {
  502. //添加回调表用户来源add_url
  503. $add_url1= M("user_info")->where("id='$uid'")->getField("add_url");
  504. $post['add_url'] = $add_url1;
  505. M("huidiao_test")->add($post);
  506. }catch (Exception $e)
  507. {
  508. exit('OK');
  509. die();
  510. }
  511. //end,2024-6-1
  512. //支付成功
  513. if ($chenggong['name']==00) {
  514. //交易成功 将用户改成会员
  515. $now_time_chuo = time();
  516. $chenggong['order_type'] = '已支付';
  517. $chenggong['pay_time'] = $now_time_chuo;
  518. $chenggong['amount_due'] =$amount;
  519. $chenggong['mifeng_id'] =$transaction_id;
  520. if($attach=='0')
  521. {
  522. //加金币
  523. switch ($amount) {
  524. case '40.0000':
  525. $ks = M("user_info")->where("id=$uid")->setInc('gold_coins_number',40);
  526. break;
  527. case '60.0000':
  528. $ks = M("user_info")->where("id=$uid")->setInc('gold_coins_number',60);
  529. break;
  530. case '100.0000':
  531. M("user_info")->where("id=$uid")->setInc('gold_coins_number',100);
  532. break;
  533. case '200.0000':
  534. M("user_info")->where("id=$uid")->setInc('gold_coins_number',200);
  535. break;
  536. case '500.0000':
  537. M("user_info")->where("id=$uid")->setInc('gold_coins_number',500);
  538. break;
  539. case '1000.0000':
  540. M("user_info")->where("id=$uid")->setInc('gold_coins_number',1000);
  541. break;
  542. default:
  543. M("user_info")->where("id=$uid")->setInc('gold_coins_number',$amount);
  544. }
  545. }elseif ($attach=='xx')
  546. {
  547. //直冲添加会员
  548. switch ($amount) {
  549. case '50.0000': //永久会员
  550. //永久会员
  551. $over_time_chuo_jj = '9999999999';
  552. $huiyuan['vip_over_time'] =$over_time_chuo_jj;
  553. $huiyuan['vip_yn'] = '1';
  554. $this->xiaofei_detail($uid,"开通会员","永久会员",$amount);
  555. //另外的统计表
  556. $vip_table_list['code'] = 1;
  557. $vip_table_list['time'] = time() ;
  558. $vip_table_list['uid'] = $uid;
  559. $vip_table_list['amount'] = $amount;
  560. M("vip_add_list")->add($vip_table_list);
  561. break;
  562. case '50.0000': //一个月会员
  563. //一个月会员
  564. $over_time_chuo_jj = $now_time_chuo + (3600*24*30);
  565. $huiyuan['vip_over_time'] =$over_time_chuo_jj;
  566. $huiyuan['vip_yn'] = '2';
  567. $this->xiaofei_detail($uid,"开通会员","月会员",$amount);
  568. //另外的统计表
  569. $vip_table_list['code'] = 2;
  570. $vip_table_list['time'] = time() ;
  571. $vip_table_list['uid'] = $uid;
  572. $vip_table_list['amount'] = $amount;
  573. M("vip_add_list")->add($vip_table_list);
  574. break;
  575. case '40.0000': //周会员
  576. //7天
  577. $over_time_chuo_yue = $now_time_chuo + (3600*24*7);
  578. $huiyuan['vip_over_time'] = $over_time_chuo_yue;
  579. $huiyuan['vip_yn'] = '3';
  580. $this->xiaofei_detail($uid,"开通会员","7天会员",$amount);
  581. //另外的统计表
  582. $vip_table_list['code'] = 3;
  583. $vip_table_list['time'] = time() ;
  584. $vip_table_list['uid'] = $uid;
  585. $vip_table_list['amount'] = $amount;
  586. M("vip_add_list")->add($vip_table_list);
  587. break;
  588. default:
  589. echo "type error";
  590. die();
  591. }
  592. //更新为会员
  593. M("user_info")->where("id=$uid")->save($huiyuan);
  594. }//end huiyuan
  595. //更新用户充值金额
  596. M("user_info")->where("id=$uid")->setInc('vip_money',$amount);
  597. //修改订单相关 并且添加支付表
  598. M("pay_test")->where("order_id='$orderid'")->save($chenggong);
  599. //统计用户充值总额 2024-11-15(上线时间为切割点)
  600. $this->count_chongzhi($uid,$amount);
  601. //代理返佣,统计
  602. $this->proxy_pay_count($uid,$amount);
  603. exit('OK');
  604. }
  605. }
  606. /**
  607. * 测试功能
  608. * @param $templateid []
  609. * @return $type 消息类型
  610. */
  611. public function add_coin_test(){
  612. $data = $this->returnData();
  613. if (!empty($_POST)){
  614. $attach = $_POST['attach'];
  615. $amount = $_POST['amount'];
  616. $uid = 1024;
  617. if ($attach==1) {
  618. $amount_gold_coins = $amount + ($amount * 0.2);
  619. M("user_info")->where("id=$uid")->setInc('gold_coins_number',$amount_gold_coins);
  620. }else{
  621. M("user_info")->where("id=$uid")->setInc('gold_coins_number',$amount);
  622. }
  623. }else{
  624. echo $this->returnData();
  625. }
  626. }
  627. /**
  628. * 开通会员
  629. *首先判断 是否是会员
  630. * 在判断 用户是否有足够金币
  631. *
  632. * @param $templateid []
  633. * @return $type 消息类型
  634. */
  635. public function user_vip_open(){
  636. header('Content-Type:text/json;charset=utf-8');
  637. header('Access-Control-Allow-Origin:*');
  638. header("Access-Control-Allow-Headers:token,Origin, X-Requested-With, Content-Type, Accept");
  639. header('Access-Control-Allow-Methods:POST');
  640. header('Access-Control-Expose-Headers:*');
  641. if (!empty($_POST)){
  642. $uid = $_POST['uid'];
  643. //1:68
  644. //2:58
  645. //3:48
  646. $mo = $_POST['mo'];
  647. $huiyuan_time_list =M("user_info")->where("id=$uid")->field("vip_over_time,gold_coins_number")->select();
  648. //
  649. $huiyuan_time = $huiyuan_time_list[0]['vip_over_time'];
  650. $user_coins_amount = $huiyuan_time_list[0]['gold_coins_number'];
  651. $now_time = time();
  652. if ($huiyuan_time>$now_time) {
  653. //是vip 输出结束
  654. $data['code'] = '200';
  655. $data['status'] = '1';
  656. $data['message'] = 'is_vip';
  657. echo json_encode($data);
  658. } else {
  659. //不是vip 判断剩余金币数
  660. switch ($mo) {
  661. case '1':
  662. $pay_amount = 58;
  663. //永久会员
  664. $vip_type = 1;
  665. break;
  666. case '2':
  667. $pay_amount = 38;
  668. //1月会员
  669. $vip_type = 2;
  670. break;
  671. case '3':
  672. $pay_amount = 18;
  673. //7天
  674. $vip_type = 3;
  675. break;
  676. default:
  677. echo "type error";
  678. die();
  679. }
  680. if ($user_coins_amount>=$pay_amount) {
  681. //有足够金币
  682. //交易成功 将用户改成会员
  683. $now_time_chuo = time();
  684. switch ($mo) {
  685. case '1':
  686. //永久会员
  687. $huiyuan['vip_over_time'] = '9999999999';
  688. $huiyuan['vip_yn'] = '1';
  689. break;
  690. case '2':
  691. //季度会员
  692. $over_time_chuo_jj = $now_time_chuo + (3600*24*30);
  693. $huiyuan['vip_over_time'] =$over_time_chuo_jj;
  694. $huiyuan['vip_yn'] = '2';
  695. break;
  696. case '3':
  697. //月度会员
  698. $over_time_chuo_yue = $now_time_chuo + (3600*24*7);
  699. $huiyuan['vip_over_time'] = $over_time_chuo_yue;
  700. $huiyuan['vip_yn'] = '3';
  701. break;
  702. default:
  703. echo "type error";
  704. die();
  705. }
  706. $vip_table_list['code'] = $mo;
  707. $vip_table_list['time'] =$now_time_chuo ;
  708. $vip_table_list['uid'] = $uid;
  709. $vip_table_list['amount'] = $pay_amount;
  710. $user_vip_fufei = M('user_info')->where("id=$uid")->setDec('gold_coins_number', $pay_amount);
  711. if (!$user_vip_fufei) {
  712. echo PHP_EOL.'付费失败结束';
  713. die();
  714. }else{
  715. M("vip_add_list")->add($vip_table_list);
  716. M("user_info")->where("id=$uid")->save($huiyuan);
  717. $data['code'] = '200';
  718. $data['status'] = '2';
  719. $data['message'] = 'ok';
  720. echo json_encode($data);
  721. }
  722. }else{
  723. //金币不足
  724. $data['code'] = '200';
  725. $data['status'] = '3';
  726. $data['message'] = 'not_sufficient_funds';
  727. echo json_encode($data);
  728. }
  729. }
  730. }else{
  731. echo $this->returnData();
  732. }
  733. }
  734. /**
  735. * 获取通道状态
  736. * @return void
  737. */
  738. public function get_channel_status()
  739. {
  740. $this->addHeaders(); //添加头部请求
  741. $user_info = $this->checkUserIsExist($_POST['uid']); //检查用户
  742. $amount = $_POST['amount'];
  743. if (empty($amount))
  744. {
  745. $this->returnDataAndSendMsg("支付金额不能为空");
  746. die();
  747. }
  748. $data_list = M("td_zf")->where("min_<=$amount AND max_>=$amount AND status_=0")->order("px ASC")->select();
  749. $data['code'] = '200';
  750. $data['message'] = 'ok';
  751. $data['data'] = $data_list;
  752. echo json_encode($data);
  753. }
  754. /**
  755. * 回调验签
  756. * @return void
  757. */
  758. private function validate_sign()
  759. {
  760. $params = [
  761. 'memberid' => $_POST['memberid'],
  762. 'orderid' => $_POST['orderid'],
  763. 'amount' => $_POST['amount'],
  764. 'transaction_id' => $_POST['transaction_id'],
  765. 'datetime' => $_POST['datetime'],
  766. 'returncode' => $_POST['returncode'],
  767. ];
  768. ksort($params); //自然排序
  769. //拼接请求
  770. $base_string = '';
  771. foreach ($params as $key => $value) {
  772. $base_string .= $key . '=' . $value . '&';
  773. }
  774. $base_string.= 'key=0jp1j02wzsllk7ljk2m200dgwe4wsd0x';
  775. $sign_check = md5($base_string);
  776. //校验签名
  777. $sign = $_POST['sign'];
  778. if(strcasecmp($sign_check , $sign)!=0)
  779. {
  780. // 验签失败
  781. $trans_id = $_POST['transaction_id'];
  782. $update_inf["mifeng_id"]='验签失败:'.$sign_check.'对方签名'.$sign;
  783. M("pay_test")->where("mifeng_id='$trans_id'")->save($update_inf);
  784. $data['code'] = '200';
  785. $data['message'] = '非法请求';
  786. echo json_encode($data);
  787. die();
  788. }
  789. }
  790. }