回调url 什么时候才写逻辑呢 文档对这个没详细说明 是不是客户支付成功 微信才会去访问回调url 支付失败 是不会去访问的呢
光阴似箭催人老,日月如移越少年。
我想你可能没有仔细去看文档,附上相关 支付业务流程时序图。
这张时序图上比较清楚的说明了:在用户确认支付,输入密码后,微信验证授权成功时,便会向商户异步通知支付结果(需要注意,这里包含支付成功和支付失败两种情况),商户根据微信返回的参数更新自己的订单业务逻辑。
你在手机上付完款,看到的支付完成,这只能算进行了第一步。支付完成才会进行回调,就是把支付的交易流水推送给回调的接口。
public function noticeFirst() { Vendor('WXPAYS.lib.WxPayPubHelper'); $notify = new \Notify_pub(); //存储微信的回调 $xml = $GLOBALS['HTTP_RAW_POST_DATA']; $notify->saveData($xml); $arr = $notify->data; //验证签名,并回应微信。 //对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败, //微信会通过一定的策略(如30分钟共8次)定期重新发起通知, //尽可能提高通知的成功率,但微信不保证通知最终能成功。 $wxpay_config = array( 'APPID' => '', 'MCHID' => '', 'KEY' => '', 'APPSECRET' => '' ); if ($notify->checkSign($wxpay_config) === FALSE) { $notify->setReturnParameter("return_code", "FAIL"); //返回状态码 $notify->setReturnParameter("return_msg", "签名失败"); //返回信息 } else { $notify->setReturnParameter("return_code", "SUCCESS"); //设置返回码 } $returnXml = $notify->returnXml(); echo $returnXml; //==商户根据实际情况设置相应的处理流程,此处仅作举例======= if ($notify->checkSign($wxpay_config) === TRUE) { if ($arr["return_code"] == "FAIL") { } elseif ($arr["result_code"] == "FAIL") { } else { $info = M('order')->where(array('order_sn' => $arr['out_trade_no']))->find(); if (!$info) { exit('订单信息有误'); } /* 修改订单状态 */ $data['status'] = 1; $time_end = substr($arr['time_end'], 0, 4) . '-' . substr($arr['time_end'], 4, 2) . '-' . substr($arr['time_end'], 6, 2) . ' ' . substr($arr['time_end'], 8, 2) . ':' . substr($arr['time_end'], 10, 2). ':' . substr($arr['time_end'], 12, 2); $data['pay_time'] = strtotime($time_end); M('order')->where(array('order_id' => $info['order_id']))->save($data); $total_fee=$arr['total_fee']; /* 添加支付流水 */ $_data['appid'] = $arr['appid']; $_data['bank_type'] = $arr['bank_type']; $_data['cash_fee'] = $arr['cash_fee']; $_data['fee_type'] = $arr['fee_type']; $_data['is_subscribe'] = $arr['is_subscribe']; $_data['mch_id'] = $arr['mch_id']; $_data['openid'] = $arr['openid']; $_data['out_trade_no'] = $arr['out_trade_no']; $_data['result_code'] = $arr['result_code']; $_data['return_code'] = $arr['result_code']; $_data['total_fee'] = $total_fee; $_data['trade_type'] = $arr['trade_type']; $_data['transaction_id'] = $arr['transaction_id']; $_data['nonce_str'] = $arr['nonce_str']; $_data['sign'] = $arr['sign']; $_data['time_end'] = $arr['time_end']; $pay_flow_id=M('payment_flow')->add($_data); /* 添加财务流水 */ //订单ID $_trans_data['order_id']=$info['order_id']; //会员ID $_trans_data['user_id']=$info['user_id']; //交易流水号 $_trans_data['flow_id']=$pay_flow_id; //交易类型 $_trans_data['trans_type']='1'; //交易渠道 $_trans_data['trans_channel']='1'; $_trans_data['amount']=$total_fee*0.01; $_trans_data['add_time']=time(); M('trans_flow')->add($_trans_data); } //商户自行增加处理流程, //例如:更新订单状态 //例如:数据库操作 //例如:推送支付完成信息 } }
对,支付的时候设置好回调 url 支付成功后微信会主动调用这个 url 然后处理更新订单的逻辑
我想你可能没有仔细去看文档,附上相关 支付业务流程时序图。
这张时序图上比较清楚的说明了:在用户确认支付,输入密码后,微信验证授权成功时,便会向商户异步通知支付结果(需要注意,这里包含支付成功和支付失败两种情况),商户根据微信返回的参数更新自己的订单业务逻辑。
你在手机上付完款,看到的支付完成,这只能算进行了第一步。支付完成才会进行回调,就是把支付的交易流水推送给回调的接口。
对,支付的时候设置好回调 url 支付成功后微信会主动调用这个 url 然后处理更新订单的逻辑