thinkphp无法通知微信已经支付成功 # 背景 使用payment做为项目支付库已经有一段时间了,近期回想起当时折腾很久一个小问题,特此记录。 如何集成可以参考我之前一篇文章,TP也差不多的。 > 传送门 # 过程 当时集成后,当用户支付完成后,等待微信支付平台回调时,始终无法通知第三方支付平台已经处理成功,导致订单一直在接受微信平台的回调信息。 自己打的日志: ~~~ [ log ] 交易号为:XXX,订单编号为XXX使用微信支付完成,但是订单状态为非正常状态! ~~~ 回调代码 ~~~ /** * 微信异步回调 */ public function wxNotifyUrl(){ $callback = new PayNotify(); $config = require_once ROOT_PATH."/config/pay/wxconfig.php"; $type = 'wx_charge'; try { // 获取第三方的原始数据,未进行签名检查,根据自己需要决定是否需要该步骤 //$retData = Notify::getNotifyData($type, $config); $ret = Notify::run($type, $config, $callback);// 处理回调,内部进行了签名检查 return $ret; } catch (PayException $e) { return ajaxReturn(-1, $e->errorMessage()); } } ~~~ 已知$ret的返回值为xml ~~~ // 默认为成功 $result = [ 'return_code' => 'SUCCESS', 'return_msg' => 'OK', ]; if (!$flag) { // 失败 $result = [ 'return_code' => 'FAIL', 'return_msg' => $msg, ]; } return DataParser::toXml($result); ~~~ 那为什么微信还是一致无法收到通知呢。 **付了N个一分钱后,原来是我项目默认返回的json串结果集。 而微信要求接受的是个XML。结果集在项目返回response时被转化为json了。** 修改后成功。 ~~~ /** * 微信异步回调 */ public function wxNotifyUrl() { $callback = new TeekannePayNotify(); $config = require_once Env::get('root_path')."/config/teekanne_pay/weappconfig.php"; $type = 'wx_charge'; try { // 获取第三方的原始数据,未进行签名检查,根据自己需要决定是否需要该步骤 //$retData = Notify::getNotifyData($type, $config); $ret = Notify::run($type, $config, $callback); // 处理回调,内部进行了签名检查 return xml($ret); } catch (PayException $e) { return ajaxReturn(-1, $e->errorMessage()); } } ~~~