php之支付宝登陆

来源:互联网 发布:淘宝网店拍摄照片 编辑:程序博客网 时间:2024/06/10 06:02

先到支付宝开放平台下载快捷登陆开发包 快捷登录开发包,


解压后里面有个demo文件夹,找到php那个,复制到你的网站里,里面的文件iamge可以不要,cacert.pem,index.php,log.txt,readme.txt 这些也可以不要,alipayapi.php这个文件看自己的需求,然后在你需要登陆的地方放好支付宝登陆图标,如ecshop的user_passport.dwt中加入<a class="zfbtn" href="oaulogin.php?type=zflogin"></a>,oaulogin.php看自己怎么取名,由于我qq,微博登陆都在这个文件里,所以我也把他放到这个文件里,然后把alipayapi.php里面的php代码复制到oaulogin.php,在alipay.config.php里面配置好key和id,修改拷贝过来的代码

elseif($type == "zflogin")
{
require(dirname(__FILE__) . "/alipaylogin/alipay.config.php");
    require(dirname(__FILE__) . "/alipaylogin/lib/alipay_submit.class.php");
    $alipaySubmit = new AlipaySubmit($alipay_config);
   //目标服务地址
    $target_service = "user.auth.quick.login";
    //必填
    //必填,页面跳转同步通知页面路径
    $return_url = "http://www.xxx.com/alipaylogin/return_url.php";这里配置回调地址,return_url.php放置的地址
    //需http://格式的完整路径,不允许加?id=123这类自定义参数


    //防钓鱼时间戳
    $anti_phishing_key = $alipaySubmit->query_timestamp();
    //若要使用请调用类文件submit中的query_timestamp函数


    //客户端的IP地址
    $exter_invoke_ip = real_ip();//这个是ecshop的获取ip地址函数
    //非局域网的外网IP地址,如:221.0.0.1
    //构造要请求的参数数组,无需改动
$parameter = array(
"service" => "alipay.auth.authorize",
"partner" => trim($alipay_config['partner']),
"target_service"=> $target_service,
"return_url" => $return_url,
"anti_phishing_key"=> $anti_phishing_key,
"exter_invoke_ip"=> $exter_invoke_ip,
"_input_charset"=> trim(strtolower($alipay_config['input_charset']))
);


//建立请求

$html_text = $alipaySubmit->buildRequestForm($parameter,"get", "页面跳转中....");
echo $html_text;
}


然后在回调页面return_url.php中修改代码,ecshop的代码修改如下,其他的按照自己的需求修改

去掉所有的html标签

define('IN_ECS', true); 


require('../includes/init.php'); 
require_once("alipay.config.php");
require_once("lib/alipay_notify.class.php");


//计算得出通知验证结果
$alipayNotify = new AlipayNotify($alipay_config);
$verify_result = $alipayNotify->verifyReturn();
if($verify_result) {//验证成功
$user_id = $_GET['user_id'];
//授权令牌
$token = $_GET['token'];
$user_name = $_GET['real_name'];
//$email = $_GET['email'];因为支付宝的email可能是电话号码,所以可能需要自己从新设置email
//echo "验证成功<br />";
$email = "youremail@type.com";
$sex = 0;
$password=md5("xxx".gmtime());


$reg_time =  gmtime();
$last_ip = real_ip();
$have_openid = $db->getRow("SELECT user_id, email, user_name FROM ". $ecs->table('users') ." WHERE openid='".$user_id."'");
if(!empty($have_openid))
{
$_SESSION['user_id'] = $have_openid['user_id'];
$_SESSION['user_name'] = $have_openid['user_name'];
update_user_info();
}else
{
$nameArr = $GLOBALS['db']->getALL("SELECT user_name FROM ".$GLOBALS['ecs']->table('users'));
foreach($nameArr as $key=>$val)
{
if($val['user_name'] == $user_name)
{
$user_name = $user_name.Date("YmdH");//重名处理
}
}
$sql = "INSERT INTO ".$GLOBALS['ecs']->table('users')."(email, user_name, password, sex, reg_time, last_login, last_ip, visit_count, openid)".
"VALUES ('".$email."', '".$user_name."', '".$password."', ".$sex.", ".$reg_time.", ".$reg_time.", '".$last_ip."', 1, '".$user_id."')";
$_SESSION['user_id'] = $GLOBALS['db']->query($sql);
$last_id = $GLOBALS['db']->insert_id();
$_SESSION['user_id'] = $last_id;
$_SESSION['user_name'] = $user_name;
$_SESSION['email'] = $email;
}
ecs_header("Location: ".ROOT_PATH."user.php\n");
exit;


}
else {
    echo "验证失败<br />";
    ecs_header("Location: ".ROOT_PATH."index.php\n");
exit;
}



0 0
原创粉丝点击