html中传递session,html - [PHP] session在个别页面间的传递的问题

网站的成员注册想接入支付宝,并且在提交成员资料之后能跳转到支付宝,当用户实现支付之后,成员资料再存入到数据库。我用了session来存储传递数据,在return_url.php中session里的数据能有效地被传递,但是在notify_url.php中却获取的session数据竟然是空的。下面分别是这两个文件的代码。请求各位大虾帮我看看这个到底是什么问题,在线等,谢谢。

notify_url.php:

verifyNotify();

if($verify_result) {//验证成功

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//请在这里加上商户的业务逻辑程序代

/**

*连接数据库并传输数据,暂时不清楚需不需要参数的传递。

*/

$cname=$info[0];

$ename=$info[1];

$email=$info[2];

$phone=$info[3];

$IDC =$info[4];

$callU=$info[5];

$words=$info[6];

$gender =$selection[0];

$cTypy =$selection[1];

$channel=$selection[2];

/*Connect to Database*/

$con = mysql_connect(SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);

if(!$con){ die('could

not connect:'.mysql_error());

}

mysql_select_db(SAE_MYSQL_DB,$con);

$query = "insert into bp_user(cname,ename,gender,email,phone,cType,IDC,channel,callU,words,registerTime)

values('$cname','$ename','$gender','$email','$phone','$cType','$IDC','$channel','$callU','$words',now())";

$result = mysql_query($query) or die('Query failed: ' . mysql_error());

mysql_close($con);

//——请根据您的业务逻辑来编写程序(以下代码仅作参考)——

//获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表

//商户订单号

$out_trade_no = $_POST['out_trade_no'];

//支付宝交易号

$trade_no = $_POST['trade_no'];

//交易状态

$trade_status = $_POST['trade_status'];

if($_POST['trade_status'] == 'TRADE_FINISHED') {

//判断该笔订单是否在商户网站中已经做过处理

//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序

//请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的

//如果有做过处理,不执行商户的业务程序

//注意:

//退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知

//调试用,写文本函数记录程序运行情况是否正常

//logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");

}

else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {

//判断该笔订单是否在商户网站中已经做过处理

//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序

//请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的

//如果有做过处理,不执行商户的业务程序

//注意:

//付款完成后,支付宝系统发送该交易状态通知

//调试用,写文本函数记录程序运行情况是否正常

//logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");

}

//——请根据您的业务逻辑来编写程序(以上代码仅作参考)——

echo "success"; //请不要修改或删除

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

}

else {

//验证失败

echo "fail";

//调试用,写文本函数记录程序运行情况是否正常

//logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");

}

?>

return_url.php:

verifyReturn();

if($verify_result) {//验证成功

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//请在这里加上商户的业务逻辑程序代码

//——请根据您的业务逻辑来编写程序(以下代码仅作参考)——

//获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表

//商户订单号

$out_trade_no = $_GET['out_trade_no'];

//支付宝交易号

$trade_no = $_GET['trade_no'];

//交易状态

$trade_status = $_GET['trade_status'];

if($_GET['trade_status'] == 'TRADE_FINISHED' || $_GET['trade_status'] == 'TRADE_SUCCESS') {

//判断该笔订单是否在商户网站中已经做过处理

//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序

//如果有做过处理,不执行商户的业务程序

}

else {

echo "trade_status=".$_GET['trade_status'];

}

echo $info[0].",欢迎您的加入!

";

//——请根据您的业务逻辑来编写程序(以上代码仅作参考)——

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

}

else {

//验证失败

//如要调试,请看alipay_notify.php页面的verifyReturn函数

echo "验证失败";

}

?>

支付宝即时到账交易接口

[已解决]

结合rainwsy和有明的建议得出->支付宝支付成功后,用户信息写入数据库的方法:

1.在alipayapi.php中将注册信息临时存储在数据库中;

2.在notify_url.php中,用来自alipayapi的out_trade_no从数据库中来提取出用户注册信息,最后加入用户注册表中。

支付宝接口参数:https://doc.open.alipay.com/doc2/detail.htm?spm=0.0.0.0.SMaYno&treeId=62&articleId=103740&docType=1

回复内容:

网站的成员注册想接入支付宝,并且在提交成员资料之后能跳转到支付宝,当用户实现支付之后,成员资料再存入到数据库。我用了session来存储传递数据,在return_url.php中session里的数据能有效地被传递,但是在notify_url.php中却获取的session数据竟然是空的。下面分别是这两个文件的代码。请求各位大虾帮我看看这个到底是什么问题,在线等,谢谢。

notify_url.php:

verifyNotify();

if($verify_result) {//验证成功

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//请在这里加上商户的业务逻辑程序代

/**

*连接数据库并传输数据,暂时不清楚需不需要参数的传递。

*/

$cname=$info[0];

$ename=$info[1];

$email=$info[2];

$phone=$info[3];

$IDC =$info[4];

$callU=$info[5];

$words=$info[6];

$gender =$selection[0];

$cTypy =$selection[1];

$channel=$selection[2];

/*Connect to Database*/

$con = mysql_connect(SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);

if(!$con){ die('could

not connect:'.mysql_error());

}

mysql_select_db(SAE_MYSQL_DB,$con);

$query = "insert into bp_user(cname,ename,gender,email,phone,cType,IDC,channel,callU,words,registerTime)

values('$cname','$ename','$gender','$email','$phone','$cType','$IDC','$channel','$callU','$words',now())";

$result = mysql_query($query) or die('Query failed: ' . mysql_error());

mysql_close($con);

//——请根据您的业务逻辑来编写程序(以下代码仅作参考)——

//获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表

//商户订单号

$out_trade_no = $_POST['out_trade_no'];

//支付宝交易号

$trade_no = $_POST['trade_no'];

//交易状态

$trade_status = $_POST['trade_status'];

if($_POST['trade_status'] == 'TRADE_FINISHED') {

//判断该笔订单是否在商户网站中已经做过处理

//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序

//请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的

//如果有做过处理,不执行商户的业务程序

//注意:

//退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知

//调试用,写文本函数记录程序运行情况是否正常

//logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");

}

else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {

//判断该笔订单是否在商户网站中已经做过处理

//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序

//请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的

//如果有做过处理,不执行商户的业务程序

//注意:

//付款完成后,支付宝系统发送该交易状态通知

//调试用,写文本函数记录程序运行情况是否正常

//logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");

}

//——请根据您的业务逻辑来编写程序(以上代码仅作参考)——

echo "success"; //请不要修改或删除

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

}

else {

//验证失败

echo "fail";

//调试用,写文本函数记录程序运行情况是否正常

//logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");

}

?>

return_url.php:

verifyReturn();

if($verify_result) {//验证成功

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//请在这里加上商户的业务逻辑程序代码

//——请根据您的业务逻辑来编写程序(以下代码仅作参考)——

//获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表

//商户订单号

$out_trade_no = $_GET['out_trade_no'];

//支付宝交易号

$trade_no = $_GET['trade_no'];

//交易状态

$trade_status = $_GET['trade_status'];

if($_GET['trade_status'] == 'TRADE_FINISHED' || $_GET['trade_status'] == 'TRADE_SUCCESS') {

//判断该笔订单是否在商户网站中已经做过处理

//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序

//如果有做过处理,不执行商户的业务程序

}

else {

echo "trade_status=".$_GET['trade_status'];

}

echo $info[0].",欢迎您的加入!

";

//——请根据您的业务逻辑来编写程序(以上代码仅作参考)——

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

}

else {

//验证失败

//如要调试,请看alipay_notify.php页面的verifyReturn函数

echo "验证失败";

}

?>

支付宝即时到账交易接口

[已解决]

结合rainwsy和有明的建议得出->支付宝支付成功后,用户信息写入数据库的方法:

1.在alipayapi.php中将注册信息临时存储在数据库中;

2.在notify_url.php中,用来自alipayapi的out_trade_no从数据库中来提取出用户注册信息,最后加入用户注册表中。

支付宝接口参数:https://doc.open.alipay.com/doc2/detail.htm?spm=0.0.0.0.SMaYno&treeId=62&articleId=103740&docType=1

那当然,return_url是用户完成支付后由用户浏览器跳转到你的服务器的,请求发送来自用户浏览器,这时候你能通过用户识别到session。而notify_url是用户完成支付后,支付宝通过支付宝自身服务器进行调用通知的,请求来自支付宝服务器,并没有通过用户端,你当然不同通过这个来识别用户。

要识别用户,请在支付参数里携带识别用户的标识,不要依赖于session。

不需要用session,先说下原因,因为你没有session_start,且notify_url.php是支付宝访问过来的,不是你的用户.

不用session的原因:试想用户产生订单[并在支付宝生成了账单],当用户关闭了浏览器通过支付宝钱包付款的时候你的notify_url.php始终是支付宝的session,而非用户。

在生成付款URL的时候你应该在transactions表记录订单信息,例如订单号,会员ID。

应该仅用notify_url的通知来做订单状态改变的处理而非return_url

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值