消息关闭
    暂无新消息!
情况其实不复杂,就是有一个地方一直没搞明白。我已经按照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等参数,在收到钱的同时做些别的事情呢(给买家派发短信等)?

10个回答

︿ 2
在微信支付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");
}

//商户自行增加处理流程,
//例如:更新订单状态
//例如:数据库操作
//例如:推送支付完成信息
}


︿ 1
楼主,我是java 回调参数怎么拿,request的什么方法?
麻烦指教下,谢谢。
扣:348224249
︿ 1
inputStream = request.getInputStream();
String s;
BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
while ((s = in.readLine()) != null) {
sb.append(s);
}可以麻烦楼主写完整点吗,谢谢!
︿ 0
楼主的意思不是如果通知开发者服务器,而是如何获取数据。
我来解答:

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