请问微信支付支付成功后如何获取所谓notify的返回值

DarKLoveCT 2015-04-20 01:07:05
情况其实不复杂,就是有一个地方一直没搞明白。我已经按照demo构成好了xml包,顺利的换取到了prepal_id,也通过js的那个接口,顺利的能弹出输入密码的对话框,也能输入密码并且钱也到了我的账户上来,都OK。
但一直困扰我的是这个:$input->SetNotify_url("http://www.xxxx.com/index.php/aaa/bbb");这一行似乎一直不起作用。因为在调用了获取prepal_id的unifiedOrder接口后,返回的数据已经不包含这个参数了。而在付完钱也弹出相应的官方的账单页面后,我发现bbb函数压根没有执行(已经提前在bbb函数中写了一段创建文件的代码,但未有新文件生成)。
其他教程基本都教到掉用JS接口弹出输入框就结束了,后面附加一句,当交易成功中,通知接口会收到一份XML文档(含有transaction_id等参数),可以用GET方法获取。所谓通知接口应该就是我们事先设置好的notify_url没跑了。但这个notify_url在文档的解释是异步处理,那理论上不需要我们另外调用,我试过另行跳转,但无法GET到相关信息。
那么不主动跳转的话,这个异步动作是在什么时候执行的呢?我要如何GET到transaction_id等参数,在收到钱的同时做些别的事情呢(给买家派发短信等)?
...全文
36266 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
cyyssly 2017-08-29
  • 打赏
  • 举报
回复
题主关注的是如何获取:你需要自己设置路由,监听这个地址。微信会get这个地址,并在body中附带信息,就像你访问微信的接口一个道理,明白了没?
yueshangzhihen89 2017-08-25
  • 打赏
  • 举报
回复
谢谢啊,对于我太有用了
  • 打赏
  • 举报
回复
楼主,能指点下么,qq386134335
anlunet 2016-11-23
  • 打赏
  • 举报
回复
inputStream = request.getInputStream(); String s; BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, "UTF-8")); while ((s = in.readLine()) != null) { sb.append(s); }可以麻烦楼主写完整点吗,谢谢!
li1990714 2016-08-09
  • 打赏
  • 举报
回复
把上面PHP的代码改成Java代码,如何实现
蓝心语 2016-07-14
  • 打赏
  • 举报
回复
引用 8 楼 qinghua39 的回复:
楼主,我是java 回调参数怎么拿,request的什么方法? 麻烦指教下,谢谢。 扣:348224249
inputStream = request.getInputStream(); String s; BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, "UTF-8")); while ((s = in.readLine()) != null) { sb.append(s); }
Simple-520 2016-07-12
  • 打赏
  • 举报
回复
楼主,我是java 回调参数怎么拿,request的什么方法? 麻烦指教下,谢谢。 扣:348224249
qq_18270721 2015-12-31
  • 打赏
  • 举报
回复
分为明调 暗调 暗调就是SetNotify_url 是看不见的操作
dehua2217 2015-11-27
  • 打赏
  • 举报
回复
引用 5 楼 q309056448 的回复:
楼主的意思不是如果通知开发者服务器,而是如何获取数据。
我来解答:

$xml = $GLOBALS['HTTP_RAW_POST_DATA'];
这个,就是微信支付服务器异步发送给开发者服务器的数据,是xml格式,你自己转一下就ok。

问题是在哪里获取啊?
q309056448 2015-11-01
  • 打赏
  • 举报
回复
楼主的意思不是如果通知开发者服务器,而是如何获取数据。 我来解答: $xml = $GLOBALS['HTTP_RAW_POST_DATA']; 这个,就是微信支付服务器异步发送给开发者服务器的数据,是xml格式,你自己转一下就ok。
layne_712 2015-10-27
  • 打赏
  • 举报
回复
楼主,你的问题解决了不?
码无边 2015-08-13
  • 打赏
  • 举报
回复
在微信支付sdk有说明,当你发起支付操作之后,会有个notify的文件,来异步处理操作的日志。

	$unifiedOrder->setParameter("notify_url",WxPayConf_pub::NOTIFY_URL);//通知地址 
通知地址会有个处理页面,文档已经说的很详细。

/**
 * 通用通知接口demo
 * ====================================================
 * 支付完成后,微信会把相关支付和用户信息发送到商户设定的通知URL,
 * 商户接收回调信息后,根据需要设定相应的处理流程。
 * 
 * 这里举例使用log文件形式记录回调信息。
*/
	include_once("./log_.php");
	include_once("../WxPayPubHelper/WxPayPubHelper.php");

    //使用通用通知接口
	$notify = new Notify_pub();

	//存储微信的回调
	$xml = $GLOBALS['HTTP_RAW_POST_DATA'];	
	$notify->saveData($xml);
	
	//验证签名,并回应微信。
	//对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败,
	//微信会通过一定的策略(如30分钟共8次)定期重新发起通知,
	//尽可能提高通知的成功率,但微信不保证通知最终能成功。
	if($notify->checkSign() == FALSE){
		$notify->setReturnParameter("return_code","FAIL");//返回状态码
		$notify->setReturnParameter("return_msg","签名失败");//返回信息
	}else{
		$notify->setReturnParameter("return_code","SUCCESS");//设置返回码
	}
	$returnXml = $notify->returnXml();
	echo $returnXml;
	
	//==商户根据实际情况设置相应的处理流程,此处仅作举例=======
	
	//以log文件形式记录回调信息
	$log_ = new Log_();
	$log_name="./notify_url.log";//log文件路径
	$log_->log_result($log_name,"【接收到的notify通知】:\n".$xml."\n");

	if($notify->checkSign() == TRUE)
	{
		if ($notify->data["return_code"] == "FAIL") {
			//此处应该更新一下订单状态,商户自行增删操作
			$log_->log_result($log_name,"【通信出错】:\n".$xml."\n");
		}
		elseif($notify->data["result_code"] == "FAIL"){
			//此处应该更新一下订单状态,商户自行增删操作
			$log_->log_result($log_name,"【业务出错】:\n".$xml."\n");
		}
		else{
			//此处应该更新一下订单状态,商户自行增删操作
			$log_->log_result($log_name,"【支付成功】:\n".$xml."\n");
		}
		
		//商户自行增加处理流程,
		//例如:更新订单状态
		//例如:数据库操作
		//例如:推送支付完成信息
	}
wyx100 2015-08-13
  • 打赏
  • 举报
回复
http://blog.csdn.net/wyx100/article/details/47184625
dotnba 2015-08-12
  • 打赏
  • 举报
回复
关注下这个问题

3,154

社区成员

发帖
与我相关
我的任务
社区描述
微信开发即微信公众平台开发,将企业信息、服务、活动等内容通过微信网页的方式进行表现,通过二次开发可以将公众账号由一个媒体型营销工具转化成提供服务的产品。
社区管理员
  • 微信开发
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧