* 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:然后我就想到了来这里再次提问了。。。如果我的问题解决了,我定要把自己的成功的方法和代码,以最直接最明了最傻瓜的方法展示给大家瞧瞧。
最佳答案
