参考的网站
(转)http://www.ecshop119.com/ecshopjc-937.html
(转)http://www.6gdown.com/softedupage/58929.html 下面有源码的下载地址
记录下遇到的问题,上面两个url里面有配置和源码了
1.支付成功后的怎么接收微信服务器给发的信息和怎么回复微信服务器,开始弄的时候不知道微信返回的什么,然后我微信返回的都写到了一个log文件查看的, 还有给微信返回的,开返回的SUCCESS不行,返回那段xml就行了。
// 获取微信通知接口postData信息 $resp = $GLOBALS[‘HTTP_RAW_POST_DATA‘]; //接收到的是一个xml $obj = simplexml_load_string($resp, ‘SimpleXMLElement‘, LIBXML_NOCDATA); //把xml转成对象 if($obj instanceof SimpleXMLElement) { $packet[‘return_code‘]=strval($obj->return_code); $packet[‘openid‘]=strval($obj->openid); $packet[‘result_code‘]=strval($obj->result_code); $packet[‘attach‘]=strval($obj->attach); $packet[‘out_trade_no‘]=strval($obj->out_trade_no); $packet[‘total_fee‘]=strval($obj->total_fee); $xml=‘<xml><return_code>SUCCESS</return_code><return_msg>OK</return_msg></xml>‘; }else{ // $xml=‘<xml><return_code>FAIL</return_code><return_msg>is error</return_msg></xml>‘; } $content = ""; if($packet[‘return_code‘]==‘SUCCESS‘ && $packet[‘result_code‘]==‘SUCCESS‘) { echo $xml; $content .="xml".$xml; $order_sn = str_replace($packet[‘attach‘], ‘‘, $packet[‘out_trade_no‘]); //获取到订单id $order_sn = trim($order_sn);//此$order_sn有可能为log_id或pay_pici_no,合并付款时,order_sn=$pay_pici_no $content .= "order_sn".$order_sn; /* 改变订单状态 */ order_paid($order_sn, 2); } $content .= "obj=".var_export($packet,TRUE); $file = "log/".date(‘Y-m-d‘)."log.txt";//要写入文件的文件名(可以是任意文件名),如果文件不存在,将会创建一个 $f = file_put_contents($file, $content,FILE_APPEND); exit;
2.扫码后页面怎么自动跳转,因为威信支付是异步的,支付完不会返回商家的页面,我这里用了一个笨的方法,让那个扫码页面不停访问后台查询订单的状态,订单状态变成支付成功了,就跳转
{literal} <script> //设置每隔1000毫秒执行一次load() 方法 var myIntval=setInterval(function(){load()},1000); function load(){ var xmlhttp; if (window.XMLHttpRequest){ // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); }else{ // code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function(){ if (xmlhttp.readyState==4 && xmlhttp.status==200){ trade_state=xmlhttp.responseText; if(trade_state == ‘SUCCESS‘){ //支付成功 location.href=‘./wxpay_success.php‘; }else if(trade_state==‘PAYERROR‘){ // document.getElementById("myDiv").innerHTML=‘支付失败‘; clearInterval(myIntval); } } } //orderquery.php 文件返回订单状态,通过订单状态确定支付状态 xmlhttp.open("POST","native_notify.php",true); //下面这句话必须有 //把标签/值对添加到要发送的头文件。 xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); xmlhttp.send("order_sn="+{$order.order_sn}); //order_sn订单号 } </script> {literal}
后台
//获取订单号 $ordersn = $_POST[‘order_sn‘]; $pay_status=get_goods_pay_status($ordersn); //查询订单状态 if($pay_status == ‘2‘){ echo "SUCCESS"; exit; }