387 lines
11 KiB
PHP
Raw Normal View History

2024-11-02 15:27:08 +08:00
<?php
namespace app\kami\controller\suoka;
use app\kami\controller\getcookie\Whymcl as WhymclCookie;
use dever\Log;
#中兆
class Whymcl extends Core
{
# 登录获取
public function get_card_kind($pid,$cash)
{
$info = $this->getProductInfo($pid);
if ($info) {
if (isset($info['gid_rule']) && $info['gid_rule']) {
$rule = json_decode($info['gid_rule'], true);
if (isset($rule[$cash]) && $rule[$cash]) {
$gid = $rule[$cash];
return $gid;
}
}
if (isset($info['gid']) && $info['gid']) {
return $info['gid'];
}
}
}
public function lockcard($cid,$cardno,$cardpwd,$pid,$cash,$num=0,$type=1){
$suokaRequest = $this->getChanelSuoKaData($cid);
if(!$suokaRequest == 'error'){
return 'error';
}
$url = $suokaRequest['suoka_url'];
$cookie_path = $this->getcCookiePatch($cid);
// /www/sites/reapi/index/extend/data/cookie/5//cookie.txt
$cookie_path .= 'cookie.txt';
// $cookies = file_get_contents($cookie_path);
// var_dump($cookies);die;
if (is_readable($cookie_path)) {
$cookies = file_get_contents($cookie_path);
// 处理文件内容
} else {
// 文件不存在或不可读
$WhymclCookie = new WhymclCookie($this->app);
$request = [
'login_info' => [
'username' => $suokaRequest['username'],
'password' => $suokaRequest['password'],
],
'login_url' => $suokaRequest['login_url'],
'cid' => $cid
];
$cookie_path = $WhymclCookie->login($request);
if($cookie_path == 'error'){
return $cookie_path;
}else{
$cookies = file_get_contents($cookie_path);
}
}
// var_dump(1);die;
$suoka_id = $this->get_suoka_id($suokaRequest['suokaid_url'], $cookie_path, $cardno,$type);
if($suoka_id == '未找到卡号'){
if (is_readable($cookie_path)) {
unlink($cookie_path);
// 处理文件内容
}
if($num == 0){
$this->UnlockCard($cid, $cardno, $cardpwd, $pid, $cash,1);
}
return 'error';
}
if($type == 1 && $suoka_id == '已锁定'){
return 'old_ok';
}
if($type == 2 && $suoka_id == '正常'){
return 'ok';
}
if($suoka_id == '已使用'){
return 'use_error';
}
if(is_numeric($suoka_id)){
$headers = array(
'X-Requested-With: XMLHttpRequest',
'Content-Type: application/x-www-form-urlencoded',
'User-Agent: Apifox/1.0.0 (https://apifox.com)',
'Accept: */*',
'Host: 101.200.165.85',
'Connection: keep-alive',
);
$msg = $this->send_lock_card($headers, $cookie_path, $suoka_id, $url, $suokaRequest, $cardno,0,$type);
if($msg == 'http_error'){
if (is_readable($cookie_path)) {
unlink($cookie_path);
// 处理文件内容
}
if($type == 2 && $num == 0){
$this->UnlockCard($cid, $cardno, $cardpwd, $pid, $cash,1);
}elseif($type == 2 && $num == 0){
$this->suoka($cid, $cardno, $cardpwd, $pid, $cash,1);
}
return 'error';
}elseif($msg != 'ok'){
Log::write('kami', 'zhongzhao', $cardno);
return 'error';
}
return 'ok';
}else{
return 'error';
}
// var_dump($suoka_id);die;
}
#获取锁卡id
public function get_suoka_id($url,$cookie_path,$cardno,$type= 1){
$postData = [
'rekey' => $cardno
];
$options['cookie_file'] = $cookie_path;
$result = http_get( $url, $postData, $options);
$table= $this->get_between($result, '<table class="table table-custom selldetail-records">', '</table>');
$table= $this->get_between($table, '<tbody>', '</tbody>');
$need_value = $this->get_between($table, '<input type="checkbox" value="', '" class="order-cancel-checkbox">');
if(!strpos($table, $cardno)){
return "未找到卡号";
}
if(strpos($table, "已锁定")){
if($type==1){
return "已锁定";
}
}
if(strpos($table, "正常")){
if($type==2){
return "正常";
}
}
// if(strpos($table, "正常")){
// return "正常";
// }
if(strpos($table, "该卡已使用,不能锁定")){
return "已使用";
}
if(is_numeric($need_value)){
return $need_value;
}
return "未找到可用锁卡id";
}
/**
* php截取指定两个字符之间字符串方式二
* @param string $str 需要截取的字符串
* @param string $start 开始字符串
* @param string $end 结束字符串
* @return string
*/
public function get_between($str, $start, $end) {
$substr = substr($str, strlen($start)+strpos($str, $start),(strlen($str) - strpos($str, $end))*(-1));
return $substr;
}
public function UnlockCard($cid,$cardno,$cardpwd,$pid,$cash,$num = 0)
{
$unlockcard = $this->lockcard($cid, $cardno, $cardpwd, $pid, $cash,$num,2);
return $unlockcard;
}
public function send_lock_card($headers,$cookie_path,$suoka_id,$url,$suokaRequest,$cardno,$num=0,$type=1){
$options['headers'] = $headers;
$options['cookie_file'] = $cookie_path;
$postData = [
'ids' => $suoka_id,
];
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => 'ids='.$suoka_id,
CURLOPT_COOKIEFILE=>$cookie_path,
CURLOPT_HTTPHEADER => array(
'X-Requested-With: XMLHttpRequest',
// 'Cookie: PHPSESSID=f843c2d3947b218df078ced2afb2933e ; PHPSESSID=f843c2d3947b218df078ced2afb2933e',
'User-Agent: Apifox/1.0.0 (https://apifox.com)',
'Accept: */*',
'Host: 101.200.165.85',
'Connection: keep-alive',
'Content-Type: application/x-www-form-urlencoded'
),
));
$response = curl_exec($curl);
curl_close($curl);
// $result = http_post( $url, $postData, $options);
$result = json_decode($response,true);
// var_dump($response);die;
if(isset($result['msg']) && $result['msg'] == '总共操作1笔设置成功 1笔') {
// var_dump($result['msg']);die;
$suoka_ids = $this->get_suoka_id($suokaRequest['suokaid_url'], $cookie_path, $cardno,$type);
while ($type == 1 && $suoka_ids != '已锁定'&&$num<=3) {
$num++;
return $this->send_lock_card($headers,$cookie_path,$suoka_id,$url,$suokaRequest,$cardno,$num);
}
while ($type == 2 && $suoka_ids != '正常'&&$num<=3) {
$num++;
return $this->send_lock_card($headers,$cookie_path,$suoka_id,$url,$suokaRequest,$cardno,$num,2);
}
if ($type==1 && $suoka_ids == '已锁定') {
return 'ok';
}
if ($type==2 && $suoka_ids == '正常') {
return 'ok';
}
if($num>3) return 'error';
}else{
$suoka_ids = $this->get_suoka_id($suokaRequest['suokaid_url'], $cookie_path, $cardno,$type);
if ($type==1 && $suoka_ids == '已锁定') {
return 'ok';
}elseif($suoka_ids == '已使用'){
return 'use_error';
}elseif($type==2 && $suoka_ids == '正常') {
return 'ok';
}
}
return 'http_error';//请求失败或者错误
}
public function suoka($cid,$cardno,$cardpwd,$pid,$cash,$num = 0)
{
$suokaRequest = $this->getChanelSuoKaData($cid);
if(!$suokaRequest == 'error'){
return 'error';
}
$url = $suokaRequest['suoka_url'];
$cookie_path = $this->getcCookiePatch($cid);
// /www/sites/reapi/index/extend/data/cookie/5//cookie.txt
$cookie_path .= 'cookie.txt';
// $cookies = file_get_contents($cookie_path);
// var_dump($cookies);die;
if (is_readable($cookie_path)) {
$cookies = file_get_contents($cookie_path);
// 处理文件内容
} else {
// 文件不存在或不可读
$ZhongZhaoCookie = new ZhongZhaoCookie($this->app);
$request = [
'login_info' => [
'username' => $suokaRequest['username'],
'password' => $suokaRequest['password'],
'type' => ''
],
'login_url' => $suokaRequest['login_url'],
'cid' => $cid
];
$cookie_path = $ZhongZhaoCookie->login($request);
if($cookie_path == 'error'){
return $cookie_path;
}else{
$cookies = file_get_contents($cookie_path);
}
}
// var_dump(1);die;
$suoka_id = $this->get_suoka_id($suokaRequest['suokaid_url'], $cookie_path, $cardno);
// var_dump($suoka_id);die;
if($suoka_id == '未找到卡号'){
unlink($cookie_path);
if($num == 0){
$this->suoka($cid, $cardno, $cardpwd, $pid, $cash,1);
}
return 'error';
}
if($suoka_id == '已锁定'){
return 'old_ok';
}
if($suoka_id == '已使用'){
return 'use_error';
}
if(is_numeric($suoka_id)){
$headers = array(
'X-Requested-With: XMLHttpRequest',
'Content-Type: application/x-www-form-urlencoded',
'User-Agent: Apifox/1.0.0 (https://apifox.com)',
'Accept: */*',
'Host: 101.200.165.85',
'Connection: keep-alive',
);
$msg = $this->send_lock_card($headers, $cookie_path, $suoka_id, $url, $suokaRequest, $cardno);
if($msg == 'http_error'){
unlink($cookie_path);
if($num == 0){
$this->suoka($cid, $cardno, $cardpwd, $pid, $cash,1);
}
return 'error';
}elseif($msg != 'ok'){
Log::write('kami', 'zhongzhao', $cardno);
return 'error';
}
return 'ok';
}else{
return 'error';
}
}
}