这是我在开发android支付sdk的时候,涉及到封装支付宝无线充值遇到的一个问题,挺有趣的,发出来共享一下. 背景: 当通过手机支付成功后,支付宝会异步通知我们一个注册过的url进行通知. 我们接收其传入参数,然后进行我们自己业务的逻辑处理. 直接上代码: 以下是
这是我在开发android支付sdk的时候,涉及到封装支付宝无线充值遇到的一个问题,挺有趣的,发出来共享一下.
背景:
当通过手机支付成功后,支付宝会异步通知我们一个注册过的url进行通知. 我们接收其传入参数,然后进行我们自己业务的逻辑处理.
直接上代码:
以下是错误的代码…..大家猜猜echo的结果值和url的结果值.
function getdataforxml($res_data,$node){ $xml = simplexml_load_string($res_data); $result = $xml->xpath($node);while(list( , $node) = each($result)) { return $node; }}//我只罗列了一个参数,实际的支付宝传入参数会很多,但结构都是这样的$input = m20130129141954478493684242013-01-29 14:20:11;$test = getdataforxml($input,/notify/out_trade_no);echo $test.
;$data = array( 'tradeno'=>$test,);$url = http://blog.lizhigang.net/?.http_build_query($data);echo $url;
这段代码运行完毕后的结果:
m2013012914195447849368424http://blog.lizhigang.net/?tradeno%5b0%5d=m2013012914195447849368424
要好奇一下了,tradeno是啥情况啊……..莫名奇妙多出来个[0]
出现这问题立马要想到tradeno有可能不是字符串. ?这时候 ?var_dump一下看看咯…..
打印出来的结果:
object(simplexmlelement)[2]string 'm2013012914195447849368424' (length=26)
尼玛是个object…….. ? 剩下的比较简单了,各种方法都可以处理,最简单的呢 ? 赋值的时候强转string就行了……或者想做的更严谨,修改一下getdataforxml咯.
完工,备忘.
原文地址:php弱语言又坑爹了:simplexml组件解析返回值的双重身份, 感谢原作者分享。