个人支付宝余额获取流程PHP

本文详细介绍了如何通过PHP代码获取支付宝登录二维码参数,组装登录链接,以及后续操作如获取登录状态、cookie、余额查询的过程。
摘要由CSDN通过智能技术生成

一、 标题获取支付宝登录二维码
1、通过curl访问 https://auth.alipay.com/login/index.htm
2、获取源码中下面这四个参数
authcenter_querypwd_login、
authcenter_qrcode_login、
rds_form_token、
alieditUid
对应的参数值
3、组装代码串,保存起来,在第二步用到

// PHP代码
$body = "support=000001&needTransfer=&CtrlVersion=1,1,0,1&loginScene=index&redirectType=&personalLoginError=&goto=https://www.alipay.com/&errorVM=&sso_hid=&site=&errorGoto=&json_tk=&method=qrCodeLogin&logonId=&superSwitch=true&noActiveX=false&password_input=&password_rsainput=&J_aliedit_using=true&password=&J_aliedit_key_hidn=password&REMOTE_PCID_NAME=_seaside_gogo_pcid&_seaside_gogo_pcid=&_seaside_gogo_=&_seaside_gogo_p=&J_aliedit_prod_type=&security_activeX_enabled=false&J_aliedit_net_info=&checkCode=&idPrefix=&preCheckTimes=5&ua=&passwordSecurityId=web|authcenter_querypwd_login|".$authcenter_querypwd_login."&qrCodeSecurityId=web|authcenter_qrcode_login|".$authcenter_qrcode_login."&rds_form_token=".$rds_form_token."&J_aliedit_uid_hidn=alieditUid&alieditUid=".$alieditUid."";

4、组装登录链接,并生成二维码,给支付宝扫码

// A code block
$login_url = "https://qr.alipay.com/_d?_b=PAI_LOGIN_DY&securityId=web%257Cauthcenter_qrcode_login%257C".$authcenter_qrcode_login;

第一步完整PHP代码

public function get_alipay_qr(){
		$header['referer'] = 'https://auth.alipay.com/';
		$content = A('Cron')->request('https://auth.alipay.com/login/index.htm',false,$header);
		
		preg_match('/value="web\|authcenter_querypwd_login\|(.*?)"/', $content, $temps);
		$authcenter_querypwd_login = $temps[1];
		
		preg_match('/value="web\|authcenter_qrcode_login\|(.*?)"/', $content, $temps);
        $authcenter_qrcode_login = $temps[1];
		S('sid',$authcenter_qrcode_login);
		
		preg_match('#<input type="hidden" value="(.*?)" name="rds_form_token"/>#', $content, $temps);
		$rds_form_token = $temps[1];
		
		preg_match('#<input type="hidden" id="alieditUid" name="alieditUid" value="(.*?)" />#', $content, $temps);
		$alieditUid = $temps[1];
				
		$body = "support=000001&needTransfer=&CtrlVersion=1,1,0,1&loginScene=index&redirectType=&personalLoginError=&goto=https://www.alipay.com/&errorVM=&sso_hid=&site=&errorGoto=&json_tk=&method=qrCodeLogin&logonId=&superSwitch=true&noActiveX=false&password_input=&password_rsainput=&J_aliedit_using=true&password=&J_aliedit_key_hidn=password&REMOTE_PCID_NAME=_seaside_gogo_pcid&_seaside_gogo_pcid=&_seaside_gogo_=&_seaside_gogo_p=&J_aliedit_prod_type=&security_activeX_enabled=false&J_aliedit_net_info=&checkCode=&idPrefix=&preCheckTimes=5&ua=&passwordSecurityId=web|authcenter_querypwd_login|".$authcenter_querypwd_login."&qrCodeSecurityId=web|authcenter_qrcode_login|".$authcenter_qrcode_login."&rds_form_token=".$rds_form_token."&J_aliedit_uid_hidn=alieditUid&alieditUid=".$alieditUid."";
		
		S('body_'.$authcenter_qrcode_login,$body);
		
		$login_url = "https://qr.alipay.com/_d?_b=PAI_LOGIN_DY&securityId=web%257Cauthcenter_qrcode_login%257C".$authcenter_qrcode_login;
		
		if($_REQUEST['test']){
			$_REQUEST['data'] = $login_url;
			$_REQUEST['name'] = time();
			$_REQUEST['return'] = 1;
			$login_img = A('Api')->curl_qrcode();
			$login_img = str_replace('./','/',$login_img);
			echo "<img src='".$login_img."' /><br>";
		}
		
        echo json_encode(['code' => 200 , 'msg' => '请使用手机支付宝扫码', 'url' => $login_url , 'sid' => $authcenter_qrcode_login]);
	}

二、通过前端循环调用下面的方法,获取登录状态和cookie

	public function get_alipay_cookie(){
		$SecurityId = $_REQUEST['sid'];
		
		$header['referer'] = 'https://auth.alipay.com/';
		$content = A('Cron')->request("https://securitycore.alipay.com/barcode/barcodeProcessStatus.json?securityId=web%7Cauthcenter_qrcode_login%7C".$SecurityId."&_callback=light.request._callbacks.callback250",1,$header);
		$first_cookie = implode('',$content['cookie']);
		preg_match('#light.request._callbacks..*?\((.*?)\)#', $content['body'], $temps);		
		$rr = json_decode($temps[1],true);
		
		$barcodeStatus = $rr['barcodeStatus'];
		if($barcodeStatus=='waiting') $msg = "请使用手机支付宝扫码";
		else if($barcodeStatus=='scanned') $msg = "已扫码,请确认";
		else if($barcodeStatus=='confirmed') $msg = "获取支付宝cookie成功";
		
		if($barcodeStatus =='confirmed') {
			$body = S('body_'.$SecurityId);
			$this->get_alipay_cookie_ok($body);
		}
		else
        	echo json_encode(['code' => 100 ,'msg'=>$msg, 'status' => $barcodeStatus ]);
	}

	//返回首页获取真正Cookie
	public function get_alipay_cookie_ok($body=""){
		
		header("Content-type:text/html;charset=utf-8");
		$header['Accept'] = 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9';
		$header['Accept-Encoding'] = 'gzip, deflate, br';
		$header['Accept-Language'] = 'zh-CN,zh;q=0.9';
		$header['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36';
		$header['Content-Type'] = 'application/x-www-form-urlencoded';
		$header['referer'] = 'https://auth.alipay.com/';
		$header['Origin'] = 'https://auth.alipay.com';
		$header['sec-ch-ua'] = '" Not A;Brand";v="99", "Chromium";v="96", "Google Chrome";v="96"';
		$header['Connection'] = 'keep-alive';
		$header['Host'] = 'authsa128.alipay.com';
		
		$content = A('Cron')->request('https://auth.alipay.com/login/index.htm',1,$header,'post',$body);
		$first_cookie = str_replace(' ','',implode('',$content['cookie']));	
		$response = A('Api')->strToUtf8($content['body']);	
		
		parse_str(str_replace(';','&',$first_cookie),$cookir_arr); //转数组		
		
		//拼接有价值的cookie
		$real_cookie[] = "zone=".trim($cookir_arr['zone']);
		$real_cookie[] = "ctoken=".trim($cookir_arr['ctoken']);
		$real_cookie[] = "JSESSIONID=".trim($cookir_arr['JSESSIONID']);
		$real_cookie[] = "ALIPAYJSESSIONID=".trim($cookir_arr['ALIPAYJSESSIONID']);
		$real_cookie[] = "CLUB_ALIPAY_COM=".trim($cookir_arr['CLUB_ALIPAY_COM']);
		
		$real_cookie_str = implode(";",$real_cookie).';';
		$userId = trim($cookir_arr['CLUB_ALIPAY_COM']);
		if($userId){
			//userId已存在的判断逻辑,自己根据情况写
		}
		else{	
			echo json_encode(['code' => 200 ,'msg'=>'cookie格式有误,请重试' , 'cookie' => $real_cookie_str, 'userId'=>$userId]);	
			return;
		}
				
       echo json_encode(['code' => 200 ,'msg'=>'扫码成功,请保存cookie' , 'cookie' => $real_cookie_str, 'userId'=>$userId, 'tips'=>$tips]);			
	}

三、发送心跳包,确保cookie一直生效(把cookie通过curl调用支付宝首页即可) 下面是获得的cookie示例
zone=RZ42B;ctoken=Kf_t8tYiWip;JSESSIONID=6F6A0A83EE6981CEFE37544E51;ALIPAYJSESSIONID=RZLr3NBYAiHmIypRlPS4authRZ42;CLUB_ALIPAY_COM=2088***6;

四、通过cookie获取余额

	public function balance_v3(){
	
		$cookie = $_REQUEST['cookie'];  //这个cookie就是上面获取到的cookie
						
		set_time_limit(0);
		
		$url="https://lab.alipay.com/user/assets/queryBalance.json";
		
		$curl = curl_init();
		
		curl_setopt_array($curl, array(
				CURLOPT_URL => $url,
				CURLOPT_RETURNTRANSFER => true,
				CURLOPT_ENCODING => '',
				CURLOPT_MAXREDIRS => 0,
				CURLOPT_TIMEOUT => 15,
				CURLOPT_FOLLOWLOCATION => true,
				CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
				CURLOPT_CUSTOMREQUEST => 'GET',
				CURLOPT_HTTPHEADER => array(
						'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
						'accept-language: zh-CN,zh;q=0.9,en;q=0.8',
						'cache-control: max-age=0',
						'Cookie: '.$cookie,
						'dnt: 1',
						'sec-ch-ua: " Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"',
						'sec-ch-ua-mobile: ?0',
						'sec-fetch-dest: document',
						'sec-fetch-mode: navigate',
						'sec-fetch-site: none',
						'sec-fetch-user: ?1',
						'upgrade-insecure-requests: 1',
						'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36',
						'referer:https://auth.alipay.com/',
						'Connection:keep-alive',
				),
		));
		$response = curl_exec($curl);
		$re = json_decode($response,true);
		
		if($re['stat'] == 'ok'){
			$balance = $re['availableAmount'];			
			$return = array(
				'availableBalance'=>0, //可用余额
				'frozenBalance'=>0, //冻结金额
				'balance' =>$balance,
				'userId'=>0, //支付宝uid 
				'ownerLogonId'=>0, //支付宝账号
				'ownerName'=>0,//支付宝姓名
			);
			 return $return;
		}
    }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值