还是支付宝和Thinkphp的问题。

浏览:2542 发布日期:2013/06/19 分类:求助交流 关键字: thinkphp 支付宝
/*
* Thinkphp3.0
* 支付宝接口
*/

前言:
首先感谢上篇问题,某个好心人童鞋的帮忙,解决了认证失败的问题。此次认证成功了,联系支付宝技术客服,对方说我的一切正常了。but,我还是遇到了问题。再次咨询支付宝,对方说不知了。我怀疑又是TP的问题。so。。

正文(问题):

支付宝有两个页面,notify_url(异步)和return_url。 这两个页面整合到TP里,就是两个方法了。

/*
* 以下是问题不正常的描述
*/

我的操作:notify_url方法异步获取的是支付宝返回来的相关数据,通过获取返回的参数,来更改数据库里订单的状态。这里就要涉及到tp的相关代码。
我的代码如下:
......
.....
..........
//商户订单号
$out_trade_no = $_POST['out_trade_no'];
//支付宝交易号
$trade_no = $_POST['trade_no'];
//交易状态
$trade_status = $_POST['trade_status'];

//省略了其他的支付宝接口代码

$Order = M('Order');
$data['stat'] = $trade_status;

//order_num是我订单表里的订单编号
$Order->where('order_num="'.$out_trade_no.'"')->setField($data);

if ($_POST['trade_status'] == 'TRADE_FINISHED')
{
//判断该笔订单是否在商户网站中已经做过处理
....
.....

鉴于支付宝技术客服说我的接口连接一切都正常和自己的感觉,我觉得上面的代码放在notify_url方法里,理论上应该是正常的。but,却不能更新订单表里的状态值。


/*
* 以下是问题正常的描述
*/

好吧好吧。。。那我把TP的那部分代码放到return_url方法里。。

//商户订单号
$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)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
//如果有做过处理,不执行商户的业务程序

$Order = M('Order');
$data['stat'] = $trade_status;

//order_num是我订单表里的订单编号
$Order->where('order_num="'.$out_trade_no.'"')->setField($data);


}
else
{
echo "trade_status=" . $_GET['trade_status'];
}

result is what?
订单表里的状态改变了。


惊讶:这是神马情况?

难道是notify没有post接收到数据?

那我把接收的参数全部换成我自己定制的。
$Order = M('Order');
$data['stat'] = 'hahaha';

//order_num是我订单表里的订单编号
$Order->where('order_num="20130619560589"')->setField($data);

Result is what?
依然没有修改状态。。

最后: 我的问题又出在哪里了?

PS:然后我就想到了来这里再次提问了。。。如果我的问题解决了,我定要把自己的成功的方法和代码,以最直接最明了最傻瓜的方法展示给大家瞧瞧。
最佳答案
评论( 相关
后面还有条评论,点击查看>>